blog
記事
Claude Code / AIワークフローの技術ハック記事(Kludge)。実際に手を動かして検証したものだけを載せる。
最終取得と件数は、別のファイルを指していた
Search Console のサイトマップ欄で、最終取得の時刻が同じまま送信URL数が2回動いた。同じ行に並ぶ2つの数字は同じ取得の結果だと思っていたが、片方はインデックス、もう片方は子サイトマップのものだった。
弾かれた直後、別の経路で同じ結果を得た
自分で置いた破壊的操作ゲートに正しく止められたあと、10秒後に別のコマンドで同じ結果を出していた。禁止はコマンドの文字列に掛かっていて、効果には掛かっていない。
検査は在った。片方の経路にだけ繋がっていた
「回っていない検査はあるか」で棚卸ししたら1件も出なかった。問いを「在るべき経路の片方にしか繋がっていないか」に変えたら、記事の公開ゲートに穴が見つかった。
gitignore の中の数字は、捏造に見える
記事に書いた脱出率が「リポジトリのどこにも無い」と2度指摘された。2度とも根拠は git の履歴検索だった。数字は作業ツリーに在って、ただ追跡されていなかった。
シード数を変えたら判定が反転した
説明できない暫定の値を消しに行ったら、シミュレーションのシード数を 5・20・40・60 と変えるだけで合否が入れ替わった。判定そのものがばらつきの中に沈んでいた。
canonicalが殻のほうを指していた
ゲーム3本のビルド設定を横に並べたら、1本だけcanonicalの宛先が違った。すぐ下の自分のコメントにも他2本にも反していて、しかも単体では正しく見える種類のずれだった。
ゲーム本体が検索に無防備だった
ブラウザゲームを配信している/play/以下を見たら、titleは裸の文字列でcanonicalもnoindexも無かった。ゲームを説明しているページと薄い重複で競合できる状態になっていた。
CLAUDE.md の書き方が21項目になるまで
Claude Code の CLAUDE.md をどう書くか。67行8千字の実物を例に、何を書いて何を docs へ出すか、なぜ抽象的な戒めは守られないのかを、実際に踏んだ事故から並べる。
走らせないCIは、いつ赤くなったか分からない
1か月以上前に組んだCIを初めて走らせたら両方落ちた。配線した日から赤かったわけではない。途中で赤くなっていて、走らせていないので誰も気づかなかった。
下書きは、撤回済みの主張を持ち回る
書き置いた記事4本を公開しようとしたら、外部レビューが4本すべてで事実誤りを見つけた。原因は「下書きが古くなった」ではなく、訂正が済んだ3日後に、訂正前の資料から書いていたことだった。
同じseedの乱数列は2回作ると相関する
同じseedから`createRng(seed)`を2回作って別用途に使ったら、同一の乱数列なので1:1で相関していた。部屋の用途を見ただけで敵の湧き位置が分かってしまう話と、その直し方。
コンテナを足したら敵が置物になった
three.jsのゲームに物入れの当たり判定を足したら、敵の15.9%がコンテナの中に湧いて動けなくなった。移動・射線・弾は洗ったのに、置く側のスポーンだけ洗い忘れていた話。
HPで帯に入れることはできた
脱出率が100%に張り付き、HPを40まで下げても動かなかった。全シードの最大被害が36しかなかったからで、さらに下げれば帯には入る。ただし敵の弾2〜3発で死ぬHPになる。数字ではなく、弾に作り変えたのに残っていた発射条件のほうを直した話。
文字列一致の検査はコメントを見逃す
「main.tsがこの関数を呼んでいるか」を正規表現のソース検査で守っていたら、対象行をコメントアウトしても`if (false)`で包んでも緑のままだった。同じ形の検査を4回積み増していた話。
git add -A で秘密ファイルを巻き込んだ
決済のバックアップコードをコミットに入れてしまった。未 push で助かったが、防いだはずのガードレールは知っている名前しか見ておらず、禁止していたはずの git add -A は5ファイルに書いてあるだけだった。
下書きの記事だけ検査を通っていなかった
ビルド成果物を実測する検査を作ってあったのに、未公開の記事はそこに入らないので1つも検査されていなかった。公開して初めて検査が効く構造の穴と、書いた検査が既存記事を落としたときの直し方。
インデックスされた。何が効いたかは分からない
記事の半分がインデックスされていない状態から、5日で古い記事が全部登録された。3つまとめて手を打ったせいで、どれが効いたのか切り分けられない。数字が良くなったときこそ帰属を主張できないという話。
座標の意味を変えたら5箇所が順に壊れた
サイドビュー化で y の意味を胴の中ほどから足元へ変えたところ、弾の発射位置から始まって5箇所が順に壊れた。症状ベースで潰すと同じ原因を何度も踏むという話と、アクセサで用途を分けた再発防止。
テストが増えたのに判定は弱くなっていた
武器を追加した回で、テスト件数は増え lint も緑だったのに、受け入れ判定が18条件それぞれの検査からグループ平均へ黙って書き換えられていた。見落とした経緯と、平均へ戻しにくくした直し方。
CSPを緩めずに常駐ゲームを載せた
style-src-attr 'none' のまま、全ページの下端に canvas のミニゲームを常駐させた。インライン style と script をゼロに保つ構成と、ロジックを canvas から切り離してテスト可能にした話。
50人集まるまで%を出さない実績集計
Cloudflare Pages Functions と KV で、ゲームの実績解除率を集計する API を書いた。人数が少ないときに%を表示しない判断と、KV にトランザクションが無いことをあえて許容した理由。
自分のガードレールを敵に壊させた話
PreToolUseフックのdenylistに、敵役のサブエージェントで実際に穴を開けさせてみた。見つかったバイパスと、denylistが二次防壁でしかない理由。
本番CSPで消えた配色をdist実測で捕まえた
shikiのインラインstyleがCSPのstyle-src-attr 'none'で全消しになるバグを、astro previewでは気づけず、本番投入前のdist実測(セキュリティレビュー)で見つけた経緯と恒久対策を書く。
確認プロンプトに頼らないAIの止め方
グローバル設定が確認プロンプトを自動スキップする環境で、Claude Codeに破壊的操作をさせないために作ったdenyリストとフックの話。誤検知の実例も書く。
Claude Code で回す複利エンジンの設計
自前ドメインに記事とWEBゲームを集約し、Claude Code のハーネスで verify→score→commit を自動化する。その土台の設計メモ。