hojinka.com — 静的サイト × OIDC 自動デプロイ基盤
hojinka.com は、AWS S3 (private) + CloudFront (OAC) + ACM + Route 53 で配信する静的メディア基盤です。
GitHub Actions OIDC で AssumeRoleWithWebIdentity による静的キーレス自動デプロイを実装し、
main ブランチ push のみで S3 sync + CloudFront 無効化まで完結します。コンテンツ層は
フリーランス → マイクロ法人化までのライフサイクルを 6 ステージで横断する比較メディアと、Vanilla JS の
法人化シミュレーターですが、本ページは構成(インフラ + IaC + デプロイ経路)に絞って解説します。
サマリ
| プロジェクト | hojinka.com (フリーランス→法人化 ナレッジ&比較メディア) |
|---|---|
| 公開 URL | https://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 / 編集ボタンが使えます。
サイト構造(6 ステージ)
フリーランス/個人事業主からマイクロ法人化までを 6 つのステージに分け、各ステージごとに 静的ページとサブディレクトリを切っています。
| ステージ | パス | カバー範囲 |
|---|---|---|
| 1. 開業 | /kaigyo/ | 開業届、青色申告、屋号、会計ソフト選び |
| 2. 確定申告 | (企画中) | 確定申告手順、節税策、e-Tax 対応 |
| 3. 案件獲得 | (企画中) | 案件サイト比較、単価交渉、契約のポイント |
| 4. 法人化判断 | /hanrei/ | 判断ポイント、シミュレーター(年収×役員報酬で税負担試算) |
| 5. 会社設立 | /setsuritsu/ | 定款、登記、印鑑、許認可、設立後手続き |
| 6. 法人運営 | /zeimu/ + /card/ | 税務会計、法人カード比較、社会保険、決算 |
A. 訪問者の閲覧フロー
- DNS ― ドメイン
hojinka.comを Route 53 hosted zone (ZXXXXXXXXXX) で管理。apex の A/AAAA を CloudFront alias に設定。 - CloudFront ― TLS 終端 + 静的キャッシュ。
hojinka.com+*.hojinka.comをカバーする ACM 証明書(us-east-1)を関連付け。 - 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
- ローカルで
frontend/を編集 → main ブランチに push - GitHub Actions が起動、
aws-actions/configure-aws-credentialsで OIDC を使い、IAM Rolehojinka-github-actions-deployを AssumeRole(永続キーレス) aws s3 sync frontend/ s3://hojinka-web-prod-XXXXXXXXXXXX/ --deleteaws 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 Distributionroute53.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 に強い |
| DNS | Route 53 (apex alias) | apex を CloudFront に直接向けたい(CNAME 不可制約の回避) |
| CI/CD | GitHub Actions OIDC | 静的キーゼロでデプロイ、main push のみで完了 |
| IaC | Terraform | 再現性、構成の差分管理、複数プロジェクト統一運用 |
運用上の工夫
- 差分 sync:
aws s3 sync --deleteで変更分のみアップ、削除も追従。CloudFront/*1 発で全体反映。 - シミュレーターのテスト: 入力値の境界値と典型値で expected JSON を作り、ブラウザコンソールで一括検証。
- 記事更新の Pull Request 化: 構成変更(ステージ追加 / カードリンク変更等)は必ず PR レビューを通す。
これからやる予定
- 記事ステージ 2(確定申告)と 3(案件獲得)の本文充実
- シミュレーターに「役員社宅」「出張旅費規程」など節税オプション追加
- 関連サービス(会計ソフト・登記サービス)の比較記事追加
- sitemap.xml / 構造化データ整備で SEO 強化