Claude Code をローカルで使った Prompt-to-PR ワークフロー: 小さなプロンプトで小さな差分を出し、チェックを実行し、失敗時に再プロンプトしてマージ準備のPRにする方法。

大きな一発プロンプトは、数十ファイルに渡る関係のないリファクタや、理解する時間がないままの大きな変更を生みがちです。出力が技術的に正しくても、何がどう変わったのか把握しづらいためレビューがリスクに感じられます。
小さな差分はそれを防ぎます。変更が限定的かつ焦点を絞っていると、数分で読み切れて誤りを早期に検出でき、意図せぬ箇所を壊しにくくなります。レビュワーは小さなPRをより信頼し、マージが早く、コメントのやり取りも少なくなります。
Prompt-to-PRはシンプルなループです:
このリズムは、失敗を最後の驚きではなく迅速なフィードバックに変えます。Claude Code にバリデーションルールの調整を頼むならその1つのルールだけに留めてください。テストが失敗したら、失敗出力を貼り付けてテストを通すための最小の修正を頼み、モジュール全体を書き換えさせないでください。
ひとつだけ変わらないことがあります: 最終的なコードはあなたが責任を持ちます。モデルは早く打つローカルのペアプログラマだと扱い、自動操縦機だとは考えないでください。何を入れるか、何を残すか、いつPRを開くのが安全かはあなたが決めます。
クリーンなベースラインから始めてください。ブランチが古い、あるいは既にテストが失敗している状態だと、あらゆる提案が推測になってしまいます。最新をpullしてリベースやマージを行い、現在の状態が健全であることを確認してから依頼しましょう。
「ローカルペアプログラマ」設定とは、Claude Code がリポジトリ内のファイルを編集する一方で、ゴール・ガードレール・すべての差分はあなたが管理する、という意味です。モデルはコードベースを知らないので、ファイル、制約、期待される振る舞いを明確に示してください。
最初のプロンプトの前に、どこでチェックを実行するか決めておきます。ローカルでテストを実行できれば数分でフィードバックが得られ、反復が小さく保てます。一部のチェックがCIでしか走らない(特定のlintルール、長いテストスイート、ビルド工程など)なら、どのタイミングでCIに頼るかを決めておき、毎回の小さな変更後に待つことがないようにしてください。
簡単な事前確認:
作業中は小さなスクラッチパッドを開いておき、"API変更なし"、"後方互換を保つ"、"Xモジュールのみを触る" といった制約や決定事項を書き留めておいてください。テストが失敗したら、正確な失敗メッセージもそこに貼ります。そのスクラッチパッドが次のプロンプトの最高の入力になり、セッションが逸れるのを防ぎます。
小さな差分は意図的に狭く書かれたプロンプトから始まります。マージ可能なコードへの最短ルートは、レビューに1分で目を通せる1つの変更であって、理解に1時間かかるリファクタではありません。
良いプロンプトは1つのゴール、1つのコード領域、1つの期待結果を示します。変更がどこに入るか(ファイル、フォルダ、モジュール)指示できないと、モデルは推測し、差分が広がります。
差分を小さく保つためのプロンプトの形:
境界が秘密兵器です。"ログインバグを直して" ではなく、何を維持すべきかを明記してください: "APIの形を変えない"、"公開関数の名前を変えない"、"フォーマットのみの編集禁止"、"新しい依存は避ける"。それによりペアプログラマにどこで工夫すべきでないか伝えられます。
変更がまだ不明瞭なら、コードを求める前に計画を求めてください。短い計画は作業をステップに分け、最初の小さな一手を承認する機会を与えます。
Goal: Fix the null crash when rendering the profile header.
Location: src/components/ProfileHeader.tsx only.
Constraints: Do not change styling, props, or any exported types.
Expected outcome: If user.name is missing, show "Anonymous" and no crash.
Diff constraint: Minimal diff. No refactors. No unrelated formatting.
If unclear: First reply with a 3-step plan, then wait for approval.
チームで作業するならレビュー制約も加えてください: "~30行以内の変更に抑える" や "どうしても必要でない限り1ファイルのみ"。これにより差分のスキャンが容易になり、何かが失敗したときの次のプロンプトが鋭くなります。
各ループは1つの小さく検証可能な変更に集中させてください。ゴールを1文で説明でき、どのファイルが変わるか予測できるならそれは適切なサイズです。
良い作業単位の例: 1つの実行パスのバグ修正(再現手順とガード付き)、単一の振る舞いに対するテスト修正、振る舞いを保つリファクタ(名前変更、関数抽出、重複除去)、エラーメッセージやバリデーションルールの改善など。
各ループに時間制限を設けてください。10〜20分で明確なプロンプトを書き、差分を適用し、簡単なチェックを実行するには十分です。20分を過ぎてまだ探索中なら、作業単位を小さくするか調査モード(ノート、ログ、失敗テスト)に切り替えてそこで止めてください。
始める前に「完了」を定義してください:
スコープが拡大し始めたら早めに止めてください。"ついでに"と言い始めたら次の反復が見つかっただけです。それはフォローアップとして切り出し、現在の小さな差分をコミットして続けましょう。
テストやビルドを実行する前に、レビュワーの目で差分を読みましょう。ここでワークフローがクリーンに保たれるか、あるいは「なぜあのファイルを触った?」と感じるかが決まります。
まずClaude Codeに、変更点を平易な言葉で要約するよう依頼してください: 触ったファイル、振る舞いの変更点、変えていないこと。もしモデルが明確に説明できないなら、差分はおそらくやり過ぎです。
次に自分でレビューします。まず範囲をざっと確認し、次に意図に沿って読む。探すべきはスコープの逸脱: 無関係なフォーマット、余計なリファクタ、シンボルの名前変更、要求していない変更などです。
簡単な事前チェック:
差分が予想より大きければ、テストで何とかしようとせずにロールバックして小さなステップを再要求してください。例えば: "まず失敗するテストだけ追加して。リファクタはなし。" 小さな差分は失敗を解釈しやすくし、次のプロンプトを正確にします。
小さな差分が効果を発揮するのは、すぐに検証する場合だけです。目標は短いループです: 少し変えて、少しチェックして、文脈が新しいうちに間違いを捕まえること。
まずその変更で「壊れていること」を検出できる最速のチェックを実行してください。フォーマットやimportを変えたならlintや整形を最初に。ビジネスロジックを触ったら対象ファイルやパッケージの最小限のユニットテストを走らせる。型やビルド設定を編集したら素早くコンパイルをする。
実用的な順序:
何かが失敗したら、修正する前に2つを記録してください: 実行した正確なコマンドとフルのエラー出力(そのままコピー)。その記録が次のプロンプトを特定させ、"まだ失敗する"ループを防ぎます。
範囲を狭く保ってください。lintとテストの両方が失敗したら、まずlintを直して再実行し、その後テストに取り掛かる。"簡単な掃除"とクラッシュ修正を同時にやらないでください。
チェックが失敗したら、その失敗出力を次のプロンプトに使ってください。最速のループは: エラーを貼る → 診断を得る → 最小の修正を適用 → 再実行、です。
失敗は逐語的に貼り付け、まず最もありそうな原因を尋ねてください。Claude Code は正確な行番号やメッセージに基づく方が当たりが良いので、推測ではなく具体的な情報でアンカーしてください。
既に試したことを一文で加えると同じループを回すのを防げます。重要な制約("公開APIは変えない"、"振る舞いは維持する、ただしクラッシュを直して")を繰り返し伝え、チェックが通る最小のパッチを求めてください。
提案された修正が振る舞いを変えるなら、新しい振る舞いが正しいことを証明するテストを要求してください。ハンドラが500ではなく400を返すようになったなら、古いコードでは失敗し新しい修正で通る1つの焦点を絞ったテストを求めましょう。これにより作業が正直になり、PRの信頼性が高まります。
チェックが通り、差分が1つのアイデアに見えるところで止めてください。モデルが無関係なコードを改善し始めたら、"失敗しているテストだけ直して。クリーンアップ不要。" と再プロンプトしてください。
PRは何が、なぜ、どうやって動作を確認するかが明確だと最速でマージされます。このワークフローでは、PRは短い物語のように読むべきです: 小さなステップ、明確な理由。
コミットは反復に合わせて整えてください。1つの振る舞い変更を求めたならそれを1コミットにまとめ、テストの失敗を直したなら次のコミットにする。レビュワーは経緯を追えて、余分な変更が紛れ込んでいないことを信頼できます。
コミットメッセージはファイル名ではなく意図を書くべきです。"セッション切れ時のログインリダイレクトを修正" は "auth middlewareを更新" より優れています。ユーザー向けの結果を示すとレビュワーは推測に時間を使いません。
リファクタと振る舞い変更は同一コミットに混ぜないでください。変数名の変更やヘルパーの移動は別にするか、今はスキップしてください。ノイズはレビューを遅らせます。
PRの説明は短く具体的に:
例: 顧客レコードがnullで課金ページがクラッシュする不具合。コミット1でガードと明確なエラーステートを追加。コミット2でnullケースのテストを追加。PR説明: "Billingを開き、プロフィールのない顧客を読み込むと新しい空状態が表示されることを確認"。こんなPRはレビュワーが素早く承認できます。
このリズムが崩れるのはスコープが静かに広がるときです。"失敗するテストを直して" が "モジュール全体のエラーハンドリングを改善" になり、急に大きな差分をレビューするハメになります。目標は常に1つ、1つの変更セット、1セットのチェックです。
もう一つの遅延は、見た目が良いからといってリファクタを受け入れてしまうことです。名前変更やファイル移動、スタイル変更はレビューにノイズを生み、実際の振る舞いの変化を見つけにくくします。
よくある落とし穴:
具体例: テストが "expected 400, got 500." と失敗したとき、スタックトレースの最後だけを貼ると一般的な try/catch の提案が返ることが多いです。完全なテスト出力を貼れば本当の問題が見つかるかもしれません: バリデーションが欠けている、という小さく焦点を絞った修正につながります。
コミットする前に差分をレビュワーの目で読み直してください。各行が要求に応えているか、1文で説明できるか問うてください。できなければ余分な変更を元に戻し、より狭い要求で再プロンプトしましょう。
ユーザー報告: "設定ページが保存後にデフォルトに戻ることがある。" mainをpullしてテストを実行すると1つの失敗が出るか、あるいはテストがない場合は再現手順が明確になります。
これをループとして扱います: 小さな1つの要求、1つの差分、そしてチェック。
まずClaude Codeに最小限の有用なコンテキストを与えます: 失敗テスト出力(または再現手順)、疑っているファイルパス、ゴール("リセットを直して振る舞いは変えない")。診断と最小パッチを求め、リファクタは要求しないでください。
その後短いループで作業します:
差分をレビューしてからチェックを実行します。
もしチェックが通ったが回帰が心配なら、カバレッジを追加します。
まとめとして小さなPR説明を書く: バグの内容、原因、何を変えたか。"Xファイルのみを触る" や "リセットケースのテストを1つ追加" のようなレビュワーノートを入れると安心してレビューできます。
PRを開く直前に、作業がレビューしやすく安全にマージできるか最終確認をしてください。
例: ログインバグを修正したが20ファイルのフォーマットを変更してしまったなら、フォーマットのコミットを元に戻してください。レビュワーはログイン修正に集中できるべきです。
どれかが満たされていなければ、もう一度小さなループを回してください: 小さな差分を作り、チェックを再実行し、PR説明を更新する。最後の1ループが何時間ものやり取りを節約することがよくあります。
一貫性があれば良いセッションが確実なワークフローになります。デフォルトのループを決めて毎回同じように回してください。一週間続ければ、プロンプトが短くなり差分がレビューしやすくなるのが実感できるはずです。
シンプルなルーチン:
個人的なプロンプトテンプレートがあれば規律を保てます: "必要なことだけを変える。最大2ファイルまで。公開振る舞いは変えない。実行するコマンドと成功の定義を教えて。"
Koder.ai 内で開発している場合でも同じループをチャットで使えます。Planning mode は最小のマージ可能スライスを見定めるのに適しており、スナップショットとロールバックは実験が逸れたときに素早く回復するのに役立ちます。
変更が安定したらソースコードをエクスポートして通常のローカルツールやCI、チームレビューにかけてください。エンドツーエンドでの実運用検証が必要な場合はデプロイして確認します。
このループをデフォルトにしてください。小さなプロンプト、小さな差分、頻繁なチェック、迅速な修正が積み重なって、最良の意味で「退屈な」PRにつながります。
デフォルト: 1文で説明できる小さなレビュー可能な変更を目標にしてください。
良い目安は: どのファイルが変更されるか予測でき、1つの速いチェック(対象のテスト、lint、あるいは簡単な実行)で検証できること。できない場合はタスクが大きすぎます—「再現テストを追加」と「バグ修正」を別々のループに分けてください。
はい。ゴールがあいまいなときは、まず短い計画を求めてください。
簡単なゲートとして:
これによりモデルが推測して余分なファイルに触るのを防げます。
プロンプトには最低限これらを含めてください:
この構成は自然にスコープを限定し、レビューを速くします。
すぐに止めてスコープを縮小してください。
実践的な対処:
Xファイルのみを触る。リファクタ禁止。無関係なフォーマット不可。」スプロールした差分をテストで何とかしようとすると、後でより多くの時間を失います。
まず差分を読んでからチェックを実行してください。
シンプルな順序:
この順でループを回すと失敗の原因を特定しやすくなります。
失敗をそのまま貼り付け、最小の修正を求めて再プロンプトしてください。
含めるべきもの:
「まだ失敗する」だけでは不十分です—具体的な出力があれば精密なパッチが得られます。
モデルは高速にタイプするペアプログラマのように扱い、完全自動ではないと考えてください。
あなたの責任は:
良い習慣として、プレーンな言葉で「何を変えたか、何を変えていないか、なぜか」を要求しましょう。
原則として分けるべきです。
リファクタと振る舞い変更を混ぜると雑音が増え、意図を検証しにくくなります。
短く具体的にまとめてください:
「1つの考えが1つのチェックで証明されている」PRは速くマージされます。
Koder.ai はこの規律をサポートする機能があります:
これらを使って小さく可逆な反復を保ち、安定したら通常のレビュー経路でマージしてください。