Zenn記事の執筆をClaude Codeで高速化する
N番煎じですが、hand_dotさんの「githubで人生を管理する」という記事を読んで、「これは良い」と思い、自分もGitHubにlifeリポジトリを作りました。もともとはwritingsという名前でZenn記事を管理するだけのリポジトリでしたが、同氏に倣ってlifeにリネームし、記事以外のものも置くようにしました。とはいえ現時点では記事執筆まわりの機能が中心です。
ところがClaude Codeを業務で使い込むうちに、Skills、Agent Teams、Hooksといった機能を知り、「記事執筆も半自動化できるのでは」と思い立ちました。結果、スラッシュコマンド一発でリサーチ・執筆・レビューが並列で走る仕組みが出来上がりました。
この記事では、私のlifeリポジトリの構造と、Claude Codeによる執筆半自動化の仕組みを紹介します。
リポジトリの全体像
まずはディレクトリ構造です。
life/
├── articles/ # Zenn記事(Markdownファイル)
├── images/ # 記事用画像
├── research/ # リサーチノート(非公開)
├── slides/ # Marpスライド
├── .claude/
│ ├── CLAUDE.md # リポジトリのコンテキスト
│ ├── settings.json # Claude Codeの権限・Hooks設定
│ ├── agents/ # Agent Teams用のエージェント定義
│ │ ├── researcher.md
│ │ ├── writer.md
│ │ └── reviewer.md
│ ├── rules/ # 文体・投稿ルール
│ │ ├── writing-style.md
│ │ ├── author-profile.md
│ │ └── x-posting-style.md
│ └── skills/ # スラッシュコマンド
│ ├── write/
│ ├── write-team/
│ ├── research/
│ ├── review/
│ ├── proofread/
│ ├── brush-up/
│ └── ...
├── Makefile
├── lefthook.yml
└── package.json
articles/とimages/はZenn CLIの標準構成そのままです。ポイントは.claude/配下で、ここにClaude Codeが記事を書くために必要な「知識」と「手順」がすべて詰まっています。
記事を書くときの流れ
実際に記事を書くときは、ターミナルでClaude Codeを起動して /write-team と打つだけです。
/write-team
すると以下が自動で走ります。
[1] ヒアリング(テーマ・読者レベル・背景を質問)
[2] GitHub Issue作成 & ブランチ作成
[3] 3エージェントを並列起動
├── researcher: Web検索で情報収集 → リサーチノート作成
├── writer: リサーチノートを統合して記事執筆
└── reviewer: 5段階レビュー(R1〜R5)で品質チェック
[4] Lintチェック & コミット
[5] PR作成
ヒアリングで「Snowflakeの入門記事を書きたい、中級者向け」と答えれば、あとは待つだけ。Issue番号の採番からブランチ命名、PR本文の記述まで全部やってくれます。
Claude Code連携の仕組み
lifeリポジトリでClaude Codeが動く仕組みは、大きく5つの要素で構成されています。
CLAUDE.md -- リポジトリの「取扱説明書」
.claude/CLAUDE.mdはClaude Codeがリポジトリに入ったときに最初に読むファイルです。ここにディレクトリ構造、Git規約、利用可能なコマンド一覧を書いています。
## Git規約
- Issue対応は必ずPRで行う
- ブランチ名: `feat/<slug>`
- コミットメッセージ: `feat: <記事タイトル>の記事を追加`
- PR: `Closes #<issue-number>` でIssueと連携
これがあるおかげで、Claude Codeはブランチ名やコミットメッセージの規約を守ってくれます。人間が書くときと同じルールで統一できるのが嬉しい。
Rules -- 文体とプロフィール
.claude/rules/配下に文体ルールや著者プロフィールを置いています。
| ファイル | 役割 |
|---|---|
writing-style.md |
です・ます調、カジュアルさの度合い、導入・締めのバリエーション |
author-profile.md |
経歴、技術スタック、価値観。「この人ならこう書く」の判断材料 |
x-posting-style.md |
X投稿用のルール(100〜200文字、シンプルに) |
特にwriting-style.mdは力を入れています。記事の種類ごとにトーンを切り替えるルールや、導入・締めのパターンを複数定義しているので、毎回同じテンプレ感のある記事にならずに済みます。
### トーンの使い分け
| 種類 | トーン | 視点 |
| --- | --- | --- |
| 入門・チュートリアル | 謙虚で親しみやすい | 学習者 |
| 推進・実践レポート | 率直で熱量がある | 実践者 |
| ツール紹介 | カジュアルで軽め | 利用者 |
自分の過去記事から良い表現を抜き出して実例として載せています。「こう書いてほしい」を具体例で示すのが一番効きます。
Skills -- スラッシュコマンド
.claude/skills/配下にスキル定義(SKILL.md)を置くと、Claude Codeで /コマンド名 として使えるようになります。
lifeリポジトリの主要なスキルを紹介します。
| コマンド | 内容 |
|---|---|
/write |
インタビュー形式で記事を執筆。Issue→ブランチ→執筆→PR |
/write-team |
Agent Teamsで並列リサーチ・執筆・レビュー |
/research |
Web検索でリサーチし、research/にノート保存 |
/review |
技術レビュー |
/proofread |
校正 |
/brush-up |
文体ルール・著者プロフィールの定期更新 |
/new |
新規記事ファイル作成 |
/preview |
プレビューサーバー起動 |
個人的に気に入っているのは/researchです。たとえば選挙の情報収集や飲食サービスの比較など、記事にする前の「調べ物」段階で使っています。Web検索で情報を集めてリサーチノートにまとめてくれるので、記事を書くかどうかに関わらず、知識の整理ツールとして重宝しています。
Agent Teams -- 3エージェント並列体制
/write-teamの裏側で動いているのがAgent Teamsです。複数のClaude Codeインスタンスをチームとして協調させる実験的機能で、使うには環境変数CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1の設定が必要です。3つのエージェントを定義しています。
.claude/agents/
├── researcher.md # リサーチャー: Web検索で情報収集
├── writer.md # ライター: リサーチノートをもとに執筆
└── reviewer.md # レビュアー: 5段階の多段レビュー
それぞれの役割を簡単に紹介します。
researcher: WebSearchツールで公式ドキュメント、Zenn記事、最新動向を調べ、競合分析まで行います。収集した情報はresearch/<slug>/research.mdにリサーチノートとして保存されます。
writer: リサーチノートとwriting-style.mdのルールを読み込んで記事を執筆します。過去の参考記事も読んで文体を合わせてくれます。
reviewer: R1(技術的正確性)からR5(最終チェック)まで5段階でレビューします。R4はDevil's Advocate(悪魔の代弁者)として、因果推論の飛躍や印象操作がないか批判的に検証するステージです。
Hooks -- 会話ログの自動保存
.claude/settings.jsonでClaude CodeのHooksを設定しています。Entire CLIと連携して、セッションの開始・終了時やツール使用時に会話ログを自動保存する仕組みです。以下は抜粋です(実際のファイルにはpermissionsやPreToolUse等の設定も含まれています)。
{
"hooks": {
"SessionStart": [{ "type": "command", "command": "entire hooks claude-code session-start" }],
"SessionEnd": [{ "type": "command", "command": "entire hooks claude-code session-end" }],
"PostToolUse": [
{ "matcher": "Task", "hooks": [{ "type": "command", "command": "entire hooks claude-code post-task" }] }
]
}
}
会話ログはGitの孤立ブランチ(entire/checkpoints/v1)に保存されるので、通常のブランチと混ざりません。ただし会話ログにはAPIキーなどのシークレットが含まれるリスクがあるため、git-secretsでpush前にスキャンするセーフティネットも入れています。
# lefthook.yml(pre-pushセクションの抜粋)
pre-push:
piped: true
commands:
scan-entire-branch:
priority: 1
run: |
if git rev-parse --verify entire/checkpoints/v1 >/dev/null 2>&1; then
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
git archive entire/checkpoints/v1 | tar -C "$TMPDIR" -x
git secrets --scan -r "$TMPDIR"
fi
Makefileとの連携
開発者の日常操作はMakefileにまとめています。
# 新規記事の作成
make article SLUG=my-article TITLE="タイトル" TYPE=tech
# プレビュー
make preview
# Lintチェック
make lint
# git-secretsのセットアップ
make setup
# Entire CLIのシークレットスキャン→push
make entire-push
Claude Codeのスキル内でもmake articleやmake lintを呼び出しています。人間が使うコマンドとAIが使うコマンドが同じなので、メンテナンスが楽です。
hand_dot記事からの進化
ここまでlifeリポジトリの技術的な仕組みを紹介してきました。改めてhand_dotさんの元記事を振り返ると、「githubで人生を管理する」というコンセプトはIssueやProjectsを使ったタスク管理・目標管理が中心でした。人生の目標をIssueで管理し、Milestoneで期限を設定し、Projectsのカンバンで進捗を可視化する。GitHubの機能をフル活用した「人生のプロジェクト管理」です。
自分のlifeリポジトリは、そこから少し方向性が変わりました。
| hand_dot氏のlife | 自分のlife | |
|---|---|---|
| 主な用途 | 人生のタスク・目標管理 | 技術発信の自動化基盤 |
| 管理対象 | Issue、Milestone、Projects | 記事、リサーチノート、文体ルール |
| 自動化 | GitHub Actionsでの通知など | Claude Codeで執筆フロー全体 |
| AI連携 | なし(当時は2021年) | Skills、Agent Teams、Hooks |
hand_dot氏の記事が「GitHubをライフマネジメントツールとして使う」だとすれば、自分のは「GitHubをAI執筆プラットフォームとして使う」に近いです。記事の内容だけでなく、文体ルールや著者プロフィールまでGit管理し、AIがそれを読み取って自律的に書く。コンテンツそのものが「コードベース」になっている感覚です。
ただ、hand_dot氏の「人生管理」のアイデアがなければこのリポジトリは生まれていません。「GitHubに記事以外のものも置いていい」と思えたのは、あの記事のおかげです。
正直なところ
この仕組みを作って良かったことと、まだ課題だと感じていることを率直に書きます。
良かったこと:
- 記事の「書き始めるハードル」が下がった。テーマさえ決まれば
/write-teamで走り出せる - 文体の一貫性が保たれる。
writing-style.mdのおかげで、毎回トーンがブレない - リサーチが並列で走るので、自分で調べる時間が減った
- レビューが厳しい。特にR4のDevil's Advocateは自分では気づかない論理の飛躍を指摘してくれる
課題:
- AIが書いた記事は「きれいにまとまりすぎる」傾向がある。個人の泥臭い体験が薄くなりがち
- Agent Teamsの実行にはそれなりのトークンを消費する。短い記事なら
/writeの方がコスパが良い - ルールファイルのメンテナンスが地味に大変。記事を書くたびに改善点が見つかる(
/brush-upで軽減はしている) - Claude Codeのアップデートが速いので、自前で作ったスキルと公式機能が被ることがある
個人的には、AIに任せきりにするよりも「AIが作った下書きを人間が手直しする」くらいのバランスが一番質の高い記事になると感じています。全自動よりも半自動。
さいごに
hand_dot氏の「githubで人生を管理する」から始まったlifeリポジトリは、Claude Codeとの出会いで「技術発信の高速化基盤」に進化しました。
仕組み自体はシンプルです。CLAUDE.mdにリポジトリのルールを書き、Rulesに文体を定義し、Skillsにワークフローを組み、Agent Teamsで並列処理する。それぞれの機能は公式ドキュメントに載っている基本的なものばかりです。
lifeリポジトリ自体はプライベートですが、この記事で紹介した構成はそのまま参考にできるはずです。Claude Codeでの記事執筆に興味がある方は、まずはCLAUDE.mdとwriting-style.mdを整備するところから始めるのがおすすめです。この2つだけでも、出力の質がかなり変わります。
どこまで自動化しても、最終的に記事を世に出すのは自分です。その責任と、裏付けとなる知識を身につける姿勢は忘れずにいたいと思っています。
Discussion
非常にタイムリーな内容でした。参考にさせていただきます。投稿いただきありがとうございます。
コメントありがとうございます!
お役に立ったようで何よりです。今後とも折に触れてご意見いただけましたら幸いです。