ADR 022: Starlight (Astro) によるドキュメントサイトの構築
- Status: Accepted
- Date: 2026-04-22
- Deciders: Lead Engineer
Context
Section titled “Context”ADR や Design Doc を GitHub Pages で公開するにあたり、当初 Jekyll (minima テーマ + actions/jekyll-build-pages) を採用した。しかし以下の問題が発生した:
actions/jekyll-build-pagesのメンテナンス停滞: 最終リリースが 2024 年で、依存するライブラリの脆弱性リスクが高まっている- Jekyll のカスタマイズ困難: minima テーマの
header_pages設定が期待通り動作せず、全ページがナビゲーションに表示される問題の解消に_includes/header.htmlのオーバーライドが必要だった - Ruby 依存: moonshot プロジェクトは Node.js/TypeScript ベースであり、Jekyll (Ruby) はツールチェインの異物となる
Decision
Section titled “Decision”ドキュメントサイトの SSG (Static Site Generator) として Starlight (Astro) を採用する。
ドキュメントは moonshot 本体リポジトリ (docs/adr/, docs/design/) をソースオブトゥルースとし、公開用の moonshot-docs リポジトリに Starlight 用 front matter を付与して配置する。
- Astro 6 + @astrojs/starlight: ドキュメント特化フレームワーク
- GitHub Pages: ホスティング (GitHub Actions で
pnpm build→dist/をデプロイ) - Pagefind: Starlight 組み込みのローカル全文検索
Alternatives Considered
Section titled “Alternatives Considered”- Jekyll (minima) を継続:
actions/jekyll-build-pagesのメンテナンス停滞と、ナビゲーション制御の困難さから却下 - VitePress: Vue ベースで高機能だが、moonshot が React/Next.js プロジェクトであり Vue 依存は技術スタックの乖離となる。また検索機能に Algolia DocSearch の申請 or 設定が必要で、Starlight の組み込みローカル検索に比べセットアップコストが高い
- MkDocs (Material for MkDocs): Python 依存であり、Jekyll と同様のツールチェイン異物問題がある。機能は豊富だが ADR/Design Doc 程度の規模にはオーバースペック
Consequences
Section titled “Consequences”Positive
Section titled “Positive”- サイドバー・検索・ダークモードがゼロコンフィグで整う
- Node.js エコシステムに統一され、pnpm でビルドが完結する
- Astro の Islands Architecture により、クライアント JS が最小限で高速
actions/jekyll-build-pagesへの依存を排除し、サプライチェーンリスクを低減- Pagefind によるローカル全文検索が外部サービス不要で動作する
Negative
Section titled “Negative”- moonshot 本体の
docs/とmoonshot-docsリポジトリの二重管理が発生する(ADR 追加時に手動同期が必要) - Astro/Starlight の学習コストが若干発生する(ただし Markdown ファイルはほぼそのまま使用可能)
Deployment Architecture
Section titled “Deployment Architecture”- moonshot (本リポジトリ) の
docs/adr/**またはdocs/design/**がmainに push される trigger-docs-deploy.ymlがrepository_dispatchイベントをmoonshot-docsリポジトリに送信moonshot-docs側の workflow が moonshot を sparse-checkout し、docs/を Starlight front matter 付きで同期- Starlight でビルドし GitHub Pages へデプロイ