Astro + Cloudflare Pagesで技術ブログを構築した話
Astroフレームワークを使い、Cloudflare Pagesにデプロイする技術ブログの構築手順と、選定理由をまとめます。
なぜ Astro を選んだのか
技術ブログを構築するにあたり、いくつかのフレームワークを検討しました。
候補
- Next.js — React ベース、SSR/SSG 対応
- Gatsby — React ベース、GraphQL データレイヤー
- Hugo — Go ベース、超高速ビルド
- Astro — コンテンツファースト、マルチフレームワーク対応
Astro の決め手
- ゼロ JavaScript: デフォルトでクライアントJSを出力しない
- Content Collections: Markdownの型安全な管理
- Island Architecture: 必要な箇所だけインタラクティブに
- パフォーマンス: Lighthouse スコアがほぼ満点
プロジェクト構成
src/├── content/ # Markdown コンテンツ│ ├── blog/│ └── projects/├── components/ # UI コンポーネント├── layouts/ # ページレイアウト└── pages/ # ルーティングContent Collections の活用
Astro の Content Collections は、Markdown コンテンツを型安全に管理する仕組みです。
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({ schema: z.object({ title: z.string(), description: z.string(), pubDate: z.coerce.date(), tags: z.array(z.string()), }),});frontmatter のバリデーションが自動で行われるため、タイプミスや欠落フィールドをビルド時に検出できます。
Cloudflare Pages へのデプロイ
設定
- GitHub リポジトリを Cloudflare Pages に接続
- ビルド設定:
- ビルドコマンド:
npm run build - 出力ディレクトリ:
dist - Node.js バージョン: 20
- ビルドコマンド:
メリット
- 無料枠が充実: 月500回のビルド、無制限の帯域幅
- グローバルCDN: Cloudflareのエッジネットワークで高速配信
- 自動デプロイ: git push で自動ビルド&デプロイ
- プレビューURL: ブランチごとにプレビュー環境が作成される
パフォーマンス
Lighthouse スコア:
- Performance: 100
- Accessibility: 100
- Best Practices: 100
- SEO: 100
Astro のゼロ JavaScript アプローチにより、ほぼ満点のスコアを達成しています。
まとめ
Astro + Cloudflare Pages の組み合わせは、技術ブログの構築に最適な選択肢です。コンテンツファーストのアプローチと、優れたデプロイ体験を両立できます。