Claude Code を使っていると、こんな状況に遭遇する。
「この実装、別のアプローチも試してみたいけど、今の会話を消したくない」
「テストを書きながら実装も進めたい。どちらかを待つ時間がもったいない」
こういう場面で力を発揮するのが /branch と /fork だ。どちらも「今の会話を分岐させる」コマンドだが、動き方がかなり違う。この記事では実際の動作と使いどころを整理する。
まず結論から
混乱しやすいので先に整理しておく。
| コマンド | 誰が動くか | 元の会話 |
|---|---|---|
/branch |
自分がコピーに移動して作業する | 保存されたまま。/resume で戻れる |
/fork <指示> |
バックグラウンドのサブエージェントが作業する | 自分は今の会話で作業を続ける |
一言で言うと「/branch は自分が探索する、/fork はエージェントに探索させる」。
/branch ── 会話のコピーに自分が飛び込む
/branch
または名前をつけて
/branch api-redesign
このコマンドを実行すると、現時点の会話が丸ごとコピーされ、そのコピーの中に移動する。元の会話はそのまま保存されているので、/resume を使えばいつでも戻れる。
どういう場面で使うか
典型的なのは「設計の比較検討」だ。
たとえば FastAPI でエンドポイント設計を進めていて、「RESTful にするか、GraphQL にするか試してみたい」という場面。そのまま話し続けると今の会話が上書きされていく。こういうときに /branch graphql-trial で分岐させて試してみて、気に入らなければ /resume で元に戻る。
私がよくやる使い方は「大きな変更を加える前のセーブポイント」として使うことだ。Claude に「このコードをリファクタリングしてほしいが、どんな変更が入るか読めない」という状況で、変更前に /branch を打っておく。うまくいけばそのまま続け、失敗したら /resume で元の状態に戻る。
/resume との関係
/branch で作ったコピーと元の会話は、両方 /resume のセッション一覧に残る。どちらにも戻れるし、分岐した複数の会話を行き来することもできる。
/resume
実行するとセッション一覧が表示されるので、戻りたいセッションを選ぶだけだ。
/fork ── バックグラウンドで並列作業させる
/fork ここまでの変更に対するユニットテストを書いて
/fork は /branch と見た目が似ているが、動き方が根本的に違う。
コマンドを実行すると、現在の会話を丸ごと引き継いだサブエージェントがバックグラウンドで起動する。そしてそのサブエージェントが指示を実行している間、自分は今の会話でそのまま作業を続けられる。サブエージェントが完了したら、結果が現在の会話に戻ってくる。
通常のサブエージェントとの違い
Claude Code には元々サブエージェント機能があるが、通常のサブエージェントは「白紙の状態から始まる」。そのため、プロジェクトの背景や今の会話の文脈を改めて説明する必要がある。
/fork で起動するサブエージェントは今の会話履歴をすべて引き継ぐ。だから「ここまでの内容をふまえてテストを書いて」という指示だけで、プロジェクトの構成も実装の意図も理解したうえで動いてくれる。
使い方の例
実装を進めながらテストを並列で書かせる。
/fork ここまで実装したパーサーのユニットテストを書いて
これを実行すると、フォークされたサブエージェントがテスト作成を担当し、自分は実装の続きができる。テストが完成したら結果が会話に戻ってくる。
別のアプローチを試させて比較する。
/fork PostgreSQL の代わりに Redis を使ったキャッシュ層の設計案を作って
自分がメインの実装を続けながら、別アプローチの調査をサブエージェントに任せる。
バージョンに注意
/fork が独立したコマンドとして動作するのは Claude Code v2.1.161 以降。それより前のバージョンでは /fork は /branch の別名として動き、バックグラウンド実行にはならない。
v2.1.161 未満の環境では、CLAUDE_CODE_FORK_SUBAGENT=1 という環境変数をセットすることでフォーク機能を有効にできる。
export CLAUDE_CODE_FORK_SUBAGENT=1
現在の Claude Code バージョンは /doctor コマンドで確認できる。
2つのコマンドを選ぶ判断基準
「どちらを使えばいいか」は、次の問いに答えるとわかりやすい。
「その作業に、自分が関与して判断しながら進める必要があるか?」
- はい →
/branch。自分でコピーの中に入って作業する - いいえ →
/fork。サブエージェントに任せて並列で進める
もう少し具体的に言うと:
/branch が向く場面
- 設計の比較検討を自分でやりたい
- 大きな変更前のセーブポイントが欲しい
- 別のアプローチを自分で掘り下げたい
/fork が向く場面
- テストや調査など、内容の確認は後でまとめてやればいい
- 今の作業を止めずに並行して別タスクを進めたい
- 「この会話のここまでの内容をふまえて○○して」という指示だけで動かせるタスク
よくある誤解と注意点
フォークからフォークは生めない
/fork で起動したサブエージェントは、さらに別のフォークを起動できない。通常のサブエージェントを呼ぶことはできるが、ネストした並列実行は現状サポートされていない。
/branch と /fork を混同して痛い目を見た話
最初に /fork を使ったとき、「自分がコピーの中に移動するもの」だと思い込んで使った。実際には今の会話でそのまま待っていたら、気づかないうちにサブエージェントが勝手に作業を進めていて、元の会話に突然「テスト書きました」という結果が返ってきた。最初は混乱したが、これが正しい動作だと理解してからは使い勝手がぐっとよくなった。
動き方を先にイメージしてから使うと戸惑わない。
フォークのサブエージェントが途中でエラーになったら
v2.1.199 以降では、サブエージェントが API エラーで途中終了した場合、「エラーで途中で切れた」という通知とともに、それまでの部分的な結果が返ってくる。作業が無駄にならない設計になっているので、エラーが出たときは内容を確認して続きを依頼すればいい。
/resume との組み合わせ
/branch で分岐した会話を行き来するのが /resume だが、v2.1.144 以降では/fork で起動したバックグラウンドセッションも /resume の一覧に bg マークつきで表示される。
フォークが走っている途中でも確認でき、完了したセッションに戻って詳細な会話を確認することもできる。
まとめ
| /branch | /fork | |
|---|---|---|
| 実行後の自分の場所 | コピーの中 | 元の会話 |
| 会話の並列実行 | できない | できる |
| 向くタスク | 自分で探索する作業 | 任せられる作業 |
| 最低バージョン | 制限なし | v2.1.161 |
Claude Code を使い込んでいくと、会話のコンテキストを手放したくない場面が増える。/branch で安全にセーブポイントを作り、/fork で並列作業を回す。この2つを組み合わせると、試行錯誤のコストがぐっと下がる。
まずは /branch から試してみることをすすめる。感覚をつかんだら /fork を使って、テスト作成や調査系のタスクを並列化してみるといい。