Claude Codeでブログ基盤を構築した話
このサイトにブログ機能を追加しました。CMSは使わず、MDXファイルをGit管理する構成です。この記事では、設計判断から実装までの過程を紹介します。
なぜブログ基盤を作ったのか
SHOW SmartWork Labは、AIと自動化で業務改善を支援するポートフォリオサイトです。サイト自体もClaude Codeで開発・運用しています。
これまで技術的な発信はAI運営ログで行っていましたが、運営ログは「何をしたか」の記録であり、「なぜそうしたか」「どう考えたか」を深掘りする場所がありませんでした。
体系的な情報発信のために、ブログ基盤を追加することにしました。
3つの設計案と選定
設計段階では3つの案を比較しました。
- TSファイルハードコード方式: 既存の
ai-log-data.tsと同じパターン。長文のTS文字列管理が破綻する - MDXファイル方式(採用): 1記事1ファイル。frontmatterでメタデータ管理
- Markdown + 別管理メタデータ: 2箇所の同期が必要。運用に乗らない
MDX方式を選んだ最大の理由は、記事追加がファイル1つの作成で完結することです。sitemapの更新もNavの変更も不要。ClaudeCodeにとって最もシンプルな操作です。
技術構成
| 要素 | 技術 |
|---|---|
| 記事フォーマット | MDX(Markdown + frontmatter) |
| frontmatterパース | gray-matter |
| Markdown→HTML | remark + remark-html |
| ページ生成 | Next.js App Router generateStaticParams |
| 構造化データ | BlogPosting schema(記事ごとに自動生成) |
| バリデーション | scripts/validate-blog.ts(frontmatter型チェック + 整合性検証) |
記事の追加方法
content/blog/ にMDXファイルを1つ追加するだけです。
content/blog/2026-03-19-my-article.mdx
ファイル名の日付prefix(2026-03-19-)はソート用で、URLには含まれません。上記の場合、URLは /blog/my-article になります。
frontmatterに必須フィールドを記述し、本文をMarkdownで書きます。published: true に設定すれば公開されます。
バリデーションで品質を担保
npx tsx scripts/validate-blog.ts で以下を自動チェックしています。
- 必須フィールドの欠落
- カテゴリのホワイトリスト照合
- タグの重複検出
- 公開記事の未来日チェック
- テンプレートプレースホルダの残存
- 本文の最低文字数
エラーがあればClaudeCodeが自分で修正できるので、人間の目視チェックに頼る必要がありません。
ClaudeCode運用のために整備したもの
ブログ基盤と合わせて、以下の運用ツールを整備しました。
- スキル定義 (
.claude/skills/blog/SKILL.md): 新規作成・更新の手順書 - 記事テンプレート (
_template.mdx): 見出し構成付き - ブリーフテンプレート (
_brief-template.md): 記事企画の整理用 - 更新計画テンプレート (
_update-plan-template.md): 既存記事の改善用
これにより、ClaudeCodeは「記事を書いて」と言われれば、手順に沿って自律的に作業を進められます。詳しくはClaudeCodeで記事執筆フローを回す方法で解説しています。
まとめ
ブログ基盤で最も重視したのは「ClaudeCodeが迷わず運用できること」です。ファイルベース、宣言的frontmatter、機械的バリデーション。この組み合わせで、人間は方向性を決めるだけでブログが回る状態を作りました。
開発ポータルをClaudeCode前提で育てる設計もあわせてご覧ください。