Claude Codeでブログ記事生成を自動化する~ CLAUDE.md・スキル・2層アーキテクチャの入門ガイド~

「ブログを書きたいけど、時間がない」— AIエンジニアとして日々の情報収集や開発に追われる中、情報発信の重要性は分かっていても、なかなか記事作成に手が回らない方は多いのではないでしょうか。

筆者も同じ悩みを抱えていました。Notionに論文やニュースをストックする習慣はあるのに、それを記事にするまでの「最後の一歩」が踏み出せない。そこで、Claude Codeを使ってブログ記事の生成から投稿までを一気通貫で自動化するツールを作ってみました。

本記事では、Claude Codeをこれから使ってみたい方に向けて、このツールの設計と実装を具体的なコード例とともに紹介します。なお、本プロジェクトのPythonコードはもちろん、スキル定義やCLAUDE.mdも含めて、基本的にClaude Codeが設計・生成したものです。「こういうツールが欲しい」と伝えるだけで、スキル定義もコードもベースとなるものはClaude Codeが作ってくれます。あとは実際に動かしながら、うまくいかない箇所や改善したい点をフィードバックして修正を重ねていくことで、どんどん洗練させていくことができます。

Claude Codeとは?

Claude Codeは、Anthropicが提供するターミナルベースのAI開発アシスタントです。VS CodeやCursorのようなIDE拡張とは異なり、ターミナルで直接Claudeと対話しながら開発を進められるのが特徴です。

Claude Codeの真の強みは、プロジェクトに合わせたカスタマイズ性にあります。具体的には以下の2つの仕組みが重要です。

CLAUDE.md:プロジェクトの「取扱説明書」

CLAUDE.mdは、Claude Codeがプロジェクトを理解するための設定ファイルです。ここに書いた内容は、Claudeが毎回コンテキストとして読み込みます。

# CLAUDE.md

## Project Overview
AIエンジニア「Aidotters」の情報発信効率化ツール。
ブログ記事生成・WordPress投稿・Notion連携・情報収集を一貫して行う。

## Commands
### Running Tests
uv run pytest

### Linting/Formatting
uv run ruff check .
uv run black .

## Architecture
### Design Patterns
- Protocol: CollectorProtocol, PublisherProtocol で共通インターフェース定義
- Registry: テンプレートレジストリパターンで content_type からテンプレートを取得
- 2層アーキテクチャ: スキル層(Claude Code)+ ツール層(Python)

CLAUDE.mdがあることで、Claudeはコードベースの構造・命名規則・テスト方法を最初から把握した状態で作業を開始できます。「このプロジェクトでは uv run pytest でテストを実行する」「Protocolパターンで設計している」といった情報を毎回説明する必要がなくなるわけです。

スキル:再利用可能な「コマンド」

スキルは、Claudeが必要なときに動的に読み込めるプロンプトです。.claude/skills/ ディレクトリにMarkdownファイルとして定義しておくと、ユーザーがコマンドを呼び出したタイミングでCloudeがそのプロンプトを読み込み、記述された手順に沿って作業を進めてくれます。

たとえば、本プロジェクトでは以下のようなスキルを定義しています。

スキル コマンド 機能
ブログ記事生成 /create-blog-post 情報収集→記事生成→レビュー→投稿
WordPress投稿 /publish-to-wordpress ドラフト記事をWordPressに投稿
X投稿 /publish-to-x 記事紹介をXに投稿

/create-blog-post と入力するだけで、Claudeがスキル定義に従って情報収集から記事投稿までを一連のフローで実行してくれます。

プロジェクトの全体像

何を自動化したのか?

本プロジェクト「social-content-creator」は、ブログ記事のネタ出し → 情報収集 → 記事生成 → レビュー → WordPress投稿 → X告知までを、Claude Codeとの対話で完結させるツールです。

ユーザー: /create-blog-post --type paper-review --url https://arxiv.org/abs/xxxx

Claude Code:
  1. テンプレート取得 → 論文解説テンプレート
  2. 情報収集 → URLから論文内容を取得
  3. 記事生成 → テンプレートに沿って執筆
  4. レビュー → ユーザーに確認、修正
  5. WordPress投稿 → ドラフトとして保存
  6. X投稿 → 紹介文を自動生成して投稿

アーキテクチャ:2層構造

このプロジェクトの設計で最も重要なのが2層アーキテクチャです。

スキル層はClaude Codeが得意な「自然言語での記事執筆」「情報の要約・構造化」「ユーザーとの対話」を担当します。ツール層はPythonが得意な「API通信」「データの検証・保存」「テンプレート管理」を担当します。

この分離により、LLMの強み(自然言語処理)とプログラミングの強み(厳密なデータ処理)を最適に組み合わせています。

ディレクトリ構成

social-content-creator/
├── .claude/
│   ├── skills/              # スキル定義
│   │   ├── create-blog-post/
│   │   ├── publish-to-wordpress/
│   │   └── publish-to-x/
│   ├── commands/            # コマンド定義
│   └── agents/              # エージェント定義
├── src/
│   ├── models/              # データモデル
│   ├── generators/          # 記事生成エンジン
│   ├── collectors/          # 情報収集ツール群
│   ├── publishers/          # 投稿連携
│   ├── templates/           # コンテンツタイプ別テンプレート
│   └── utils/               # ユーティリティ
├── docs/
│   ├── drafts/              # 下書き記事
│   ├── posts/               # 投稿済み記事
│   └── briefs/              # ブレスト結果のメモ
├── CLAUDE.md
└── pyproject.toml

設計のポイント

1. Protocolパターンで拡張しやすく

情報収集と投稿の機能は、Pythonの Protocol を使って共通インターフェースを定義しています。

from typing import Protocol

class CollectorProtocol(Protocol):
    async def collect(self, query: str, **kwargs: object) -> list[CollectedData]:
        ...

class PublisherProtocol(Protocol):
    async def publish(self, post: BlogPost, **kwargs: object) -> PublishResult:
        ...

この設計により、新しい情報ソースや投稿先を追加する際に、既存のコードを変更する必要がありません。たとえば「noteにも投稿したい」と思ったら、PublisherProtocol に従った NotePublisher クラスを作るだけです。

現在、以下のコレクターとパブリッシャーが実装されています。

コレクター(情報収集):
– URLFetcher: 指定URLの内容取得
– GitHub: リポジトリ情報の取得
– WebSearch: Web検索結果の取得
– NotionNews: Notion経由のGoogle Alertニュース
– NotionPaper: Notion経由のArxiv論文
– Gemini: Gemini APIによる調査レポート

パブリッシャー(投稿):
– WordPress: REST APIでのブログ投稿
– X: OAuth 1.0aでのツイート投稿

2. テンプレートレジストリで記事タイプを管理

8種類のコンテンツタイプ(週刊AIニュース、論文解説、プロジェクト紹介など)を、レジストリパターンで管理しています。

# テンプレートの取得は1行
from src.templates import get_template

template = get_template("weekly-ai-news")
# → セクション構成、文字数目安、文体ガイドがすべて入っている

各テンプレートは ContentTemplate モデルで定義され、セクション構成・文字数目安・文体ガイドをすべて含んでいます。新しい記事タイプを追加するときは、テンプレートファイルを1つ追加するだけです。

3. スキル定義で複雑なワークフローを再現可能に

/create-blog-post スキルの定義ファイルには、以下のような手順が記述されています。

## 実行フロー

### ステップ0: ブレスト(--type 未指定時のみ)
- Notion MCPでストックしたニュースを検索
- WebSearchで最新トレンドを調査
- 3〜5つの切り口を提案し、ユーザーと壁打ち

### ステップ1: 情報収集
- テンプレート取得
- タイプに応じたデータ収集(Web検索、URL取得等)

### ステップ2: 記事の生成
- テンプレートのセクション構成に従って執筆

### ステップ3: レビューと修正
- ユーザーに表示し、修正ポイントを確認

### ステップ4: WordPress投稿
- カテゴリ・タグを確認して投稿

スキル定義はMarkdownで書かれているため、プログラミングの知識がなくてもワークフローの追加・修正ができます。これがClaude Codeのスキルの大きな魅力です。

始め方:あなたのプロジェクトでも試してみよう

Claude Codeを使った自動化を始めるのに、大掛かりな準備は不要です。以下の3ステップで始められます。

Step 1: CLAUDE.mdを書く

まずはプロジェクトのルートに CLAUDE.md を作成し、プロジェクトの基本情報を記述しましょう。

# CLAUDE.md

## Project Overview
このプロジェクトは〇〇を目的としたツールです。

## Commands
npm run dev     # 開発サーバー起動
npm run test    # テスト実行
npm run build   # ビルド

## Architecture
- src/: ソースコード
- tests/: テストコード

最初はシンプルでOKです。使いながら育てていけば大丈夫です。

Step 2: スキルを定義する

.claude/skills/ ディレクトリを作成し、自動化したいワークフローをMarkdownで記述します。

# my-skill

## 実行フロー
1. 〇〇を確認する
2. △△を実行する
3. 結果をユーザーに表示する

Claude Codeはこの手順書に沿って作業を進めてくれます。

Step 3: Pythonツール層を必要に応じて追加

単純なタスクならスキル定義だけで十分ですが、API連携やデータ処理が必要な場合はPythonのツール層を追加します。本プロジェクトのように Protocol を使った拡張可能な設計にしておくと、後からの機能追加がスムーズです。

まとめ

本記事では、Claude Codeを使ったブログ記事生成パイプラインの設計と実装を紹介しました。

ポイントをまとめると:

  • CLAUDE.md でプロジェクトの「取扱説明書」を定義し、Claudeに文脈を与える
  • スキル でMarkdown形式のワークフローを定義し、複雑な作業を自動化する
  • 2層アーキテクチャ(スキル層 + ツール層)でLLMとプログラミングの強みを組み合わせる
  • Protocolパターンとレジストリパターンで拡張しやすい設計にする

Claude Codeの魅力は、プログラミングの知識があればワークフローの自動化を非常に手軽に始められる点にあります。CLAUDE.mdとスキル定義を書くだけで、あなたの開発パートナーが誕生します。

情報発信に限らず、テスト自動化、ドキュメント生成、コードレビューなど、さまざまな場面でClaude Codeを活用できます。ぜひ、皆さんのプロジェクトでも試してみてはいかがでしょうか。

本記事で紹介したプロジェクトのソースコードはGitHubで公開しています。スキル定義やCLAUDE.mdの書き方の参考にしてみてください。

👉 aidotters/social-content-creator

コメント

タイトルとURLをコピーしました