本文へ移動
BenriWorks Lab

開発記事公開日

Claude Fable 5.1 で13リポジトリにGA4を入れた記録

複数のモニターにターミナルとプルリクエストの一覧を映した机で、こちらを向いて座っている男性の開発者

16サイトに同じ計測タグを入れる作業を、Claude Code のFable 5.1に任せました。公式ドキュメントにある仕様と、13サイトで届いて3サイトで届かなかった顛末、届かなかった原因を書いたのが誰だったかを記録します

同じ計測タグを16のサイトに入れる。作業としては単純です。単純だからこそ、人がやると16回目あたりで手が滑ります。コピーしたスニペットの1文字を落とし、それが本番でだけ壊れる。BenriWorksはこの作業を、Claude Code で動く Claude Fable 5.1 に任せました。

13サイトで計測が届き、3サイトで届きませんでした。届かなかった3つのうち2つは、任せた側の仕様書が間違っていました。残る1つは、AIが書いたコードが本番でだけ壊れていました。そしてその3つを見つけたのは、コードを書いたAIではありません。

公式ドキュメントにある Fable 5.1 の仕様

Fable 5.1 は2026年9月1日に公開されたモデルで、Anthropicのモデル一覧では「demanding reasoning and long-horizon agentic work」向けと位置づけられています。同じドキュメントによれば、コンテキストウィンドウは100万トークン、最大出力は12万8千トークン、料金は入力100万トークンあたり10ドル、出力は50ドルです。思考は常時オンの「adaptive thinking」で、深さは effort パラメータで調整し、既定は high です。

同じモデルが2つの名前で提供されている点も、ドキュメントに明記されています。Claude Mythos 5.1 は Fable 5.1 と同じ能力を持ちますが、Project Glasswing の参加者に招待制で提供されるものです。Fable 5 のドキュメントには、Fable 側にだけ安全分類器が入っていて、要求を断る場合があることが書かれています。開発者から見た違いはそこにあり、私たちが使うのは分類器付きの Fable 側です。

Claude Code のドキュメントは、Fable 5.1 を「tasks larger than a single sitting」に向くモデルと説明しています。1回の作業で終わらない仕事、という意味です。Anthropicの発表では、エージェント型の科学研究を測る Terminal-Bench-Science 0.1 で Fable 5 の24.7パーセントから52.6パーセントへ、業務自動化を測る AutomationBench で17.1パーセントから31.4パーセントへ上がったとされています。前者の標準誤差はモデルあたり3.5から4.5ポイントと注記されています。

数字はそれとして、私たちが知りたいのは、13のリポジトリに同じ変更を入れる仕事が「1回の作業で終わらない仕事」に入るのかどうかでした。

任せた仕事の形

計測の設計は先に人が決め、仕様書に書きました。GA4のプロパティは1つ、データストリームも1本。16サイトがすべて同じ測定IDを持ち、アプリごとの数字はホスト名で分けて見る。本番ドメイン以外からのアクセスを混ぜないよう、スニペットはホスト名を見て自分を止める。ページ遷移の計測はGA4の拡張計測に任せ、コードから手動で送らない。

Fable 5.1 に渡したのは、この仕様書と13のリポジトリです。モデルは各リポジトリで既存のレイアウトを読み、同じ構成のファイルを置き、ビルドを通してプルリクエストを出しました。途中で2つのリポジトリのビルドが壊れました。既存の Vercel Analytics のコンポーネントと同じ名前をぶつけていたためで、これはモデルが自分のビルドで見つけて、別名で読み込む形に直しています。

16のサイトが1本のデータストリームへ計測を送る構成図。各サイトのスニペットはまずホスト名がbenriwork.jpかを確かめ、違えば止まり、同じなら測定IDに向けてページビューを送る。GA4側ではホスト名でアプリを分けて見る
16サイトで1本のストリーム。スニペットは自分のホスト名を見て、本番以外では止まる

同じ週に、別の仕事も任せていました。複線図道場のE2Eテストが8月中旬から落ち続けていて、原因が分からない状態でした。モデルはワークツリーを切って、最後に緑だった8月8日から先のコミットを二分探索し、壊れた地点を8月14日のコミットに特定しました。そこにあったのは、古くなったテスト7件と、製品側の不具合2件でした。接続箱のプリセットIDが変わったのに追従していなかった箇所と、狭い画面で採点パネルがナビゲーションを覆っていた箇所です。CIそのものが8月中旬に起動時点で死んでいて、赤い状態が誰にも見えていなかったことも、この過程で分かりました。

ここまでは「1回の作業で終わらない仕事」が、確かに終わっています。

届かなかった3サイト

計測が届いているかどうかは、コードからは分かりません。ブラウザで実際に開いて、GA4のリアルタイムに現れるかを見る必要があります。この確認は別の担当に任せていて、その報告書が戻ってきたのが9月5日でした。詳しくは「GPT-6 Astra の Codex に、16サイトの疎通確認を任せた記録」に書いています。

報告書は3サイトが未受信だと言っていました。

1つ目は修正月齢アプリです。本番のページに挿入されたスニペットが、こうなっていました。

var p = location.pathname.length > 1 ? location.pathname.replace(//+$/, '') : location.pathname;

正規表現のはずの /\/+$/ から \ が消えて //+$/ になり、// がコメントの始まりと解釈されて、そこから先が構文エラーになっています。原因は、JSXの中にテンプレート文字列でスニペットを書いたことでした。テンプレート文字列の段階で \// に戻ります。他の15サイトは共通のファイルで \\/ と書いており、そちらは正しく動いていました。このサイトだけ、古い構成を残したまま測定IDだけ差し替えていたのです。

書いたコードが正しいかどうかと、ブラウザに届いたコードが正しいかどうかは、別の問いでした。前者はビルドが答えてくれます。後者は、本番のDOMを見た人にしか分かりません。

ソースコードの正規表現がブラウザに届くまでに変わる様子を3段で示した図。ソースでは逆スラッシュ付きの正規表現、テンプレート文字列を通ると逆スラッシュが消え、ブラウザではスラッシュ2つがコメント開始と解釈されて構文エラーになる
ソースでは正しく見える。テンプレート文字列を1段通ると、ブラウザには別のものが届く

2つ目と3つ目は、遠隔巡視のシミュレータとAI画像のアプリです。どちらも本番のHTTPレスポンスに Content-Security-Policy ヘッダーが付いていて、計測タグの配信元と送信先を許可していませんでした。タグはDOMにあるのに、ブラウザが読み込みと送信を拒否していた形です。

ここで恥ずかしいのは、仕様書に「CSPはどのリポジトリにも設定なし」と書いてあったことです。この一文を書いたのは、コードを書いたのと同じAIです。ソースの中の文字列を検索して、なかったから、ないと書いた。実際にはCSPの1つは純関数で組み立てられ、もう1つはミドルウェアの中に文字列で置かれていました。本番のHTTPヘッダーを見ていれば、最初から分かっていたはずです。

修正に要したもの

報告書を渡した後の修正は、1セッションで終わりました。修正月齢アプリは他サイトと同じ共通ファイルに揃え、生成後のスニペットを new Function で解析する検査をビルドの前段に足しました。テストランナーのないリポジトリなので、壊れたらVercelのビルドが止まる形にしています。CSPの2件は、Googleが公開している最小の組み合わせだけを例外にし、単体テストで「外部オリジンはこの3つだけ」を固定しました。

つまずいたのはCIでした。1回目は prettier の整形漏れ、2回目は要件書を編集したことで、実装状況ドキュメントに記録している要件書のSHA-256が合わなくなったためです。後者はそのリポジトリが自分で仕掛けていた整合ガードで、ドキュメントを書き換えたら指紋も更新しろ、という約束です。モデルはログを読んで両方を直しましたが、直せたのはログがあったからです。

報告書にはもう1件、原因未確定の事項がありました。家族プランナーで、1回開いただけなのに page_view が2件記録されていた件です。コードを追うと、起動時に子どもの情報を ?data= の形でURLへ書き戻す処理があり、その履歴更新をGA4の拡張計測が2件目のページビューとして送っていました。数の問題より、その2件目のURLにニックネームと生年月日が乗っていたことのほうが問題でした。URLへの書き戻しをやめる変更を提案しています。

案内役の女性がノートPCの前に立っているバナー。「書いたコードと、届いたコードは同じ?」「13サイトで届き、3サイトで止まった理由」というコピーが入っている

何を任せ、何を残すか

Fable 5.1 は、13のリポジトリを回すことも、10コミットの二分探索も、報告書からの原因特定もこなしました。100万トークンのコンテキストは、13リポジトリぶんのレイアウトと仕様書と報告書を1つのセッションに置いたまま作業できる、という形で効いています。公式ドキュメントが挙げる「長いセッションのエージェント型コーディング」は、私たちの仕事ではこういう姿をしていました。

ただし、このモデルが自分で見つけられなかったものが2種類あります。テンプレート文字列を通った後のコードと、本番のHTTPヘッダーです。どちらも「書いたもの」の外側にあります。書く側のAIは、書いたものを信じます。信じてよいかどうかを決めるのは、書いたものの外側を見る別の目です。今回それは、ブラウザを開いた別のAIでした。

同じドキュメントには、Fable 5.1 が Fable 5 と比べて進捗の報告を減らし、小さな変更でもファイルを丸ごと書き直しやすいと書かれています。前者は、長いセッションで何をしているかが見えにくくなる方向です。後者は、差分が大きくなってレビューの負担が増える方向です。どちらも、任せる側が読む量を増やす変化なので、私たちは進捗の書き出しを指示に含めています。

16回目で滑る手

人が16回やれば、16回目で手が滑ります。AIに任せた今回は、1回目から滑っていました。ただしその滑りは、コードを読んでも分からず、本番に出て初めて見える種類のものでした。

作業が「書くこと」から「届いたものを確かめること」へ移ったのが、この1週間で変わったことです。書く時間は減りました。確かめる時間は減っていません。減らないほうの時間をどう組むかは、「Claude Code と Codex の分業を、1枚の仕様書で回す」に続きます。

参照した公式情報

  • Anthropic「Claude Fable 5.1」モデルページと「What's new in Claude Fable 5.1」(platform.claude.com、2026年9月時点)
  • Anthropic「Introducing Claude Fable 5 and Claude Mythos 5」(platform.claude.com)
  • Claude Code ドキュメント「Model configuration」(code.claude.com)
  • Anthropic「Introducing Claude Fable 5.1 and Claude Mythos 5.1」(anthropic.com。ベンチマークの数値はこの発表による)

関連アプリ

こんな記事も読まれています