Claude Code と Astro で作ったブログを運営していく

ASBAstroCloudflarePages

⚠️ 現在製作中のため、内容は不正確なことがあります。

AST(Claude Code と Astro でブログを作って Cloudflare Pages で公開する)で作ったブログを、自分のブログとして使えるところまで育てる。サイト情報・記事の書き方・SEO・編集ワークフローを順に扱う。

1. はじめに

ASTmk-astro-blog リポジトリを作って Cloudflare Pages に公開済みの状態から始める。本記事ではそのテンプレートを「自分のブログ」に育てるためのトピックを扱う。

扱うこと:

ハンズオンは AST と同じく Claudeデスクトップアプリ(→ CDG)の Claude Code で進める前提。Cloudflare Pages のデプロイは push したら自動で走るので、コードを書いて push、を繰り返すだけ。

2. 全体像(ファイル構造の再確認)

Astro のブログテンプレートが生成する主なフォルダ・ファイル:

mk-astro-blog/
├── astro.config.mjs       ← サイト設定(sitemap、サイトURL など)
├── public/                ← 配信時にそのままコピーされる静的アセット
│   └── favicon.svg
├── src/
│   ├── consts.ts          ← SITE_TITLE / SITE_DESCRIPTION の定数
│   ├── pages/             ← ルーティング(index.astro, about.astro, blog/...)
│   ├── layouts/           ← ページレイアウト(BlogPost.astro など)
│   ├── components/        ← Header, Footer, BaseHead など
│   ├── content/
│   │   ├── config.ts      ← Content Collection のスキーマ定義
│   │   └── blog/          ← .md / .mdx 記事
│   └── styles/            ← CSS(global.css)

ポイント:

3. サイト情報をきちんと書き換える

AST 4 章で雑に書き換えたサイト情報を、より整った形に直していく。

3-1. サイト名・説明

src/consts.ts に定数として置かれている。

prompt
src/consts.ts の SITE_TITLE と SITE_DESCRIPTION を確認して、
以下に揃えて。

- SITE_TITLE: 「日々のメモ」
- SITE_DESCRIPTION: 「日々の生活について気が向いたら書きます」

他のファイル(Header.astro, Footer.astro, 各 pages/)にハードコード
された "Astro Blog" や "Astro" が残っていないか確認して、見つけたら
書き換えて。

3-2. About ページ

src/pages/about.astro がデフォルトでサンプル文章になっている。自己紹介に書き換える。

prompt
src/pages/about.astro の本文を、以下の内容で書き換えて。

- 著者: 匿名ペンギン
- 自己紹介: 日々の生活と読んだ本について書いています
- 連絡先: GitHub (@yourname)、X (@yourname)

既存のレイアウト構造(<Layout>、<main>、見出しなど)はそのまま残して、
中の文章だけ書き換えてくれればよい。

3-3. フッター

src/components/Footer.astro に著作権表記や SNS リンクのテンプレが入っている。

prompt
src/components/Footer.astro を以下に書き換えて。

- コピーライト: © 匿名ペンギン
- SNS リンク: 自分の GitHub と X のアカウントに変更
- デフォルトで入っている不要な SNS(Mastodon, Twitter のサンプル等)は削除

3-4. ナビバー

src/components/Header.astro がデフォルトで Home / Blog / About になっている。必要に応じて項目を増減する。

prompt
src/components/Header.astro のナビゲーション項目を確認して、
不要なリンクは削除、必要なリンク(例: Tags ページ)があれば
追加して。

4. 記事の書き方

4-1. フロントマターの基本項目

サンプル記事のフロントマター(先頭の --- で囲まれた部分)の例:

---
title: 'My First Blog Post'
description: 'これはテンプレのサンプル記事'
pubDate: 'Jul 08 2022'
heroImage: '../../assets/blog-placeholder-3.jpg'
---

主な項目:

必須項目とそうでないものの定義は src/content/config.ts に書かれている。z.string() は必須、z.string().optional() は任意、というスキーマ定義。

4-2. 下書き機能(draft: true)

書きかけの記事を「ローカルでは見えるけど本番ビルドからは除外」したい。フロントマターに draft: true を入れる運用にする。

ただし Astro のブログテンプレートはデフォルトで draft を扱わないので、スキーマと一覧ページのフィルタを少し編集する必要がある。Claude Code に依頼:

prompt
記事のフロントマターに draft: true と書いたとき、ローカル(npm run dev)では
表示するが、本番ビルド(npm run build)からは除外される仕組みを作って。

- src/content/config.ts の schema に draft: z.boolean().optional() を追加
- 記事一覧ページ・個別記事ページで、本番(!import.meta.env.DEV)の場合は
  draft: true の記事を弾くフィルタを追加

- 修正対象のファイルは現状を見て判断して

実装後、適当な記事に draft: true を入れて、npm run devnpm run build && npm run preview で挙動の違いを確認するとよい。

4-3. 画像の使い方

Astro では画像の置き場が2種類ある:

src/content/blog/foo.md から src/assets/photo.jpg を使う場合:

---
heroImage: '../../assets/photo.jpg'
---

本文中の画像も同じ書き方:

![説明](../../assets/photo.jpg)

public/ に置いた画像は最適化されない代わりに、URL が一意(/photo.jpg)で安定する。外部から参照される可能性のあるもの(SNSシェア時の OGP 画像など)は public/ がよい。

5. SEO 系

5-1. astro.config.mjs の site 設定

SEO 系の機能(OGP、sitemap、RSS)はすべて「サイトの URL」が起点になる。astro.config.mjssite を自分の公開 URL に揃えておく:

export default defineConfig({
  site: 'https://mk-astro-blog.pages.dev',
  integrations: [sitemap()],
});

Claude Code に:

prompt
astro.config.mjs の site プロパティを 'https://mk-astro-blog.pages.dev' に
書き換えて(自分の Cloudflare Pages の公開 URL に合わせる)。

5-2. OGP / Twitter Cards

src/components/BaseHead.astro に OGP(og:title og:description og:image など)と Twitter Cards のメタタグが入っている。記事ページでは title description heroImage を反映する形でテンプレ済み。

トップページのデフォルト OGP 画像が必要なら、public/ に置いて参照する:

prompt
public/og-default.jpg を OGP のデフォルト画像として使う設定を入れて。
記事に heroImage がない場合は、これがフォールバックされるようにして。

5-3. sitemap.xml

@astrojs/sitemap integration が組み込み済み。5-1 で site を設定していれば、npm run build 時に dist/sitemap-index.xmldist/sitemap-0.xml が自動生成される。

確認:ローカルでビルドして dist/ の中身を見るか、公開後に https://mk-astro-blog.pages.dev/sitemap-index.xml にアクセスする。

5-4. RSS フィード

src/pages/rss.xml.js がテンプレに同梱されている。https://mk-astro-blog.pages.dev/rss.xml で配信される。RSS リーダー(Feedly など)に登録すると、push のたびに新着が届く。

5-1 で site を設定すれば、RSS の各記事 URL も自動で更新される。

6. 編集ワークフロー

ブログ運営では「思いついたときに書く」が大事。複数の編集経路を覚えておくと便利。

6-1. ローカル(Claude Code)

メインのワークフロー。~/Desktop/claude/mk-astro-blog で Claude Code を起動して、npm run dev で開発サーバーを上げたままにする。.md を保存するたびに HMR でブラウザが自動リロードされる。

仕上がりを Claude Code に投げる流れ:

prompt
今日の散歩について短い記事を書いて。
タイトルは「夕方の近所を歩く」、本文は3〜5段落くらいで。
src/content/blog/ に walk-evening.md として保存して。
heroImage は src/assets/ の既存サンプル画像を使ってよい。

6-2. GitHub Web UI で直接編集

GitHub のリポジトリページで .md を開き、右上の 編集(鉛筆アイコン) をクリック。ブラウザ上で編集して、コミットメッセージを書いて Commit changes

6-3. github.dev でブラウザから編集

GitHub のリポジトリページで . キーを押すと、ブラウザ内に VS Code が立ち上がる(→ GBA 6-4)。複数ファイルをまとめて編集できる。コミット・push もブラウザ内で完結。

6-4. どの経路でも push したら自動デプロイ

どの経路で編集しても、main ブランチに push すれば Cloudflare Pages が自動でビルド・デプロイする。「公開ボタン」が常に git push、というのが Astro × Pages の気持ちよさ。

7. 規模感の目安

書き続けて記事数が増えてきたとき、Astro × Cloudflare Pages の構成がどこまで耐えるかをざっくりつかんでおくと心強い。

数千記事までは「気にせず書く」で十分。大きく育ってきて気になったら、ページネーションを入れる、画像の置き場を整理する、という順で対処していけばよい。

7-1. ページネーションを入れる

Astro はページネーションをファイルベースで実装できる。一覧ページのファイル名を [...page].astro のようにすると、ビルド時に /blog/, /blog/2/, /blog/3/ のような URL が自動生成される。

prompt
src/pages/blog/[...page].astro を作って、ブログ一覧を10件ずつページ分けして。
1ページ目は /blog/、2ページ目以降は /blog/2/, /blog/3/ という URL に。
ページ下部に前後ページのリンクも置いて。

ページネーションは標準では未設定なので、記事が増えてきたタイミングで入れればよい。

8. 次のステップ

ここまでで、自分のブログとして使える形にカスタマイズできた。

書き続けるほどブログが育つ。git push がそのまま「公開ボタン」になる感覚を楽しみつつ、自分の場所を育てていく。


2026-05-24 タツヲ (yto)