※ この記事にはアフィリエイトリンクが含まれています。リンク経由で購入しても読者の皆さんに追加費用は発生しません。収益は本サイトの運営費に充てています。
Claude Codeに「記事を書いて」と頼んだことはありますか。1回目は悪くない文章が出てきます。でも2回目以降、口調がズレる。SEOルールを忘れる。アフィリエイトの注意事項が抜ける。毎回同じことを補足する手間が生まれます。
この問題は「プロンプトが悪い」のではなく、ルールをどこに置くかの設計が悪いのです。僕はClaude CodeのCLAUDE.mdとルールファイルを整備することで、キーワードを渡すだけでSEO・口調・アフィリエイト開示を全部守ったHTMLドラフトが出てくる仕組みを作りました。
この記事ではその設計思想と具体的な実装、実際のサンプル出力を公開します。
こんな方に読んでほしい
- Claude Codeで記事を書かせているが品質が安定しない
- 毎回同じ指示を繰り返している
- AIに「ルール」を覚えさせたいが方法がわからない
- ブログ運営の自動化をTypeScript・CLIベースで進めているエンジニア
Claude Codeで記事を自動生成する仕組みの全体像
まず構成を整理します。このシステムは3層に分かれています。
CLAUDE.md ← プロジェクト全体のコンテキスト(常時読み込み)
.claude/rules/ ← ドメインルール(SEO・アフィリなど)
.claude/skills/ ← タスク定義(/write-article などのコマンド)
ユーザーが/write-articleと打つと、Claude Codeはこの3層を全部読んだ上でHTMLドラフトを生成し、drafts/articles/{slug}.htmlに保存します。
ChatGPTとの違い
ChatGPTのセッションは毎回リセットされます。前回「一人称は僕で」と伝えても、次のセッションでは忘れています。Claude Codeは起動のたびにCLAUDE.mdを読み込むため、ルールがセッションをまたいで持続します。
これは小さな違いに見えて、運用規模が大きくなるほど効いてきます。記事50本を量産するとき、毎回ルールを口頭で補足するか、ファイルに書いておけば二度と言わなくて済むかの差です。
Cursor・GitHub Copilotとの違い
CursorやCopilotはコード補完が主用途で、「ブログ記事のSEOルール」を教える設計にはなっていません。Claude CodeはCLI上で動き、プロジェクトのファイルをすべて読める。テキスト生成のルールをコードと同じリポジトリで管理できる点が、ブログ自動化との相性が良い理由です。
Claude Codeの設計思想:「指示」より「文脈」
Claude Codeの思想の核心は、「毎回指示するのではなく、文脈を整備する」という考え方です。
Anthropicの設計ドキュメントには「Constitutional AI」という概念があります。AIに守らせたいことは、会話の中で指示するのではなく、事前に原則として定義する。CLAUDE.mdはその考え方をプロジェクトレベルで実装したものです。
「誰として振る舞うか」を定義する
CLAUDE.mdの冒頭には、このプロジェクトが何者かを書きます。
## Project Overview
ブログ+SNS自動運用システム for ai-fukugyo-hack.com。
「エンジニアの自動化実践記録」をポジションとし、
n8n / Playwright / API連携の過程をコンテンツ化する。
対象読者はコードが書ける人。
これを読んだClaudeは「このプロジェクトはコードが書ける読者向けのエンジニアブログだ」と理解した上で動きます。「初心者向けにやさしく説明して」という指示は不要になります。
禁止事項は「なぜ禁止か」まで書く
ルールを書くとき、禁止:〜と書くだけでは曖昧さが残ります。僕のCLAUDE.mdにはこう書いています。
## Mandatory Style Rules
- 一人称:「僕」のみ
- 禁止:「ぶっちゃけ」「正直」「まじ」等の口語・子供っぽい表現。
本音感は表現ではなく内容(実体験のメリット・デメリット)で出す
- 体験を捏造しない。なければ [TODO:実体験] マーカーを残す
- 「次にやること」は具体リストにしない
「なぜ禁止か」を書くことで、Claudeがエッジケースで正しく判断できるようになります。「ぶっちゃけ」は禁止でも、本音を書くこと自体は推奨、という微妙な線引きが伝わります。
ルールはコードと同じリポジトリで管理する
これが僕のこだわりポイントです。SEOルールも口調ルールもアフィリエイトルールも、すべてMarkdownファイルとしてGitで管理しています。
.claude/
├── rules/
│ ├── seo-rules.md ← タイトル文字数、H2構造、KW配置
│ └── affiliate-rules.md ← A8リンク形式、rel属性、開示文
└── skills/
└── write-article/
└── SKILL.md ← /write-article コマンドの定義
ルールを変更したらgit diffで何が変わったか追跡できます。「先月から記事の口調が変わった」という問題が、コードの変更と同じ粒度で管理できるようになります。
CLAUDE.mdとルールファイルの書き方
実際のファイル構成と記述例を見ていきます。
CLAUDE.mdに書くこと・書かないこと
CLAUDE.mdはプロジェクト全体に常に適用されるルールを書く場所です。記事1本ごとの指示を書く場所ではありません。
| CLAUDE.mdに書く | 書かない(別ファイルへ) |
|---|---|
| プロジェクトの目的・対象読者 | 記事ごとのキーワード・テーマ |
| 口調・一人称ルール | SEOの数値ルール詳細(→ seo-rules.md) |
| 禁止事項・倫理的な制約 | アフィリエイトリンクのURL |
| コマンド一覧(どこに何のスキルがあるか) | スキルの実行手順(→ SKILL.md) |
seo-rules.mdの記述例
# SEO共通ルール(記事生成時に自動適用)
## タイトル
- 32文字以内(Google検索結果で切れない)
- メインKWをタイトル前半に配置
## 見出し構造
- H2: 4〜8個。半数以上にKWまたは関連語を含む
- H3: 各H2に2〜4個
## 本文
- 最初の100字以内にメインKWを出現させる
- 全体で5,000〜7,000字
- 1文は60字以内、1段落は3〜4文以内
- 内部リンク1〜3本、外部リンク2〜5本
## 記事公開前チェックリスト
1. タイトル32文字以内、KW前半配置
2. メタディスクリプション120字以内、行動動詞で終わる
3. H2数4〜8、50%以上にKW含有
...(省略)
数値ルールはMarkdownの箇条書きで書くと、Claudeが読みやすく、人間も読みやすい。コメントに「なぜこの数字か」を添えておくと、後で自分がルールを変更するときに迷いません。
affiliate-rules.mdのポイント
アフィリエイトルールで特に重要なのが、「使ってはいけないURL形式」を具体例付きで書くことです。
## A8.netリンクの注意
- 記事に貼るのは px.a8.net/svt/ejp?a8mat=... 形式の実アフィリURL
- pub.a8.net/a8v2/media/linkAction.do は管理画面URLなので絶対に記事に貼らない
- 実URLの取得は npx tsx src/tools/a8-get-links.ts で行う
「絶対に記事に貼らない」という強い表現を使っています。これを書かないと、Claudeがプレースホルダーとして管理画面URLを使ってしまうことがあります。実際に一度やらかして、この一文を追加しました。
スキル定義(/write-article)でコマンド化する
ルールが整ったら、タスクの実行手順を「スキル」として定義します。スキルはCLI上で/write-articleのように呼び出せる、再現性のあるタスク定義です。
SKILL.mdの全文
---
name: write-article
description: ブログ記事ドラフトを生成する。SEO・スタイル・アフィリルールを自動適用し、drafts/articles/に保存する
---
# 記事ドラフト生成
## 手順
1. ユーザーから記事テーマ・キーワードを受け取る
2. 以下のファイルを読み込む:
- .claude/rules/seo-rules.md — SEOルール
- .claude/rules/affiliate-rules.md — アフィリエイトルール
- reference/affiliate-links.json — 使えるアフィリリンク一覧
- reference/style-guide.md — 文体ガイド
3. ルールに従って記事HTMLを生成する
## 記事フォーマット
```html
<!-- title: 32文字以内のタイトル -->
<!-- slug: url-slug -->
<!-- meta_description: 120文字以内 -->
<p>※ アフィリエイト開示文</p>
<p>冒頭:結論ファースト + 「こんな方に読んでほしい」リスト</p>
<h2>KWを含む見出し(4〜8個)</h2>
```
## 出力
drafts/articles/{slug}.html に保存する
設計のこだわり:手順を「Claude任せ」にしない
SKILL.mdで最も重要なのが「Step 2:読み込むファイルの一覧」です。ここを省略すると、Claudeがどのルールを参照したか不明になります。
ファイル名を明示することで、「このスキルはseo-rules.mdとaffiliate-rules.mdを読んで動く」という仕様が人間にも読めるドキュメントになります。スキルを修正するとき、どのルールファイルを変えればいいかが一目でわかります。
スキルを呼び出す
# Claude Code CLI上で
/write-article
# Claudeが聞いてくる
キーワードと記事テーマを教えてください。
# 入力例
キーワード: n8n セルフホスト
テーマ: VPSにDockerでn8nをインストールする手順
ターゲット: n8nを使ってみたいがセルフホストは初めてのエンジニア
この3つを渡すだけで、SEOルール・口調・アフィリエイト開示を守ったHTMLドラフトがdrafts/articles/n8n-selfhost-guide.htmlに生成されます。
実際のサンプル:キーワードから下書きが出るまで
実際に/write-articleを呼び出して生成したドラフトの冒頭部分を公開します。
入力
キーワード: Claude Code 記事生成
テーマ: Claude Codeにルールを読み込ませてブログ記事を自動生成する
ターゲット: コードは書けるがClaude Codeは初めてのエンジニア
生成されたドラフトの冒頭部分
<meta charset="utf-8">
<!-- title: Claude Codeでブログ記事を自動生成する方法 -->
<!-- slug: claude-code-article-generation -->
<!-- meta_description: Claude Codeにルールファイルとスキル定義を読み込ませて
ブログ記事ドラフトを自動生成する仕組みをコード付きで解説します -->
<!-- category: ai-productivity -->
<p>※ この記事にはアフィリエイトリンクが含まれています。...</p>
<p>Claude Codeに「記事を書いて」と頼んだことはありますか。
1回目は悪くない文章が出てきます。でも2回目以降、口調がズレる...</p>
<h3>こんな方に読んでほしい</h3>
<ul>
<li>Claude Codeで記事を書かせているが品質が安定しない</li>
<li>毎回同じ指示を繰り返している</li>
...
</ul>
どのルールが反映されているか
| 出力の特徴 | 適用されたルール | ファイル |
|---|---|---|
| タイトルが32文字以内 | タイトル文字数制限 | seo-rules.md |
| 冒頭にアフィリエイト開示文 | 開示文の配置 | affiliate-rules.md |
| 「こんな方に読んでほしい」リスト | 冒頭ターゲット明示 | seo-rules.md |
| 一人称「僕」、口語禁止 | スタイルルール | CLAUDE.md |
| 結論を冒頭に配置 | 結論先行ルール | CLAUDE.md |
| HTMLコメントにtitle/slug/meta | 記事フォーマット | SKILL.md |
人間が確認するべきは「体験談が実体験かどうか」だけです。Claudeは体験を捏造しないよう指示してあるため、実体験が必要な箇所には[TODO:実体験]マーカーを残します。マーカーを検索して、自分の実体験を補記するだけで完成します。
生成されない内容:Claudeの限界
このシステムでも生成できないものがあります。
- スクリーンショット:
[TODO:スクリーンショット 設定画面]のマーカーだけ残る - 実際のエラーメッセージ:「こういうエラーが出た」という実体験は書けない
- 現時点の料金情報:公式ページで確認して書き足す必要がある
「生成できる部分」と「人間が入れる部分」を明確に分けて設計しているので、TODOマーカーで管理しています。下書きが完成したらgrep -r "\[TODO" drafts/で一覧を出して、上から潰していく運用です。
設計してわかったClaude Codeならではのこだわりポイント
ルールは「なぜか」まで書くと精度が上がる
「1文60字以内」とだけ書くより、「1文60字以内(Google検索結果で切れないため)」と書いた方が、Claudeがルールの意図を理解して適用します。例外が生じたとき(技術用語で60字を超えざるを得ない場合など)に、ルールの趣旨から外れない判断ができるようになります。
禁止事項より「代わりにどうするか」を書く
「次にやることを具体リストにしない」というルールには、「進展があれば報告します程度に留める」という代替案を一緒に書いています。禁止だけ書くと曖昧になる箇所が、代替案があると一意に決まります。
パイプラインとルールを同じリポジトリで管理する
投稿スクリプト(src/pipeline.ts)もルールファイル(.claude/rules/)も、同じGitリポジトリにあります。「記事品質の変化」も「投稿ロジックの変更」も、同じgit logで追跡できます。WordPress REST APIの投稿自動化と組み合わせると、ドラフト生成から投稿まで一気通貫になります。
スキルは「手順書」ではなく「仕様書」として書く
SKILL.mdの手順を細かく書きすぎると、Claudeが手順を追うことに集中して、ルールを参照し忘れることがあります。「Step 2でこのファイルを読む」という指示は仕様として書きますが、「H2をこう書け」という細かい手順はseo-rules.mdに任せる分離が安定します。
運用上の注意点
CLAUDE.mdが長くなりすぎるとルールが無視される
CLAUDE.mdに何でも書きたくなりますが、長くなるほど重要なルールが埋もれます。一般的に400行を超えたあたりから、後半のルールが参照されにくくなります。CLAUDE.mdはプロジェクト概要と絶対ルールだけに絞り、詳細は.claude/rules/以下のファイルに分けるのが安定します。
ルールの競合に注意する
seo-rules.mdとaffiliate-rules.mdで矛盾するルールを書くと、Claudeがどちらを優先するか不定になります。「同じリンクを2箇所まで」というアフィリルールと「内部リンクを1〜3本」というSEOルールは一見競合しますが、それぞれ別の対象(外部アフィリリンクvs内部リンク)を指しています。この区別をルールファイル内に明記しておくと混乱しません。
生成した記事は必ずレビューする
どれだけルールを整備しても、Claudeが生成した記事をノーチェックで公開するのはリスクがあります。特に料金情報は公式ページで裏取りが必須です。「2026年3月時点で〇〇円」という記述は、生成後に必ず確認します。
まとめ:ルールを書く手間が、指示する手間をゼロにする
Claude Codeでブログ記事を自動生成する仕組みの核心は、「毎回指示する」を「一度ルールを書く」に変換することです。
初期投資として、CLAUDE.mdとルールファイルの整備に2〜3時間かかります。その後は、キーワードとテーマを渡すだけでSEO・口調・アフィリエイトルールを全部守ったドラフトが出てきます。記事50本目も、1本目と同じ品質基準が保たれます。
このシステム自体が、アフィリリンク自動取得やWordPress REST API投稿と組み合わさってはじめて完成します。次回は生成したドラフトをSNSにも展開する仕組みを書く予定です。進展があれば報告します。
参考:

コメント