サマリ

プロジェクトhojinka.com (フリーランス→法人化 ナレッジ&比較メディア)
公開 URLhttps://hojinka.com/
用途開業届〜法人運営までのライフサイクル全工程の比較・解説 + 法人化シミュレーター
構成素 HTML/CSS + Vanilla JS + S3 + CloudFront (OAC) + ACM + Route 53 + GitHub Actions OIDC
運用コスト月 数百円〜千円台(CloudFront 配信 + Route53 zone + 少額の ACM)
運用形態main ブランチ push → GitHub Actions OIDC で自動 S3 sync + CloudFront invalidate

全体アーキテクチャ

構成図は drawio (AWS 公式アイコン v2026 系) で作成しています。下のビューアは .drawio ファイルを 直接レンダリングしています。zoom / pan / 編集ボタンが使えます。

ソース: /diagrams/hojinka/architecture.drawio (drawio で開けば編集可能)

サイト構造(6 ステージ)

フリーランス/個人事業主からマイクロ法人化までを 6 つのステージに分け、各ステージごとに 静的ページとサブディレクトリを切っています。

ステージパスカバー範囲
1. 開業/kaigyo/開業届、青色申告、屋号、会計ソフト選び
2. 確定申告(企画中)確定申告手順、節税策、e-Tax 対応
3. 案件獲得(企画中)案件サイト比較、単価交渉、契約のポイント
4. 法人化判断/hanrei/判断ポイント、シミュレーター(年収×役員報酬で税負担試算)
5. 会社設立/setsuritsu/定款、登記、印鑑、許認可、設立後手続き
6. 法人運営/zeimu/ + /card/税務会計、法人カード比較、社会保険、決算

A. 訪問者の閲覧フロー

  1. DNS ― ドメイン hojinka.com を Route 53 hosted zone (ZXXXXXXXXXX) で管理。apex の A/AAAA を CloudFront alias に設定。
  2. CloudFront ― TLS 終端 + 静的キャッシュ。hojinka.com + *.hojinka.com をカバーする ACM 証明書(us-east-1)を関連付け。
  3. S3 (private) ― 静的 HTML/CSS/JS/画像を配置。Public Access Block 全 true、CloudFront の Origin Access Control 経由でしか読めない構造。

S3 への直アクセスは構造的に不可。CloudFront 経由でのみ読める設計のため、誤アップロードによる 機密漏れリスクが小さい。

B. 法人化シミュレーター(Vanilla JS)

/hanrei/simulator/ 配下に、Vanilla JS で実装した法人化シミュレーターを配置しています。

  • 入力: 想定年収、役員報酬、配偶者役員の有無、業種別概算 など
  • 処理: 個人事業主のままの場合 / 法人化した場合の所得税・住民税・社会保険料・法人税の概算を計算
  • 出力: 比較表 + 「法人化が得になるライン」を可視化

ブラウザ上で完結する実装にしているため、サーバ・API 不要。CloudFront キャッシュだけで動作するので、 利用者が増えてもコストが上がらない設計です。

C. デプロイフロー — GitHub Actions OIDC

  1. ローカルで frontend/ を編集 → main ブランチに push
  2. GitHub Actions が起動、aws-actions/configure-aws-credentials で OIDC を使い、IAM Role hojinka-github-actions-deploy を AssumeRole(永続キーレス)
  3. aws s3 sync frontend/ s3://hojinka-web-prod-XXXXXXXXXXXX/ --delete
  4. aws cloudfront create-invalidation --distribution-id EXXXXXXXXXX --paths "/*"

GitHub Secrets に AWS の長期アクセスキーを置かない設計。OIDC 連合認証で一時クレデンシャルだけを発行し、 IAM Role 側で対象 S3 / CloudFront のみに権限を絞っています。

D. IaC — Terraform 構成

AWS リソースは Terraform で管理。state は専用 S3 バケットに DynamoDB Lock 付きで保管。

  • acm.tf — us-east-1 の ACM 証明書(hojinka.com + *.hojinka.com
  • s3_cloudfront.tf — S3 (private) + Public Access Block + Versioning + OAC + CloudFront Distribution
  • route53.tf — Hosted Zone (ZXXXXXXXXXX) + apex A/AAAA エイリアス(CloudFront へ)
  • iam_oidc.tf — GitHub Actions OIDC Provider + Role + 最小権限ポリシー(対象 S3 と CloudFront 限定)

個人 AWS アカウント (aws-prod / Account ID は伏字) に apply。state バケットは hojinka-tfstate-XXXXXXXXXXXX

採用判断のポイント

項目採用理由
フロント素 HTML/CSS + Vanilla JS記事性・速度重視。ビルド不要、全ページ即見れる、SEO に強い
シミュレーターVanilla JS(フレームワーク無し)計算ロジックが軽量で React/Vue を持ち込むほどではない
ホスティングS3 + CloudFront (OAC)静的配信で月数百円、TLS は ACM 自動更新、SEO に強い
DNSRoute 53 (apex alias)apex を CloudFront に直接向けたい(CNAME 不可制約の回避)
CI/CDGitHub Actions OIDC静的キーゼロでデプロイ、main push のみで完了
IaCTerraform再現性、構成の差分管理、複数プロジェクト統一運用

運用上の工夫

  • 差分 sync: aws s3 sync --delete で変更分のみアップ、削除も追従。CloudFront /* 1 発で全体反映。
  • シミュレーターのテスト: 入力値の境界値と典型値で expected JSON を作り、ブラウザコンソールで一括検証。
  • 記事更新の Pull Request 化: 構成変更(ステージ追加 / カードリンク変更等)は必ず PR レビューを通す。

これからやる予定

  • 記事ステージ 2(確定申告)と 3(案件獲得)の本文充実
  • シミュレーターに「役員社宅」「出張旅費規程」など節税オプション追加
  • 関連サービス(会計ソフト・登記サービス)の比較記事追加
  • sitemap.xml / 構造化データ整備で SEO 強化