Claude Codeバックグラウンド実行 — Ctrl+Bで長時間コマンドを裏に回す
Claude CodeでビルドやテストをCtrl+Bで裏に回し、会話を止めずに進める方法と、自動終了の条件・無効化手順をまとめます。
Claude Codeは実行中のBashコマンドをCtrl+B一つで裏に回し、ビルドやテストを走らせたまま次の指示を出せます。出力は自動でファイルに書き出され、Claudeが完了後にReadツールで拾い直すので、npm run buildが終わるのをターミナルの前で待つ必要がありません。webpackやvite、jest、開発サーバーのような数分単位のコマンドで特に効きます。
Claude Codeをバックグラウンド実行に切り替える2つの方法
バックグラウンド化のきっかけは2通りあります。1つはClaude自身に「バックグラウンドで実行して」と指示する方法、もう1つは実行中のBashツール呼び出しをCtrl+Bで手動で裏に回す方法です。後者はキー1つで完結するぶん、実行前に長時間かかると分かっているコマンドに向きます。
tmuxを使っている場合はCtrl+Bがtmuxのプレフィックスキーと衝突するため、2回連続で押す必要があります。1回目はtmuxが受け取り、2回目でClaude Codeにバックグラウンド化の指示が届きます。この仕様を知らずに1回しか押さず「反応しない」と感じるケースが多いので、tmux環境では最初から2回押す癖をつけておくと迷いません。他のショートカットとの衝突や予約済みキーの一覧はClaude Codeショートカット一覧にまとめています。
> npm run build を実行して
# 実行中に Ctrl+B(tmux利用時は2回)を押すとバックグラウンドへ移行バックグラウンド化した後もClaudeは新しいプロンプトに応答し続けます。コマンドの完了を待たずに別の作業を指示できるのが最大の利点で、ビルドの完了確認だけを最後にまとめて行う運用が組めます。
バックグラウンドBashは裏で何をしているか
Ctrl+Bを押すと、Claude Codeはそのコマンドを非同期実行に切り替え、即座にバックグラウンドタスクIDを返します。標準出力・標準エラーはファイルに書き出され続け、Claudeは後からReadツールでそのファイルを読んで結果を把握します。タスクIDはトラッキングと出力取得の両方に使われるため、同時に複数のコマンドを裏で走らせても混線しません。
バックグラウンド化に向くコマンドは、完了までの時間が長くAIの逐次確認を必要としない処理です。ビルドツール(webpack・vite・make)、パッケージマネージャー(npm・yarn・pnpm)、テストランナー(jest・pytest)、開発サーバー、Docker・Terraformのような長時間プロセスが代表例です。逆に、実行結果を即座に次の判断材料にしたい短時間のコマンドは、フォアグラウンドのままの方が会話のテンポを崩しません。
自動終了の条件を把握しておく
バックグラウンドタスクは放置しても永遠には残りません。出力が5GBを超えると自動終了し、理由がstderrに記録されます。ログを吐き続ける監視系のコマンドを裏で回すときは、この上限を念頭に置いてください。
macOSとLinuxでは、OSがメモリ逼迫を通知した際にもバックグラウンドタスクが終了します。条件はセッションが30分以上アイドルで、ターンもサブエージェントも動いていないことです。作業中のセッションが巻き込まれることはありません。この挙動はv2.1.193以降が対象で、無効にするには環境変数CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAPを1に設定します。
サブエージェントが所有するバックグラウンドコマンドは扱いが別です。アイドル60分で自動終了し、この時間はCLAUDE_SUBAGENT_BG_SHELL_MAX_MSでミリ秒単位で調整できます。フォアグラウンドで実行中のサブエージェントが所有するコマンドは、そのサブエージェントが最終応答を返した時点で終わります。なおv2.1.218より前は、メモリ逼迫による回収も60分の期限も、Ctrl+Bで手動バックグラウンド化したコマンドには適用されていませんでした。古いバージョンで運用している場合はこの差を踏まえておくと、想定と違う挙動に戸惑いません。
タイムアウトしたコマンドも自動でバックグラウンドへ移る
Ctrl+Bを押さなくても、Claudeが実行したコマンドがタイムアウトに達すると、Claude Codeはそのコマンドを止めずに自動でバックグラウンドへ移し、Claudeは作業を続けます。移した後の扱いは手動でバックグラウンド化した場合と同じ回収ルールに従うため、フォアグラウンドのサブエージェントが所有していたコマンドなら、そのサブエージェントの最終応答で終了します。
ただし次の3種類のコマンドは自動バックグラウンド化の対象外で、タイムアウトに達すると素直に停止します。
sleepで始まるコマンド- コマンドのどこかに
gitを含むコマンド - Claude Codeが単純なコマンド列へ分解しきれない複合コマンド
タイムアウトで移された場合、実行結果にはCommand did not complete within its 120s timeout and was moved to the backgroundのように、適用されたタイムアウト秒数・タスクID・出力の書き出し先が明記されます。また、移されたコマンドの中にcdやpushdのようなディレクトリ変更が含まれていても、その変更はセッションに引き継がれません。結果には「ディレクトリ変更は反映されていない」という趣旨のメッセージが添えられ、Claudeが実際には起きていない移動を前提に動くことを防いでいます。
セッションごとバックグラウンド化した場合の扱い
Claude Codeを終了すると、実行中のバックグラウンドタスクは通常そこで片付けられます。ただしセッション自体をバックグラウンドに回した場合は別で、実行中のタスクはそのままバックグラウンドセッションに引き継がれ、動き続けます。セッションを裏に回すには/background(エイリアス/bg)を実行します。/bg テストスイートを実行して失敗を直してのようにひとこと指示を添えて回すことも可能です。
実行中のバックグラウンドタスクや動いているサブエージェントがある状態でセッションを終了しようとすると、Background work is runningというダイアログが出て即座には終了しません。ここで「バックグラウンドへ移して終了」を選べば、/backgroundと同じ扱いで裏へ回りつつシェルに戻れます。この引き継ぎを避けて実行中の作業を止めたい場合は、環境変数CLAUDE_DISABLE_ADOPTを1に設定しておくと、バックグラウンド化の前に確認を求めるようになります。
セッションのバックグラウンド化と操作はclaude agents --jsonによるスクリプト制御でも扱え、複数セッションを並行運用したい場合はclaude agents --jsonでバックグラウンドセッションを操作するで具体的なコマンドを確認できます。実行中のバックグラウンドタスクの一覧表示・停止は/tasksコマンドからも行えます。
バックグラウンド機能を丸ごと無効にする
CI環境や検証目的でバックグラウンド実行そのものを止めたいときは、環境変数CLAUDE_CODE_DISABLE_BACKGROUND_TASKSを1に設定します。この変数はCtrl+Bによる手動バックグラウンド化と、Claudeが自発的にバックグラウンド実行を選ぶ挙動の両方を止めます。個別の自動終了条件だけを止めたい場合は、前段のCLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAPやCLAUDE_SUBAGENT_BG_SHELL_MAX_MSを使い分けてください。他の環境変数と合わせて用途別に把握したい場合はClaude Code環境変数リファレンスが早見表になっています。
export CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1
claudeどんな作業でバックグラウンド化が効くか
| 用途 | おすすめ度 | 理由 |
|---|---|---|
| ビルド・バンドル(webpack / vite) | おすすめ度◎ | 理由数十秒〜数分の待ち時間をそのまま会話継続に回せる |
| テストスイート(jest / pytest) | おすすめ度◎ | 理由完了後にログを読ませれば結果判定まで自動化できる |
| 開発サーバー起動 | おすすめ度◎ | 理由起動したまま別のファイル編集を並行して進められる |
| 対話的なプロンプト入力を待つコマンド | おすすめ度△ | 理由標準入力を必要とする処理はバックグラウンドで詰まりやすい |
数秒で終わるlsやgit status | おすすめ度✕ | 理由切り替えの手間の方が大きく、フォアグラウンドで十分 |
!プレフィックスのシェルモードとの違い
似た用途で使う機能に、入力の先頭に!を付けてシェルコマンドを直接実行するシェルモードがあります。! npm testのように打つとClaudeの判断や承認を介さずコマンドが実行され、結果は会話の文脈に自動で追加されます。シェルモードのコマンドもCtrl+Bで同じようにバックグラウンドへ回せるため、「Claudeに指示せず自分で叩きたいが、時間はかかる」という場面ではシェルモード側からCtrl+Bを使う組み合わせが便利です。
まとめ
長時間コマンドはClaude Codeに投げっぱなしにせず、Ctrl+Bで裏に回すことで会話のテンポを保てます。tmux環境では2回押しが必要な点、出力5GB・アイドル30分・サブエージェント60分という3種類の自動終了条件、そしてv2.1.218より前のバージョンでは手動バックグラウンド化にこれらの回収ルールが及ばなかった点を押さえておけば、想定外の挙動に戸惑うことはありません。バックグラウンド実行そのものが不要な環境ではCLAUDE_CODE_DISABLE_BACKGROUND_TASKSで丸ごと止められます。
よくある質問
Ctrl+Bを押しても何も起きないのはなぜですか
tmuxを使っている場合、1回目のCtrl+Bはtmuxのプレフィックスキーとして処理されます。同じキーをもう一度押してClaude Codeまで届けてください。それでも反応しない場合は、直前にフォアグラウンドで動いているBashツール呼び出しが実際に存在するか確認します。
バックグラウンドにしたコマンドの出力はどこで確認できますか
出力はファイルに書き出され、Claudeがそのファイルを読んで会話に反映します。手動でファイルを探す必要はなく、Claudeに進捗や結果を尋ねれば、書き出された内容をもとに答えます。
CI環境でバックグラウンド実行を意図せず使わせたくない場合は
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1をセッション起動前に設定してください。手動のCtrl+BとClaudeの自発的なバックグラウンド化の両方が無効になり、すべてのBashコマンドがフォアグラウンドで完了を待つ挙動に戻ります。