◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-07-09上級

「ゲートに合格した原稿」と「公開された原稿」は同じものか — 検証と公開のあいだに開く隙間

無人パイプラインでは、品質ゲートが検証したファイルと実際に公開されるファイルが別物になる隙間があります。内容のダイジェストを束ねた合格証を発行し、公開直前に照合するTOCTOU対策の設計を、実装コード、導入前後の実測、4段階の導入手順、運用で気づいた落とし穴とともにまとめました。

claude-code132自律運用CI/CD19品質ゲート7本番運用36

✦ プレミアム記事

深夜に走らせている無人パイプラインが、ある朝、公開してはいけない原稿を公開していました。

実行ログを開くと、品質ゲートはたしかに「✅ 合格」と出力しています。その数行下で git push も成功しています。どこにも赤い文字はありません。それなのに、公開された本文には、ゲートが弾くはずの表現が残っていました。

しばらく画面を眺めて、ようやく気づきました。ゲートが読んだファイルと、git add が拾ったファイルは、同じパスを指してはいるものの、同じ内容ではなかったのです。ゲートが走ったあと、公開までのわずかな時間のあいだに、別の処理がそのファイルを書き換えていました。

エラーは一件も出ていません。すべての工程が「成功」しています。この静かさが、無人運用でいちばん厄介なところだと感じます。

検証と公開のあいだに、何が入り込むのか

これは古典的な TOCTOU(Time-of-check to time-of-use、検査時と使用時の乖離)です。ファイルシステム上のパスは値ではなく参照であり、検査した瞬間の内容を保持してはくれません。

無人パイプラインで私が実際に踏んだ侵入経路は、次の4つでした。

侵入経路何が起きるか気づきにくい理由
再生成 ゲート違反を補強するつもりで本文を書き直したが、再ゲートを忘れたまま push に進む ログには古い「✅ 合格」がそのまま残っている
自動整形・自動修正 整合性チェックの --fix がファイルを書き換え、副産物の .bak まで残す git add -A が意図しないファイルを一緒に拾う
一時ファイルの残骸 固定名の一時ファイルへの書き込みが失敗し、前回実行の内容が読まれる 書き込み失敗が非ゼロ終了として伝播しない
並行プロセス 別のスケジュール実行が同じ作業ディレクトリを触る 両方の実行が個別には成功して見える

どれも「ゲートを厳しくする」では防げません。ゲートの内容ではなく、ゲートと公開のあいだに問題があるからです。

合格証という考え方 — 判定を内容に束ねる

私が採った解決策は、ゲートの合否をそれ自体で完結させず、検査した内容そのもののダイジェストに束ねることでした。

ゲートが通ったとき、次の情報を持つ小さな JSON を発行します。

  • 検査した各ファイルの相対パスと sha256 ダイジェスト
  • 実行したゲートの名前と、ゲートスクリプト自身のダイジェスト
  • 発行時刻(単調に進む時計と壁時計の両方)
  • パイプラインの実行 ID

この JSON を「合格証(receipt)」と呼んでいます。公開の直前に合格証を読み、そこに書かれたダイジェストをもう一度ファイルから計算し直して照合します。1バイトでも変わっていれば、公開しません。

肝心なのは、合格証がファイルの内容に対して発行されるという点です。パスに対してではありません。パスは書き換わりますが、ダイジェストは嘘をつきません。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦品質ゲートの合格結果をファイルの sha256 ダイジェストに束ねる「合格証」の実装を、発行・検証の両方のコード付きで手に入れられる
✦検証と公開を同じシェル呼び出しにまとめると失敗の観測点が消える理由を理解し、握りつぶされる非ゼロ終了を洗い出せるようになる
✦ゲート合格後にファイルが書き換わる4つの侵入経路(再生成・自動整形・一時ファイル残骸・並行プロセス)と、それぞれの塞ぎ方が分かる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-08-28
名前に混ざった見えない文字を、プラグインを入れる前に洗い出す小さなスクリプト
プラグインやスキルの名前に不可視文字や制御文字が混ざっていても、ターミナルの一覧では見分けがつきません。実際に6つの紛らわしい名前を並べて ls の出力を比べ、導入前に走らせる点検スクリプトと、その点検が拾えない範囲までを整理しました。
⟐ Claude Code2026-08-28
検証スクリプトの出力を、そのまま hook から返してはいけません
hook に足した検査は正しく動いていたのに、会話のほうが先に容量を使い果たしていました。833ファイルで58バイトの検査と42KBの検査を実測で並べ、出力が会話に届く経路と、予算を機械的に守らせるラッパーの書き方をまとめます。
⟐ Claude Code2026-08-26
キャッシュのTTLを1時間に延ばすかは、離席の長さではなく戻る場所で決めています
Claude Code v2.1.242 で promptCacheTtl と subagentPromptCacheTtl が追加されました。1時間キャッシュが効く条件は離席時間ではなく、同じ作業ディレクトリと同じ git 状態へ戻るかどうかです。判断の順番と、効いているかを確かめる手順を書き残します。