綴Photo の勉強ノートに戻る
コードレビュー学習2026.05.21

『この指摘、本当に危険?』は feature flag と throttle と設計意図で変わる — AI レビューの読み方

コードレビューfeature flagレートリミットAI活用綴Photo

Codex と Claude のレビューを通じて見えた「指摘の重要度と実害のズレ」を、勉強のためにまとめたものです。

ここで言う「web」は、綴ったものを web でも見られるように開発中のアプリ(紡Book)のことです。

AI にコードレビューをさせると、指摘に「P1」「Critical」のような重要度ラベルが付いてきます。便利なのだが、この重要度を鵜呑みにすると判断を誤ります。同じ指摘でも、それが本番で露出しているか・既に別の仕組みで緩和されているか・そもそも意図的な設計かで、実害はまるで変わります。綴Photo の Web とモバイル両方のレビューで、ちょうど良い実例が複数出たのでまとめる。

この記事で見ていく点

  • feature flag で本番無効になっている指摘(露出していない Critical)
  • レートリミットで既に緩和されている指摘(「制限なし」は不正確だった)
  • そもそも意図的な設計だった指摘(バグではなく仕様)

Critical だが、feature flag で本番には出ていない

Web のレビューで、ある書き込み API に CSRF 保護(他サイトから勝手に操作を仕込まれるのを防ぐ仕組み)が漏れているという Critical 指摘が出た(別記事参照)。指摘自体は正しい。

ところが実コードを確認すると、その API は feature flag の管理下にあり、本番ではフラグがオフ=そもそも URL が登録されていません。

フラグは環境変数。DB のテーブルには無い。コード書き込み APICSRF 漏れあり字面は Criticalリポジトリに残る環境変数ENABLE_APP_API本番デフォルト 0settings / envDB には無い本番の入口URL 未登録外から叩けない起動時の URL 一覧プロセスメモリフラグを 1 にすると、同じ API が URL 一覧に載る。公開ローンチのブロッカーではない。スイッチを入れる直前に塞ぐ。

危険度ゼロではない。危険が顕在化するタイミングが『フラグを入れる時』にずれているだけだ。


「制限なし」と言われたが、実はレートリミットがあった

共有ページのパスワードについて、レビューでは当初「試行回数の制限が無いので総当たりされうる」という指摘が出た。

実コードを確認すると、パスワード検証エンドポイントには「1分10回まで」のレートリミットが既に効いていた。

回数はキャッシュ。ハッシュは DB。平文は保存しない。届いた合言葉HTTP の bodyメモリ・保存しない平文のままでは残さない検証のたび消えるキャッシュLocMemCache送信元 IP 単位1 分 10 回オンライン総当たりは緩和サーバ DBSharedPagepassword_hashハッシュだけ残る平文は残さない「制限なし」は不正確。回数の箱は既にある。残るのは最小 8 文字・複雑性なしと、IP を変えるすり抜け。強度チェックは関所で、置き場所ではない。

ただし、ここで「じゃあ問題なし」と判断するのも早いです。AI の指摘(試行制限なし)は不正確だったが、それで安心していいわけでもありません。指摘を裏取りして、正確な残リスクに置き換えるのが正しい読み方だった。


バグに見えて、実は意図的な設計だった

モバイル版のレビューで「デスクトップのフォルダ読み込み中、操作ボタンが無効になっている」という指摘が出た。一見、操作不能のバグに見える。

だが開発記録を確認すると、これは意図的な設計だった。読み込み中は操作画面ではなく「読み込み中プレースホルダ」を表示する作りになっていて、過去に「読み込みが終わる前に一瞬だけ操作画面がちらつく」問題を直したときの対応だった。

読み込み中かどうかはメモリ。保存しない。読み込み中メモリの進行中フラグプレースホルダ画面操作ボタンは出ない閉じたら消える読み込み完了メモリの進行中が下りる操作画面ボタンが前面に出る無効にしているのではないAI は操作不能のバグと読んだ。画面が差し替わっている。ちらつき防止の設計。DB にもファイルにも残さない。

AI(Codex)自身も「完了待ちが意図ならコメントと UI 文言を合わせるべき」と留保を付けていた。正しい対応は「バグ修正」ではなく「意図をコメントに明記して、次に読む人(自分含む)が誤読しないようにする」だった。


このテーマの括り

3つに共通するのは、「コードの字面だけでは危険度は決まらない」ということ。AI レビューは網羅的に「コード上の問題」を挙げてくれます。これは非常に有用だ。だが重要度ラベルは「コードを見た時点の評価」であって、運用の文脈(フラグ・throttle・設計意図)を踏まえた「実害」とは別物。指摘を受け取る側が、本番実態と突き合わせて『実害に翻訳する』工程が要ります。


おわりに

AI にコードを書いてもらい、AI にレビューもさせる開発だと、「AI が Critical と言ったから全部今すぐ直さなきゃ」と焦りやすいです。危険度は「コードがどう書かれているか」だけでなく「それが今どう晒されているか」で決まります。指摘を一度立ち止まって裏取りすると、「今すぐ」「フラグを入れる前」「コメントを足すだけ」と、対応のタイミングと重さが分かれた。この翻訳の工程を挟むかどうかで、レビュー結果との付き合い方が変わります。


この記事は2026年5月時点の自分の理解で書いています。