この記事はシリーズ「Claude Code で技術ブログを無人運用する — 無料章から読む仕組みの全体像」の第 6 回(全 6 回)です。
Claude Code のスケジュール実行だけで技術ブログ(Qiita 主軸・Zenn 試験投稿・X 告知・画像生成)が人手なしで回り続ける仕組みを、運用しているリポジトリの実測ログとコマンド結果で解説する連載です。Zenn 本『Claude Code で技術ブログを無人運用する』の無料章(第 1〜3 章・第 18 章・第 20 章)をもとにしており、各回は本の該当章へ戻れる導線を持ちます。掲載する数値と実行結果は各回の執筆時点で採取し直します。
仕組み全体を自分のリポジトリで組み直したい方へ: 無料章の続き(記事の型・品質ゲート・Qiita/Zenn/X の公開設計・無人実行・計測)を全 20 章の手順書として書いた Zenn Book を公開しています(有料 500 円・試し読みあり)。
シリーズ全体の目次
- 第 1 回 1 日 4 スロットのスケジュール実行で、技術ブログが人手なしで出続ける仕組みの全体像
- 第 2 回 ガバナンスの土台は公開ベースを当てるだけ。その上にブログ層を足す境界の引き方
- 第 3 回 無人ブログの現在地を 3 か所から数える: 台帳・公開ログ・エンゲージメント実績
- 第 4 回 Zenn でデプロイ成功なのに非公開・Qiita の 429: 無人運用で踏んだ 7 症状
- 第 5 回 X の 403・承認待ちでスロットが空振り・git push が 403: 無人運用の拡散と運用の症状
- 第 6 回 本を Claude Code に読ませて自分のリポジトリに再現する: 読む順路・検証済み SHA・改訂の追随(この記事)
はじめに
この連載では、Claude Code のスケジュール実行だけで技術ブログが回り続ける仕組みを 5 回に分けて見てきました。
| 回 | 扱ったこと(1 行) |
|---|---|
| 1 | 1 日 4 スロットのスケジュール実行で、記事の執筆から公開・告知までが人手なしで進む全体像 |
| 2 | ガバナンスの土台は公開ベースを当てるだけで済ませ、その上にブログ層を足す境界の引き方 |
| 3 | 無人ブログの現在地を、記事台帳・公開ログ・エンゲージメント実績の 3 か所から数える方法 |
| 4 | Zenn のデプロイ成功なのに非公開、Qiita の 429 など、公開まわりで踏んだ 7 症状 |
| 5 | X の 403、承認待ちによるスロットの空振り、git push の 403 など、拡散と運用の 10 症状 |
| 6 | この回。仕組みを自分のリポジトリで組み直すための読み方と、その前提になる担保 |
最終回の問いは 1 つです。仕組みを書いた本を Claude Code に読ませたら、本当に自分のリポジトリで再現できるのか。 手順書をエージェントに渡すと、書かれた手順は素直に実行されます。ところが手順書の側が古くなっていると、エージェントは古い前提のまま正しく実行してしまいます。人が読むなら「なんだか違う」と気づける食い違いも、検収の基準が無ければ通り抜けます。
再現の可否を分けるのは、本の書き方よりも、次の 3 点が手当てされているかどうかです。
- どこから読ませるか(人と Claude Code で入口が違う)
- 掲載している出力が、いつのどのコードで採ったものか追えるか
- 題材のリポジトリが先へ進んだとき、本がどこまで古くなったかを機械で言えるか
対象読者は、この連載を読んで仕組みを自分のリポジトリで組み直したい人、そして「技術書は買っても半年で古くなるのでは」と迷っている人です。
掲載した出力は、2026-10-10(JST)に本リポジトリの main(コミット bf4b107)で採取したものです。実行環境は Linux のクラウド実行環境と Node v22.22.0 で、使ったのは --self-test・check・読み取りだけです。投稿や課金を伴う処理は実行していません。
入口が 2 つある
本『Claude Code で技術ブログを無人運用する』は全 20 章で、第 1 章「この本の歩き方」が 2 つの順路を分けています。人と Claude Code では、最初に必要なものが逆だからです。人は全体像が頭に入らないと個々の章の判断を追えませんが、Claude Code には全体像の説明よりも、順序と契約と完了条件が先に要ります。
人が読む順路 は、第 1〜3 章で全体像と土台を押さえ、あとは目的の部へ直行する形です。
- 記事の作り方を知りたいなら第 4〜7 章
- 公開の上限設計なら第 8〜10 章
- 告知と画像なら第 11〜14 章
- 無人運用そのものなら第 15〜17 章
- 症状がはっきりしているなら第 18 章の逆引き
Claude Code に読ませる順路 は逆向きで、仕組みを読者のリポジトリで再現させるための仕様パック、つまり第 19 章から入ります。
- 入口は第 19 章の仕様パック
- 個別の制約は各章末の「Claude Code に渡す指示の要点」
- 検収は自己テストの全件 PASS か判定用のマーカー文字列
章末の節が本当に揃っているかは、本のファイルを数えれば確かめられます。books/ 配下で「Claude Code に渡す指示の要点」の出現数を章ごとに数えると、第 19 章だけが 0 で、残る 19 章は各 1 でした(第 1 章だけは 3 で、本文中でこの節名に言及しているためです)。第 1 章の「この節は第 19 章を除く全章にある」という記述と食い違いはありません。
順路を分けた効き目は、検収の置き場所にあります。人の順路では理解が終点ですが、Claude Code の順路では「全件 PASS」という外から判定できる終点を持つので、エージェントが動いたように見えるだけの状態を完了と取り違えずに済みます。
掲載している出力は、いつのコードで採ったものか
検収の基準を自己テストに置くと、次の疑問が出ます。本に載っている出力そのものは本物なのか、という疑問です。本は、掲載している出力の出典を 3 層で持たせています。
-
版の表: 第 20 章の「本書の版」に、v1.0 の検証 SHA
fe507abと採取日 2026-09-18(JST)を載せています。章ごとの表もあり、改訂で一部の章だけ再検証すると、その章の行だけ SHA が新しくなります。 -
台帳:
content/books/claude-code-unattended-tech-blog/base-map.jsonが、検証済み SHA と「章ごとの参照ファイル」を持ちます。採取時点の値はverifiedShaが3bcaf6b、verifiedAtが 2026-09-18(JST)、章数が 20 でした。 -
生ログ:
content/books/claude-code-unattended-tech-blog/verification/に、第 1 章から第 20 章までの採取ログが 1 章 1 ファイルで 20 ファイルあります。
ここで、版の表の fe507ab と台帳の 3bcaf6b が一致していないことに気づくはずです。食い違いではなく、役割の違いです。
| SHA | 日時(JST) | 役割 |
|---|---|---|
fe507ab |
2026-09-17 20:25 | 全 20 章の出力を採取したコミット(採取 SHA) |
3bcaf6b |
2026-09-18 09:11 | 本書を取り込んだ main のコミット。更新追随の起点(検証済み SHA) |
本書自体と、本書が説明する「本の不定期 X 紹介」のレーンは、出力を採取したあとに同じリポジトリへ追加されました。採取 SHA を起点に差分を取ると、本書が自分で追加したファイルまで「題材の変更」として拾ってしまいます。そこで台帳は、本書を取り込んだあとの main のコミットを起点にしています。2 つの SHA の差分は本書が追加したファイルだけだと、第 20 章に明記されています。3bcaf6b のコミットメッセージも、本の執筆と X 紹介レーンの追加そのものでした。
この 3 層があると、「この出力はどこから来たのか」を読者の手元で辿れます。本に載っている出力と自分の出力が違ったとき、確かめる順番は、章の検証 SHA を見る、そこから自分の HEAD までに何が変わったかを見る、の 2 手になります。
3 週間で数字はどれだけ動いたか
出典が追えることと、出力がいまも同じであることは別の話です。題材のリポジトリは毎日動いているので、本が書いた数字は古くなっていきます。採取 SHA と現在の main で、第 1 章が書いている数字を数え直しました。
| 項目 | 採取 SHA fe507ab(2026-09-17) |
現在 bf4b107(2026-10-10) |
|---|---|---|
package.json の npm スクリプト数 |
123 | 191 |
うち test: で始まる自己テスト |
54 | 88 |
npm run test:article-number の件数 |
10 件(第 1 章の掲載) | 21 件 |
採取 SHA 側の数は git show fe507ab:package.json から数えたもので、第 1 章の記述(123 個のうち 54 個が自己テスト)と一致しました。3 週間弱で、npm スクリプトは 68 個、自己テストは 34 個増えています。
現在の main での自己テストの末尾は次のとおりです。
$ npm run test:article-number
...
✅ article-number self-test: 21 件すべて PASS
第 1 章の掲載は「10 件すべて PASS」です。件数は違いますが、検収の形(全件 PASS)は同じで、本の記述が誤っていたわけではありません。採取時点ではその件数で正しく、その後にテストが足されただけです。逆に言えば、本に「10 件」とあるのを見て手元の 21 件を失敗と判断するのは誤りです。この「数字は動くが、検収の形は動かない」状態を、読者とエージェントの両方が区別できるようにする仕組みが要ります。
古くならないための改訂 4 段階
第 20 章は、改訂を思いつきではなく題材の更新を起点にした 4 段階で回すと定めています。判定器は scripts/check-book-base-drift.js です。
-
影響章を機械で洗い出す: 検証済み SHA から HEAD までの変更ファイルを列挙し、章の参照パスに当たった章を
DRIFTとして並べます。本書は題材に自リポジトリを指定しているので、clone せずに作業ツリーの git 履歴だけで判定します。 - 該当章だけ再検証する: 列挙された章のコマンドを実行し直し、出力が変わっていれば本文を差し替えて生ログを採り直します。変わらなければ本文には触れず、SHA だけを進めます。
-
台帳を進める: 版の表の該当行と
base-map.jsonのverifiedShaを書き換えます。章の参照パスは各章末の「この章が参照する本リポジトリのファイル」から機械生成する規約です。 - 版の表に追記する: 章ごとの SHA が違えば、「v1.1 では 08 章と 11 章だけが新しい SHA」のように、どこが変わった改訂かが表から読めます。
判定語は 3 値です。BOOK_DRIFT OK が exit 0、DRIFT が exit 10、検証済み SHA に到達できないときの UNKNOWN が exit 2 で、判定不能を OK に丸めません。判定器そのものの自己テストは次のとおり通りました。
$ node scripts/check-book-base-drift.js --self-test
✅ check-book-base-drift --self-test PASSED(18 ケース)
では、本書はいまどの状態か。2026-10-10 に実行した結果がこれです(本書の行だけ抜粋しています)。
$ npm run check:book-drift
BOOK_DRIFT DRIFT book=claude-code-unattended-tech-blog verified=3bcaf6b head=bf4b107 changed=743 chapters=20
- 01-how-to-read(この本の歩き方 — 人が読む・Claude Code に読ませる)
CLAUDE.md / docs/rules/env-vars.md / docs/rules/posting-limits.md / docs/rules/x-posting-playbook.md / package.json / scripts/lib/article-number.js / tools/calc_daily_cost.py / tools/cost_dimensions.py / tools/gh_shim.py
- 02-big-picture …
(以下、20 章すべてが列挙される)
対処: 該当章を base HEAD で再検証し、verification/ と 18-revision-log を更新して base-map.json の verifiedSha を進める。
終了コードは 10 でした。3bcaf6b から HEAD までは 374 コミット(git log --oneline 3bcaf6b..HEAD | wc -l)、変更ファイルは 743 件で、20 章すべてが改訂待ちです。末尾の「対処」に出る 18-revision-log は、同じ判定器を共有する既刊側の付録章の名前で、本書ではこの第 20 章にあたります。
20 章すべてが DRIFT という結果は、見栄えのよい数字ではありませんが、そのまま載せます。理由は 2 つあります。
第一に、DRIFT は「本の記述が誤っている」という判定ではありません。「この章が参照するファイルが検証時点から変わったので、再検証が要る」という判定です。上の第 1 章の行に出ている package.json と scripts/lib/article-number.js は、前節で見たとおり実際に変わっています(スクリプト数 123→191、テスト 10 件→21 件)。それでも検収の形は保たれていて、第 1 章の手順が手元で壊れるわけではありません。どこまで影響があるかを決めるのが段階 2 の再検証で、DRIFT はその入口です。
第二に、全章が並ぶ原因は、参照パスが日常的に更新されるファイルを含んでいることにあります。CLAUDE.md や package.json は仕組みに手が入るたびに更新されやすいファイルで、374 コミットのあいだに実際に変更され、第 1 章の行にも並んでいます。この判定器は、変更されたファイルが章の参照パスに当たったかどうかだけを見ており、変更の中身までは見ません。参照パスを絞れば DRIFT は減りますが、章の根拠になっているファイルを外すと、その章は二度と検出されなくなります。台帳の ignore には、毎スロット変わる状態ファイル・トラッカー・生成物を外す 17 パターンが入っています。これを外すと、本書は常に DRIFT になり、判定そのものが意味を失います。検出漏れと過剰検出のどちらに倒すかで、この台帳は過剰検出の側に倒しています。
章ごとの検証時点は台帳と版の表に残るので、DRIFT の状態でも「この章の出力はいつのものか」は失われません。古くならない、というのは記述が永遠に最新という意味ではなく、どれだけ古くなったかを常に言える、という意味です。
改訂は Zenn の本のデプロイ枠(8 日に 1 冊)を消費しません。既存の本のチャプター更新は上限の対象外だからです。一方で、投稿トラッカーに行を足すと新規公開として数えられ、次に本を出せる日が後ろへずれるので、改訂ではトラッカーに書き込みません。
改訂を読者に伝える経路
Zenn の本は、ファイルを更新して GitHub へプッシュすれば同じ URL のまま反映され、追加の購入なしに読者へ届きます。ただし、更新されたことは自動では通知されません。本書が用意している入口は 2 つです。
- 第 20 章「本書の版」の表: 何をいつ改訂したかの一次情報です。手順がうまくいかないときは、自分が読んだ版より新しい行が増えていないかを先に確認します。
- X の不定期紹介: 本の紹介投稿を不定期に流しており、改訂時は「改訂」の見出しで更新した章を添えます。記事の新着告知とは別枠です。
Claude Code に本を読ませる場合も、確認の順序は同じです。版の表で章ごとの SHA を確認し、自分の手元の自己テストが全件 PASS かを見る。件数が本と違っても全件 PASS なら契約は保たれており、FAIL が出たらその章が改訂待ちかどうかを版の表で確かめます。
無料で読める 5 章
この連載は、本の無料章をもとに、数値と出力を各回の執筆時点で採り直して書いてきました。無料章は次の 5 つです。
| 章 | タイトル | 連載との対応 |
|---|---|---|
| 01 | この本の歩き方 | 第 3 回・第 6 回(この回) |
| 02 | 全体像 | 第 1 回・第 3 回 |
| 03 | 土台を入れる | 第 2 回 |
| 18 | トラブルシューティング逆引き | 第 4 回・第 5 回 |
| 20 | 改訂履歴と検証済み SHA | 第 6 回(この回) |
部立てで言えば、入口(01〜03)と、逆引きと再現(18〜20)のうち再現の仕様パック(19)を除いた部分が無料です。仕組みの中身にあたる第 4〜17 章と、Claude Code に読ませる入口の第 19 章は有料章です。連載で扱えたのは、仕組みの全体像と、壊れたときの症状と、本の読み方までということになります。
結論
冒頭の問いに戻ります。本を Claude Code に読ませたら、本当に自分のリポジトリで再現できるのか。
答えは条件付きです。検収の基準と、本の古さを測る物差しの 2 つが揃っているときに限り、再現できたかどうかを判定できます。 再現そのものを保証するのは、本の文章ではなく、外から判定できる完了条件です。
- 検収の基準: Claude Code は第 19 章の仕様パックから入り、自己テストの全件 PASS かマーカー文字列で終点を判定します。
- 出典: 採取 SHA
fe507ab・検証済み SHA3bcaf6b・20 章分の生ログの 3 層で辿れます。 - 古さの物差し: 題材は 3 週間弱で 374 コミット進み、npm スクリプトは 123 から 191 に増えました。それでも
check:book-driftが、再検証の要る章を exit 10 と章の一覧で返します。2026-10-10 時点では 20 章すべてが再検証待ちで、これが毎日動くリポジトリを題材にした本の実態です。
この判定器の出力から読み取れるのは、本の改訂を人の注意力に任せると、改訂が要るかどうかの判断自体が止まりやすいということです。題材が毎日動く以上、「たぶんまだ大丈夫」は検証されない仮定のまま積み上がります。判定器が全章を DRIFT と並べてくる状態は、その仮定を毎回目に見える形にしているにすぎません。
自分のリポジトリに持ち込むなら、まず自分の手順書(本でも README でも構いません)に、2 つの欄があるかを確かめてください。1 つは「この手順の完了をどのコマンドの何という出力で判定するか」、もう 1 つは「この手順はどのコミットで検証したか」です。この 2 つが空のまま Claude Code に渡すと、エージェントは手順を実行できても、それが再現できたのかどうかを誰も言えません。
この記事と本の関係
この回は、Zenn 本『Claude Code で技術ブログを無人運用する』の第 1 章「この本の歩き方」と第 20 章「改訂履歴と検証済み SHA」をもとに、数値と判定コマンドの出力をすべて 2026-10-10 に採り直して書いたものです。どちらも無料章で、第 1 章 と 第 20 章 から読めます。連載全体も、この 2 章に第 2 章・第 3 章・第 18 章を加えた 5 つの無料章をもとにしています。続きにあたるのは有料章で、第 19 章が Claude Code に読ませて自分のリポジトリで同じ仕組みを組むための仕様パック、第 4〜17 章が記事の型・品質ゲート・Qiita と Zenn と X の公開設計・無人実行・計測の各論です。本の改訂状況は、第 20 章の版の表でいつでも確認できます。
参照
本リポジトリ内のファイル(リポジトリは非公開のため、パスだけを示します):
-
books/claude-code-unattended-tech-blog/01-how-to-read.md: 2 つの読む順路・全 20 章の地図・掲載している出力と検証 SHA -
books/claude-code-unattended-tech-blog/20-revision-log.md: 本書の版・章ごとの検証済み SHA・改訂の進め方・読者に改訂を伝える経路 -
books/claude-code-unattended-tech-blog/19-reproduce-with-claude-code.md: 第 19 章「Claude Code に読ませて再現する」(有料章のためタイトルのみ) -
content/books/claude-code-unattended-tech-blog/base-map.json: 検証済み SHA と章ごとの参照ファイルの台帳 -
content/books/claude-code-unattended-tech-blog/verification/: 章ごとの採取ログ(20 ファイル) -
scripts/check-book-base-drift.js: 改訂が必要な章の判定器(npm run check:book-drift) -
scripts/lib/article-number.js: 記事連番の判定(npm run test:article-number) -
package.json: npm スクリプトと自己テストの一覧
シリーズの前後の記事
- ⬅️ 前の記事: 第 5 回 X の 403・承認待ちでスロットが空振り・git push が 403: 無人運用の拡散と運用の症状
- ➡️ 次の記事: なし(全 6 回・この記事で完結です)
公開済みの回(4 本・どの回からでも読めます)
- 第 1 回 1 日 4 スロットのスケジュール実行で、技術ブログが人手なしで出続ける仕組みの全体像
- 第 2 回 ガバナンスの土台は公開ベースを当てるだけ。その上にブログ層を足す境界の引き方
- 第 3 回 無人ブログの現在地を 3 か所から数える: 台帳・公開ログ・エンゲージメント実績
- 第 4 回 Zenn でデプロイ成功なのに非公開・Qiita の 429: 無人運用で踏んだ 7 症状
仕組み全体を自分のリポジトリで組み直したい方は、無料章の続き(記事の型・品質ゲート・Qiita/Zenn/X の公開設計・無人実行・計測)を全 20 章の手順書として書いた Zenn Book(有料 500 円・試し読みあり)へどうぞ。