zudo-doc
GitHub リポジトリ

Type to search...

to open search from anywhere

デプロイ

作成2026年4月27日Takeshi Takatsudo

GitHub Actions CI/CDを使用してzudo-docサイトをCloudflare Pagesにデプロイする。

概要

zudo-docは完全な静的サイトジェネレーターです。pnpm buildの出力はHTML、CSS、JavaScriptファイルのディレクトリであり、どこでもデプロイできます。デフォルトのデプロイ先はCloudflare Pagesで、CI/CDの自動化にはGitHub Actionsを使用します。

CIパイプラインは合計ビルド時間を短縮するために並列ジョブに分割されています。サイト生成とドキュメント履歴の抽出は独立したジョブとして実行され、デプロイ前にマージされます。

Cloudflare Pages

ビルドされたサイトはwrangler pages deployを使用してCloudflare Pagesにデプロイされます。デプロイアーティファクトには以下が含まれます:

  • Astroのビルド出力(dist/
  • 事前生成されたdocヒストリーJSONファイル(docHistoryが有効な場合)
  • /からサイトのベースパスへのリダイレクトルール

ℹ️ Info

/からのリダイレクトはビルド出力に含まれる静的な_redirectsファイルです。Cloudflare Pagesがネイティブに処理するため、Workerやサーバーロジックは不要です。

CIパイプラインの構造

プロジェクトでは2つのGitHub Actionsワークフローを使用します。

本番環境(main-deploy.yml

mainへのプッシュでトリガーされます。4つのジョブが実行されます:

  1. build-site — シャロークローン(fetch-depth: 1)、SKIP_DOC_HISTORY=1 pnpm buildでAstroサイトをビルド
  2. build-history — フルクローン(fetch-depth: 0)、@zudo-doc/doc-history-server generateを実行してすべてのコンテンツファイルのgit履歴を事前抽出
  3. deploy — サイトと履歴のアーティファクトをマージし、Cloudflare Pages(本番環境)にデプロイ
  4. notify — デプロイステータスをIFTTTウェブフックで通知

コンカレンシー: group: production-deploy, cancel-in-progress: false — 先行するデプロイはキャンセルされずに完了が許可されます。

PRチェック(pr-checks.yml

mainを対象としたプルリクエストでトリガーされます。5つのジョブが実行されます:

  1. typecheckpnpm checkを実行(Astro型チェック)
  2. build-site — シャロークローン、SKIP_DOC_HISTORY=1 pnpm build、その後check:links
  3. build-history — フルクローン、docヒストリーの生成
  4. e2e — Playwrightエンドツーエンドテストを実行(フルクローン、SKIP_DOC_HISTORYなしで履歴をインラインに埋め込み)
  5. preview — アーティファクトをマージしてCloudflare Pagesにプレビューをデプロイ、PRコメントとしてURLを投稿

コンカレンシー: group: pr-checks-{pr-number}, cancel-in-progress: true — 古い実行はCIの消費を節約するためにキャンセルされます。

プレビューデプロイ

各PRは以下のURLにプレビューデプロイを取得します:

https://pr-{number}.zudo-doc.pages.dev

URLはpreviewジョブによってPRのコメントとして自動的に投稿されます。

SKIP_DOC_HISTORY

SKIP_DOC_HISTORY=1が設定されると、Astroインテグレーションはビルド中のインライン履歴生成をスキップします。このフラグが必要な理由は、履歴生成にフルgitクローンが必要でありすべてのコミットを走査するため、メインビルドジョブ内で実行するには時間がかかりすぎるためです。

コンテキスト理由
CI build-siteジョブSKIP_DOC_HISTORY=1履歴は独立したbuild-historyジョブが生成する
CI e2eジョブ未設定E2Eテストはインラインで履歴機能を検証する
ローカルpnpm build未設定履歴はビルド出力に直接埋め込まれる

💡 Tip

SKIP_DOC_HISTORY=1なしでローカルでpnpm buildを実行すると、履歴生成がインラインで実行されます。遅くなりますが、独立した履歴アーティファクトなしで動作する自己完結型のdist/が生成されます。

ジョブ間のデータ共有

ビルドアーティファクトはactions/upload-artifactではなくactions/cacheを使用してジョブ間で共有されます。キャッシュキーはクロスラン汚染を防ぐためにgithub.run_idにスコープされています:

key: dist-${{ github.run_id }}
key: doc-history-${{ github.run_id }}

deploy(またはpreview)ジョブは両方のキャッシュを復元し、wrangler pages deployを呼び出す前にdist/ディレクトリをマージします。

📝 Note

ジョブ間のデータ転送にactions/cacheを使用すること(アーティファクトではなく)は、大きなZIPアーカイブのアップロードとダウンロードのオーバーヘッドを回避します。キャッシュエントリは一時的なイントラランデータに対してより効率的です。

必要なシークレット

リポジトリのSettings → Secrets and variables → Actionsで設定します:

シークレット説明
CLOUDFLARE_API_TOKENPagesデプロイ権限を持つCloudflare APIトークン
CLOUDFLARE_ACCOUNT_IDCloudflareアカウントID
IFTTT_PROD_NOTIFYデプロイ通知用のIFTTTウェブフックURL(オプション)

⚠️ Warning

CLOUDFLARE_API_TOKENにはCloudflare Pages: Edit権限が必要です。アカウント全体へのアクセス権限を付与するのではなく、特定のPagesプロジェクトにスコープすることを推奨します。

Revision History

AI Assistant

Ask a question about the documentation.