長い作業を任せていたら、Claude Code がぴたりと動きを止めた——そんな場面、開発中に何度か経験したことはないでしょうか。カーソルは点滅しているのに何も起きありません。Bash コマンドを実行した後から応答がありません。中断すべきか、もう少し待つべきか判断に迷う、あの感覚です。
私も最初はこの「途中停止」問題に頭を悩ませていました。ネット上の情報は「ネットワークを確認してください」という的外れなものが多く、Claude Code に固有の原因を把握するまでに相当時間がかかりました。
止まり方の症状から原因を特定して対処するまでの手順を実例とともに整理しました。主な原因は3つのカテゴリに分かれており、それぞれ診断アプローチと対処法が異なります。順を追って見ていきます。
止まり方の「症状」で原因カテゴリを絞り込む
まず最初にやるべきことは、どんな止まり方をしているかを観察することです。Claude Code が止まるとき、その状況には必ずパターンがあります。
すぐに止まる(数秒〜1分以内)
- ツール呼び出し直後から応答なし → ツール実行エラー、MCP 接続問題
- コマンドを入れた直後から固まる → Hooks 設定のエラー、認証問題
- Edit ツールを使おうとすると止まる → ファイルロック、パーミッション問題
しばらくしてから止まる(数分後)
- コンテキスト残量が少なくなったタイミング → コンテキストバジェット枯渇
- サブエージェントに作業を渡した後 → サブエージェントの無応答・エラー
- 同じ操作を繰り返しているように見える → 無限ループ
この分類ができたら、次は Ctrl+C で安全にセッションを中断し、直前の出力を落ち着いて読みます。Claude Code はほぼ必ず何らかのメッセージを出力しています。それを無視してリセットするのは、診断の機会を捨てているのと同じです。
# セッションのログを確認する(Claude Code のデフォルトログパス)
cat ~/.claude/logs/claude-code.log | tail -100では、3つの原因カテゴリを順に見ていきます。
原因① コンテキストバジェット枯渇(最多ケース)
私の体感では、「途中で止まる」問題の半分以上がこれです。Claude Code には各セッションで使用できるトークン量に上限があります。この上限に近づくと動作が変わり、場合によっては処理を止めてユーザーの判断を待つ状態になります。
枯渇のサインを見分ける
セッション後半でステータスバーのトークン残量表示が赤くなっていたり、以下のようなメッセージが出ていたりしたら確定です。
Context window is 95% full. Consider starting a new conversation
or using /compact to summarize the conversation.
また、Auto Compaction が有効な環境では、Claude Code が自動で会話を要約しようとするタイミングで一瞬固まることがあります。これは正常動作ですが、要約処理に数十秒かかることがあるので、中断前に少し待ってみてください。
対処法:まず /compact で再開を試みる
最も手軽な即時対応は /compact コマンドです。
# Claude Code セッション内で実行
/compact現在の作業状態を保ちながらコンテキストを圧縮して続きから再開できます。ただし圧縮後は会話の細かい経緯が失われるため、重要な決定事項やコードの設計意図は CLAUDE.md や別ファイルに記録しておくことを強くお勧めします。
対処法:タスクを事前に分割する
根本的な解決策は、最初からタスクを小さく区切ることです。「このプロジェクト全体を TypeScript に移行して」と一度に頼むより、次のように段階を分けると各ステップでコンテキストをリセットできます。
# 良い例:段階的な依頼
ステップ1: まず src/lib/ ディレクトリだけ TypeScript に変換して。
→ 確認・コミット
ステップ2: 次に src/components/ を変換して。
→ 確認・コミット
ステップ3: 最後に src/app/ を変換して。
コンテキスト管理の詳細はClaude Code のコンテキストバジェット最適化ガイドにまとめています。Auto Compaction の仕組みと設定についてはClaude Code Auto Compaction トラブルシューティングが参考になります。
原因② ツール・サブエージェントの無応答
Claude Code がツール(Bash, Edit, Read など)やサブエージェント(Task ツール)を呼び出した後、その応答を待ち続けている状態です。外から見ると「止まっている」ように見えますが、実際は「応答待ち」です。この違いを意識すると対処が変わります。
Bash ツールのハング
長時間かかる Bash コマンドが返ってこないパターンです。npm install、大量ファイルの検索、外部 API への接続、DB マイグレーションなどが典型例です。
# 止まりやすいパターン(対象範囲が広すぎる)
find / -name "*.log" -size +100M # ルートからの全検索は数分〜数十分かかる場合も
# 改善パターン(スコープを明確に絞る)
find /var/log /tmp -name "*.log" -size +100M -mtime -7Claude Code に Bash コマンドを渡す際は、事前にターミナルで実行してみて実行時間を確認しておくのが確実です。特に初めて扱うコマンドや、対象ディレクトリが大きい場合は timeout コマンドで安全網を設けましょう。
# timeout を付けることで最大30秒で強制終了させる
timeout 30 npm run build || echo "Build timed out, check manually"MCP サーバーの無応答
MCP ツールを使っている場合、MCP サーバー側が応答を返せない状態になると Claude Code が待ち続けます。まず /mcp コマンドで接続状態を確認します。
# Claude Code 内で実行 — 接続中の MCP サーバーの状態を一覧表示
/mcpステータスが disconnected や error になっている MCP サーバーがあれば、それが原因です。該当サーバーを再起動するか、~/.claude/claude_desktop_config.json(または settings.json の mcp 設定)を確認してください。
MCP 接続問題の詳細な診断手順はClaude Code MCP 接続エラーの完全トラブルシューティングで解説しています。
サブエージェントが返ってこない
マルチエージェント構成で Task ツールにより作業を委任した場合、サブエージェントが完了しないと親エージェントが無期限に待ち続けます。
サブエージェントの無応答には主に3つのパターンがあります。
パターン A: サブエージェント自身もコンテキスト枯渇している サブエージェントは独立したセッションを持つため、長い作業を渡すとそちらもコンテキストが枯渇します。サブエージェントへの依頼は「短く、明確に、完了条件をセットで」が鉄則です。
# 悪い例:曖昧で大きすぎる
Task: このプロジェクト全体のテストを書いて
# 良い例:スコープと完了条件が明確
Task: src/utils/formatter.ts の単体テストを vitest で書いて。
正常系2ケース・異常系1ケースを含めること。完了したらテストを実行して全件パスを確認して。
パターン B: 許可が必要なアクションに遭遇している
サブエージェントがファイル削除や外部コマンド実行など、デフォルトで許可が必要なアクションに直面すると、ユーザーの確認を待って止まります。--auto モードか、allowedTools の設定を見直しましょう。
パターン C: サブエージェントが連鎖している サブエージェントが別のサブエージェントを起動してしまう「エージェント連鎖」が起きると、制御が戻ってこなくなります。サブエージェントへの指示に「Task ツールは使わないこと」と明記するのが有効です。
サブエージェント問題の詳細な診断はClaude Code サブエージェントが返ってこない問題の対処法に詳しく書いています。
原因③ 無限ループとタスク放棄
Claude Code が同じ操作を繰り返していたり、進捗がないまま延々と処理を続けているパターンです。ループに入るとコンテキストも急速に消費されるため、放置すると原因①と重なって複合的な問題になります。
無限ループの兆候
以下のような状況が続いていれば、ループに入っている可能性が高いです。
- 同じファイルを
Read → Edit → Read → Editと繰り返している - 同じエラーメッセージが何度も表示される
Todo listに完了マークがつかない項目が増え続けている- Bash の実行履歴に同じコマンドが何度も登場している
このケースは、Claude Code に「今何をしているか」を確認するだけで解消することが多いです。
(セッションに入力)
今どこまで進みましたか?完了したタスクと、今まさに何を試みているかを教えてください。
Claude Code は問われると自分の状態を振り返るため、これだけでループから抜け出すことがあります。もし抜け出せなければ Ctrl+C で中断し、問題を整理した上で再依頼するのが最速です。
タスク放棄後の待機
Claude Code が困難な状況に直面したとき、タスクを途中で放棄してユーザーの確認を待つ状態になることがあります。画面には何も表示されず、ただ点滅するカーソルだけという状況です。
これを防ぐには、プロンプトで「迷ったらどうするか」を最初から指定しておくのが有効です。
# CLAUDE.md に記載しておくとよい指示の例
## 作業中のルール
- エラーが発生した場合、まず3回まで自分で解決を試みること
- 解決できない場合はエラーメッセージと試みた内容をまとめてから報告すること
- 不明点があっても確認なしに進めてよい。判断に迷った場合は最善と思われる選択をとること
こうした指示があると、Claude Code は迷っても処理を続けようとします。詳細はClaude Code タスク放棄とプロンプト検証ループの改善で解説しています。
全体を振り返って:症状を観察してから中断する習慣を
「途中で止まる」問題への最も有効な対処は、焦らず症状を観察することです。
止まったらまず Ctrl+C で安全に中断し、直前の出力を確認します。それだけで原因カテゴリの大半は特定できます。
コンテキスト枯渇なら /compact で再開、ツール無応答なら対象コマンドを見直す、ループなら現状確認を促す——それぞれの対処はシンプルです。複雑に見えても、症状を分類する目さえ持てば対応できます。
まずは今の Claude Code セッションにステータスバーのトークン残量が表示されているか確認してみてください。それが「止まる問題」の最初の手がかりになることが多いです。