AIレビュー指示に「よく考えて」と書く前に決める3行

レビュー指示に「よく考えて」と書き足しても、出力の形は変わらない。思考量を上げる設定を足した場合も同じで、公式ドキュメントは effort について「Effort controls thinking volume, not visible response length」と書いている。動くのは思考の量であって、出力に何を書くかではない。呼び出し元を何段まで辿ったかを出力に残させたいなら、追跡の終端条件を指示文に書く。必要な行数は3行である。

この記事の提案を使うのは、書き込み経路が複数ある差分をレビューさせるときである。差分が1ファイルに収まり、呼び出し元が差分の中にあるなら要らない。

「よく考えて」が指定できていないもの

在庫を持つクラスに、書き込み経路を1本足した差分を考える。経路は3本になる。

inventory/store.py(差分を当てた後。全文)
class Store:
    def __init__(self, stock: dict[str, int]) -> None:
        self.stock = stock

    def ship(self, sku: str, qty: int) -> None:
        if self.stock.get(sku, 0) < qty:      # 残数の確認がある
            raise ValueError(sku)
        self.stock[sku] -= qty

    def reserve(self, sku: str, qty: int) -> None:
        self.stock[sku] -= qty                # 確認が無い(この差分で足した)

    def adjust(self, sku: str, delta: int) -> None:
        self.stock[sku] = self.stock.get(sku, 0) + delta

reserve に残数の確認が無いことは、このファイルを読めば分かる。ここで指定の要否が分かれるのは、次の問いに答えるときである。reserve は誰が呼ぶのか、その呼び出し元に確認があるのか。

orders/checkout.py と api/handlers.py(抜粋)
def hold_for_payment(store: Store, sku: str, qty: int) -> None:
    store.reserve(sku, qty)              # 1段目。確認は無い

def post_hold(store: Store, body: dict) -> None:
    hold_for_payment(store, body["sku"], int(body["qty"]))   # 2段目。入力の検査は別の層

reserve の呼び出し元は1段目が hold_for_payment、2段目が post_hold である。「残数の確認がどこにも無い」という指摘を書くには、2段目まで辿って、どの段にも確認が無いことを確かめる必要がある。1段しか辿らなければ「上位で確認している可能性がある」で止まり、指摘は保留になる。

「よく考えて」は、この段数を指定していない。どこから辿り始めるのか、何段で止めるのか、辿れなかったときに何と書くのかが、どれも決まらない。

思考量の設定が動かすもの

思考量は設定で指定できる。公式ドキュメントの定義を2つ読む。

手動で予算を指定する形(thinking: {type: "enabled", budget_tokens: N})については、Extended thinking(取得日 2026-10-11)がこう書いている。

The budget is a target rather than a strict cap. Actual token usage varies with the task, and Claude may stop reasoning well before the budget is exhausted; max_tokens remains the hard ceiling on total output.

予算は上限ではなく目標である。同じページには、この形が新しいモデルでは使えないことも書かれている。「Claude 4.7 and later models do not support it and reject requests that use it, returning a 400 error.」であり、移行先は thinking: {type: "adaptive"} と output_config: {effort: ...} である。claude-opus-5 に budget_tokens を渡すと400が返る。

移行先の effort については、Effort(取得日 2026-10-11)が2つのことを書いている。

Effort is a behavioral signal, not a strict token budget. At lower effort levels, Claude still thinks on sufficiently difficult problems, but thinks less than it would at higher effort levels for the same problem.

Effort controls thinking volume, not visible response length: on Claude Opus 5, changing effort does not reliably shorten responses, so prompt for length instead.

2つめは claude-opus-5 についての記述で、最後が「指示文で長さを指定せよ」という案内になっている。設定で動くのは思考の量であり、出力の形は指示文で決める。この分担は、思考量の指定の仕組みがどうなっているかとは別に、公式の案内としてそう書かれている。

レビュー指示の側から見ると、分担はこうなる。

決めたいこと 決める場所
どれだけ考えるか 設定(effort。値は low・medium・high・xhigh・max)
出力に何の欄を書くか 指示文
呼び出し元を何段まで辿るか 指示文
辿れなかったときに何と書くか 指示文

「よく考えて」という文は、1行目を指示文の側から動かそうとしている。設定で指定できる量を文で頼む形になっていて、2行目から4行目のどれも指定していない。

終端条件の3行

指示文に書くのは3行である。辿り始める位置、止める段数、止まったときの記述である。

追跡の終端条件(出力項目の節に足す3行)
- 辿り始める位置: 差分で変更した関数またはメソッドの定義
- 辿る段数: 呼び出し元を2段まで。2段を超える経路は辿らない
- 辿れなかったとき: 「経路: 未到達(<辿った最後の位置>)」と書き、指摘の主張は書かない

3行目が指摘の形を決めている。2段まで辿っても確認の有無が分からなかった場合に、推測で「上位で確認していない」と書くのではなく、辿った最後の位置を書いて止める。この行が無いと、未到達と断定の区別が出力から読めない。

段数を2にした根拠は、上の差分の構造である。reserve から見て post_hold が2段目にあり、入力の検査はさらに上の層にある。自分のコードで段数を決めるときは、変更した関数から呼び出し元を実際に数えて、確認が置かれている層までの段数を使う。段数を決めずに「十分に辿れ」と書くと、何段で止まったのかが出力に残らない。

出力項目には、辿った経路を書く欄を1つ足す。

指摘1件あたりの出力項目(経路の欄を足した形)
- 場所: <ファイル:行>
- 主張: <何が問題か。一文>
- 経路: <辿った呼び出し元を段数の順に。または「未到達(<最後の位置>)」>

上の差分に当てた場合、経路の欄に入る値は inventory/store.py:reserve → orders/checkout.py:hold_for_payment → api/handlers.py:post_hold である。この文字列があると、人は同じ経路を辿って追試できる。欄が無ければ、指摘が2段目まで確かめた結果なのか、1段目で止めた推測なのかを区別できない。

この3行は設定を使えない環境でもそのまま使える。 effort や思考の予算を指定できない経路(ウェブの会話、設定を変えられない社内の窓口)では、思考量は動かせないが、終端条件は文として書けば効く。設定が使える環境では、effort を自分のタスクで振って決めたうえで、終端条件は別に書く。

経路の欄を足すと何を使うか

払うのは出力項目の数である。指摘1件あたり1欄増えるので、指摘が10件なら出力が10行伸びる。経路の文字列は1件あたり2行から3行になることがあり、その分だけ人が読む量も増える。

待ち時間は設定の側で増える。effort を上げると出力トークンが増え、ドキュメントは xhigh について「Expect meaningfully higher token usage than high」と書いている。待ち時間と課金はこれに比例して増えるが、増え方はタスクによる。この記事では測っていないので、自分のタスクで effort を振って、所要時間と出力トークンを記録してから決める。終端条件の3行だけなら、指示文が3行伸びるだけで、設定は動かない。

この提案を落としていい条件は、変更した関数の呼び出し元がすべて差分の中にあるときである。 差分に全部入っているなら、辿る段数を指定しなくても、渡した範囲の外へは出られない。経路の欄も、差分の行を指す「場所」の欄と同じ内容になるので、増やす意味が無い。

指示文の点検

思考量と終端条件を分けて書けているか確かめる項目
  • 指示文に「よく考えて」「慎重に」「深く」といった量の指定が残っていないか
  • 量の指定は設定(effort)に移し、使うモデルで有効な形になっているか
  • budget_tokens を使っている場合、そのモデルで400が返らないか(Claude 4.7 以降は拒否される)
  • 辿り始める位置が、差分の中の何を指すか書いてあるか
  • 辿る段数が数字で書いてあるか
  • その段数を、変更した関数から確認が置かれた層までを数えて決めたか
  • 辿れなかったときの記述が決まっていて、推測で主張を書かせない形になっているか
  • 出力項目に経路の欄があり、人が同じ経路を辿れる文字列になっているか
  • 未到達と断定が、出力の上で区別できるか
  • 設定を変えられない環境でも、3行がそのまま使える形になっているか

おわりに

思考量の設定が動かすのは思考の量である。公式ドキュメントは effort について「思考の量を制御するが、見える応答の長さは制御しない」と書き、長さは指示文で指定するよう案内している。「よく考えて」という1行は、設定で指定できることを文で頼み、指示文で決めるべきことを何も決めていない。

決めるのは3つである。差分のどこから辿り始めるか、呼び出し元を何段まで辿るか、辿れなかったときに何と書くか。段数は、変更した関数から確認が置かれている層までを数えて決める。出力項目に経路の欄を足すと、指摘が何段まで確かめた結果なのかが人に見える。

次に取る行動を1つ挙げる。直近のレビューで出た指摘を1件選び、その根拠が何段先のファイルにあったかを数える。その数が、自分のコードでの終端条件の段数になる。