About Services Products Work Blog Careers Contact English
← BLOG
ai 約5分

コードは30分で直せる。マージに3日かかる

本番が燃えている。修正も終わった。でもマージできない。Claude Codeが書いたPRを人間が承認する意味は、本当にあるのか

#claude-code#github#code-review#ai#developer-experience

本番が燃えている。でもマージできない。

土曜日の昼下がり。本番環境のバッチ処理が80時間以上ハングしていた。

原因はわかっている。BigQueryの job.result() にタイムアウトが設定されていない。BQ側でジョブが異常終了すると、Pythonプロセスが永遠にレスポンスを待ち続ける。Cloud Runは「RUNNING」のまま、ログも出ない、エラーも出ない。ただ電気代だけが燃えていく。

修正はClaude Codeと一緒に30分で終わった。

# Before: タイムアウトなし = 無限待ち
job = self.client.query(query, job_config=job_config)
result = list(job.result())

# After: 30分タイムアウト + リトライ
for attempt in range(max_retries + 1):
    job = self.client.query(query, job_config=job_config)
    try:
        result = list(job.result(timeout=timeout))
        break
    except concurrent.futures.TimeoutError:
        job.cancel()
        if attempt < max_retries:
            continue
        raise BigQueryClientError(...)

環境変数で調整可能にして、既存インターフェースは変えない。影響範囲は1ファイルだけ。PRを作成した。CIも通った。

あとはマージするだけ——なのに、マージできない。

「人間の承認」という壁

GitHubのブランチ保護ルール。「At least 1 approving review is required by reviewers with write access.」

write権限を持つcollaboratorは自分だけ。自分のPRを自分でApproveすることはGitHubが許さない。管理者権限でのオーバーライドもブロック。mainへの直接pushも拒否。

週明けにチームメンバーが出勤してApproveボタンを押すまで、このPRはマージできない。

本番は燃え続けている。コードは完成している。でも「人間の承認」がないと、何も進まない。

その「人間のレビュー」は何を見るのか

ここで、ふと考えた。

週明けに来るレビュアーは、このPRの何を見るのだろう。

  • concurrent.futures.TimeoutError のハンドリングが正しいか?
  • job.cancel() の例外処理が適切か?
  • リトライロジックに競合状態がないか?
  • 既存のメトリクス収集やログ出力との整合性は取れているか?

正直に言う。自分にはこのレベルのコードレビューは難しい。

PMでありデザイナーであり、インフラも触るしコンサルもやる。12年間一人で全領域をやってきた。コードは書ける。だが「このPythonコードのスレッドセーフティを保証できるか」と聞かれたら、自信を持ってYesとは言えない。

一方、このコードを書いたClaude Codeは——

  • 既存コードのシングルトンパターン、ラベルマージロジック、メトリクス収集の仕組みを全部読んだ上で
  • 既存インターフェースを一切変えずにtimeout+リトライを追加し
  • BigQueryClientError の既存のコンストラクタ仕様に合わせてエラーを投げ
  • 環境変数でチューニング可能にした

このコードを「レビュー」できる人間が、チームに何人いるだろう?

「そのへんのエンジニア」の話

誤解のないように書いておく。AIそのものを開発しているエンジニア——大規模言語モデルを訓練し、推論パイプラインを最適化し、GPU上のメモリ管理を手書きするような人たち——は別だ。彼らは間違いなくAIの上位にいる。

だが、世の中のエンジニアの大半は、そういう仕事をしていない。

  • APIを叩いてデータを変換してDBに入れる
  • フレームワークの上にCRUDを書く
  • 既存コードにパラメータを追加する
  • CI/CDパイプラインを設定する

こういう「普通のソフトウェア開発」において、Claude Codeはもう普通のエンジニアより正確で、速くて、既存コードとの整合性に注意を払う

今回の修正を人間のエンジニアに依頼していたら、こうなる。

  1. Slackで状況を説明する(15分)
  2. エンジニアがコードベースを読む(30分〜1時間)
  3. 修正方針を相談する(15分)
  4. 実装する(30分)
  5. PRを作る(10分)
  6. 別のエンジニアがレビューする(翌日)
  7. 修正→再レビュー→マージ(さらに翌日)

Claude Codeなら、1から5まで30分。しかもコードベースの理解は人間より正確だった。既存のエラーハンドリングパターン、メトリクス収集の仕組みまで把握した上で書いている。

信頼の構造がズレている

今の開発プロセスは「人間がコードを書き、別の人間がレビューする」という前提で設計されている。

  • ブランチ保護ルール → 人間のApproveが必要
  • PRテンプレート → 人間が読むことを想定
  • CIチェック → 人間が確認することを想定

だが、コードを書いているのがAIで、そのAIの出力品質が平均的なエンジニアを超えているなら、「人間の承認」は品質ゲートとして機能しているのか?

むしろ逆だ。

人間のレビュアーが見落としたバグを、Claude Codeは最初から作らない。人間のレビュアーが「LGTM」と5秒で承認するPRの中に、Claude Codeなら指摘するはずの問題が埋もれている。

信頼すべき相手が逆転しているのに、プロセスだけが昔のまま残っている。

では、どうするのか

「人間のレビューを廃止しろ」と言いたいわけではない。

だが、少なくとも以下は考えるべきだ。

AIが書いたコードに対する承認プロセスを分けるべき。

人間が書いたコードと、AIが書いたコードでは、見るべきポイントが違う。AIが書いたコードのレビューは「意図通りか」「ビジネスロジックが正しいか」に集中すればいい。構文エラーやパターン逸脱はAIの方が少ない。

「一人チーム」向けのブランチ保護ルールが必要。

collaboratorが一人しかいないリポジトリに、チーム向けのレビュー必須ルールを強制するのは設計ミスだ。GitHubはここを改善すべきだろう。

AI Reviewerを正式なレビュアーとして認めるべき。

Claude Code GitHub Appがインストールされていれば、AIがPRをレビューしてApproveできる。技術的にはもう可能だ。あとは組織がそれを「正式なレビュー」として認めるかどうかの問題にすぎない。

これが2026年の現実だ

土曜日の午後。本番が燃えている。コードは30分で書けた。でもマージには、月曜日まで待たなければならない。

なぜなら、「人間の承認」が必要だから。

その人間は、このコードをClaude Code以上の精度でレビューできるのか?

たぶん、できない。でもルールがそうなっているから、待つしかない。

コードは30分で直せる。マージに3日かかる。

ソフトウェア開発のボトルネックは、もうコードじゃない。人間だ。