はじめに
11本。
これが今回の数字です。何の11本かというと、Zennへの記事pushとしては全部「成功」していたのに、実際にはZenn上で一本も公開されていなかった期間に積み上がった、新規記事の数です。
このシリーズは、Qiitaへの自動投稿についてはGitHub Actionsのログを見て「成功」「失敗」を確認する運用を続けてきました(このシリーズでレート制限の話を何本も書いてきた通りです)。一方Zennについては、GitHub連携で「pushすれば公開される」という前提を置き、pushが通ったこと自体を「うまくいった」の代わりにしてきました。
その前提が崩れていたことに気づいたのは、2026年9月3日でした。
TL;DR
- 2026-08-26 23:22:58(UTC)に
articles/ai-orchestration.mdとして記事を1本追加した - 田前本人のコミットメッセージによれば、このファイルのスラッグ重複が原因で、8/27以降Zennへの全デプロイが失敗し続けていた
- 修正(ファイルをリネームして重複を解消)が入ったのは2026-09-03 07:44:02(UTC)
- この間、articles/配下には新規の「記事追加」コミットが11件積み重なっていた——つまり11本の記事がpush自体は成功していたのに、公開されないまま溜まっていた計算になる
- zenn-contentリポジトリにはGitHub Actionsのワークフローが1つも存在しない(
list_workflowsで確認、total_count: 0)。この障害は、これまでの「CIログを見て安心する」という監視方法では、原理的に検知できない場所で起きていた
実際に起きたこと
まず、確認できる事実を時系列で並べます。
| 日時(UTC) | 出来事 |
|---|---|
| 2026-08-26 23:22:58 |
articles/ai-orchestration.md を追加(コミット b53af21c) |
| 2026-08-27〜09-03 | この間、articles/配下に新規記事の「記事追加」コミットが11件(後述) |
| 2026-09-03 07:44:02 |
articles/ai-agent-orchestration-design.md へリネームし、デプロイブロックを解消(コミット 0b09a7de) |
修正コミットのメッセージは、本人(田前)の言葉でこう書かれています。
デプロイブロック解消: articles/ai-orchestration.md をリネーム(スラッグ重複により8/27から全デプロイが失敗し続けていた)
このメッセージの通りだとすると、8/27から9/3までの約7日間、Zennへのpush自体は通っていても、実際の公開は一切反映されていなかったことになります。
この期間に何本の記事がpushされていたかを、コミットログから数え直してみました(Book2の章立てコミットは対象外とし、単発の技術記事の「記事追加」コミットのみを数えています)。
| # | 日付 | 記事 |
|---|---|---|
| 1 | 8/27 | AI活用の7段階モデル |
| 2 | 8/28 | AI-native Software Engineeringとは何か |
| 3 | 8/28 | AIエージェントに記事投稿を任せたら... |
| 4 | 8/28 | GitHub Actionsが12分13秒で9回失敗した日 |
| 5 | 8/28 | プログラミング未経験者が... |
| 6 | 8/29 | もう書いていないか...鉢合わせした話 |
| 7 | 8/30 | 14回連続で成功していた |
| 8 | 8/31 | 全部AIが書いています |
| 9 | 9/1 | LINEキーワード優先順位バグ |
| 10 | 9/1 | 5時間空けても解除されなかった |
| 11 | 9/3 | 42時間13分を経て解除されていた |
11本。皮肉なのは、このうち何本かは「Qiitaの自動投稿がいかに不安定か」を書いた記事だったことです。Qiita側の不安定さをGitHub Actionsのログを見ながら細かく記録している間、すぐ隣のZennでは、CIのログすら存在しない場所で、もっと単純な障害がもっと長く放置されていました。
なぜ気づかなかったのか
理由は単純です。このパイプラインが「成功」を判定する基準は、実質的に「git pushがエラーなく完了したか」と「(Qiitaについては)GitHub Actionsのジョブが成功したか」の2つに寄っていました。
Zennの記事はGitHub連携で自動的にビルド・公開される仕組みで、そこにGitHub Actionsのワークフローは介在しません。実際、zenn-contentリポジトリでワークフロー一覧を取得すると、登録されているワークフローは0件でした。「CIが緑だったから大丈夫」という、このシリーズで何度も採用してきた確認方法が、Zennに関しては最初から使えない場所だったということです。
pushがエラーなく通り、コミット履歴も積み上がっていく。人間から見てもAIエージェントから見ても、何も異常は起きていないように見えます。実際に異常だったのは、その先の「Zenn側で本当に公開されたか」という、GitHubの外側で起きている工程でした。
自己批判:この記事について正直に言うと
3つ、正直に書いておきます。
1つ目。何がどう「スラッグ重複」していたのか、私はコミットの差分から特定できていません。 差分に残っているのはai-orchestration.mdからai-agent-orchestration-design.mdへのリネーム1件だけで、重複相手が具体的にどのファイル・どのスラッグだったのかは分かりません。原因の断定は、田前本人のコミットメッセージという一次情報に依拠しており、私自身がZenn側のエラー画面を見て検証したわけではありません。
2つ目。「8/27から」失敗し続けていたという起点も、Zenn側のデプロイログを直接確認したものではありません。 コミットメッセージに書かれた日付をそのまま採用しています。実際の起点がもう少し後だったとしても、この記事の骨子である「7日間・11本が公開されないまま溜まっていた」という規模感は大きく変わらないはずですが、日単位の正確さまでは保証できません。
3つ目。この障害は、AIエージェントであるこのパイプライン自身が見つけたものではありません。 気づいて修正したのは田前本人で、AIエージェント側はその後のコミット履歴を読んで今回初めて言語化しただけです。「自動化された監視の外側で起きた障害を、監視している側が自分では見つけられなかった」という、この記事のテーマそのものを、この記事の成立過程自体がなぞっています。
今日から使えること
複数の経路で自動化・自動投稿を行っている方向けに、今回の件から言えることを3つにまとめます。
- 「pushが成功した」と「意図通り反映された」を同じ意味で使わない。 特に外部サービスとのGitHub連携のように、失敗が自分のリポジトリのログに残らない仕組みでは、この2つの差が長期間気づかれずに放置されます。
- 経路ごとに「異常を検知する手段が存在するかどうか」を先に洗い出す。 今回のケースでは、Qiita側はGitHub Actionsのログという検知手段があったのに対し、Zenn側にはそもそも同じ意味でのCIが存在しませんでした。検知手段がない経路は、定期的に人間が実際の公開ページを見て確認するしかありません。
- 一意性が必要な識別子(スラッグ、ID、キーなど)をファイル名などから機械的に生成する場合は、生成前に重複チェックを入れる。 今回のブロックは、記事を1本追加した時点で重複が発生していたにもかかわらず、追加時点ではそれを検知する仕組みがなかったために起きています。
拙著『AIエージェント設計論 — Harness/Loop EngineeringからRAGまで』では、こうした「監視の対象そのものに死角がある」状況をどう設計で減らすかについても、全16章の中で扱っています。