CLAUDE LABEN
TEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認くださいTEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認ください
記事一覧/Claude Code
Claude Code/2026-04-08中級

Claude Code の Bash ツール実行エラーを解決する — タイムアウト・Permission Denied・出力切れの原因と対処法

Claude Code の Bash ツールでコマンドが失敗する原因と解決方法を徹底解説。タイムアウト、Permission Denied、出力が途切れるなどのエラーをステップバイステップで対処します。

troubleshooting61error15fix11claude-code129bash4command-line

Claude Code の Bash ツールで発生するエラーとは

Claude Code を使った開発では、Bash ツールを通じてシェルコマンドを実行する場面が頻繁にあります。npm installgit pushpython script.py などの日常的なコマンドから、ビルドやテストの実行まで、Bash ツールはあらゆる開発作業の基盤です。

しかし、次のようなエラーに遭遇して作業が止まってしまうことがあります。

  • コマンドがタイムアウトして結果が返らない
  • Permission denied でファイル操作やコマンド実行ができない
  • 出力が途中で切れて全体の結果を確認できない
  • ENOENT(ファイルが見つからない)でスクリプトが失敗する
  • 環境変数やパスが想定通り設定されない

これらの問題について原因を分析し、具体的な解決手順を順番にご紹介します。実際のエラーメッセージと対処法をセットで解説するので、問題が起きたときにすぐ参照できる構成になっています。

タイムアウトエラーの原因と解決策

症状

Bash ツールでコマンドを実行すると、一定時間後に以下のようなメッセージが表示されます。

Command timed out after 120000ms

デフォルトでは120秒(2分)でタイムアウトが発生します。ビルド処理やテストスイートなど、時間のかかるコマンドでは頻繁に遭遇する問題です。

原因

タイムアウトが発生する主な原因は3つです。

1. コマンド自体の処理時間が長い

大規模プロジェクトの npm install やフルビルド、統合テストの実行など、本質的に時間がかかる処理があります。

2. 対話的な入力待ちでブロックされている

git rebase -inpm init(対話モード)のように、ユーザーの入力を待つコマンドは永遠に完了しません。Claude Code の Bash ツールは非対話型のため、入力待ちのコマンドは必ずタイムアウトします。

3. 無限ループやデッドロック

スクリプトのバグにより処理が無限に続くケースです。

解決手順

Step 1: タイムアウト値を延長する

Claude Code では、Bash ツールのタイムアウトを最大600秒(10分)まで設定できます。長時間のビルドやテスト実行には、明示的にタイムアウトを指定してください。

# 長時間かかるビルドコマンドの例
# タイムアウトを300秒(5分)に設定して実行
npm run build
 
# テストスイートを実行する場合は10分に設定
npm run test:integration

Step 2: 対話的コマンドを非対話モードに変換する

対話的なコマンドには非対話モードのオプションを使用します。

# ❌ 対話モード(タイムアウトする)
npm init
git rebase -i main
 
# ✅ 非対話モード(正常に完了する)
npm init -y
git rebase main  # -i フラグを除去

Step 3: バックグラウンド実行を活用する

完了を待つ必要がない長時間処理は、バックグラウンドで実行できます。

# バックグラウンドでビルドを実行
npm run build > /tmp/build.log 2>&1 &
BUILD_PID=$!
echo "Build started with PID: $BUILD_PID"
 
# 後で結果を確認
wait $BUILD_PID && echo "SUCCESS" || echo "FAILED"
cat /tmp/build.log

Permission Denied エラーの原因と解決策

症状

コマンド実行時に以下のようなエラーが表示されます。

bash: ./script.sh: Permission denied
# または
EACCES: permission denied, open '/path/to/file'
# または
fatal: could not create work tree dir: Permission denied

原因

Permission Denied が発生するパターンは複数あります。

1. 実行権限が付与されていないスクリプト

シェルスクリプトを直接実行する場合、実行権限(+x)が必要です。

2. ファイルシステムの書き込み制限

Claude Code のサンドボックス環境では、特定のディレクトリへの書き込みが制限されている場合があります。

3. root 権限が必要な操作

sudo が必要なシステムレベルの操作は、Claude Code の環境では基本的に実行できません。

4. ロックファイルの競合

他のプロセスがファイルをロックしている場合に発生します。

解決手順

Step 1: 実行権限を確認・付与する

# 権限を確認
ls -la script.sh
# 出力例: -rw-r--r-- 1 user group 1234 Apr 8 10:00 script.sh
# → 実行権限(x)がない
 
# 実行権限を付与
chmod +x script.sh
 
# または bash 経由で実行(権限付与不要)
bash script.sh

Step 2: 書き込み可能なディレクトリを使用する

# ❌ 書き込み制限のあるディレクトリ
git clone https://github.com/user/repo.git /opt/repo
 
# ✅ 書き込み可能なディレクトリ
git clone https://github.com/user/repo.git /tmp/repo

Step 3: ロックファイルを確認・削除する

# npm のロックファイルが残っている場合
rm -f package-lock.json
rm -rf node_modules/.package-lock.json
 
# git のロックファイルが残っている場合
rm -f .git/index.lock

出力が途切れる・切れる問題の原因と解決策

症状

コマンドの実行結果が途中で切れ、末尾が表示されません。特に、大量のログを出力するコマンドで発生します。

# 大量のログを出力するコマンド
npm install
# → 出力の途中で切れてしまい、成功/失敗が判断できない

原因

1. 出力バッファの上限

Claude Code の Bash ツールは、出力のサイズに上限があります。大量のログを標準出力に流すと、途中で切り捨てられます。

2. 標準エラー出力との混在

標準出力(stdout)と標準エラー出力(stderr)が混在すると、重要なエラーメッセージが見えなくなることがあります。

解決手順

Step 1: 出力をファイルにリダイレクトする

# 全出力をファイルに保存し、最後の部分だけ確認
npm install > /tmp/npm-output.log 2>&1
echo "Exit code: $?"
tail -20 /tmp/npm-output.log

Step 2: 必要な部分だけフィルタリングする

# エラー行だけ抽出
npm run build 2>&1 | grep -E "error|Error|ERROR|failed|Failed" | tail -20
 
# テスト結果のサマリーだけ取得
npm test 2>&1 | tail -30

Step 3: 冗長な出力を抑制する

# npm の出力を最小限にする
npm install --silent
# または
npm install --loglevel=error
 
# pip の出力を抑制する
pip install package-name --quiet --break-system-packages

ENOENT(ファイルが見つからない)エラーの原因と解決策

症状

Error: ENOENT: no such file or directory, open '/path/to/file'
# または
bash: node: command not found
# または
/usr/bin/env: 'python3': No such file or directory

原因

1. カレントディレクトリの不一致

Claude Code の Bash ツールでは、シェルの状態(カレントディレクトリ含む)がコマンド間でリセットされることがあります。前のコマンドで cd したディレクトリが、次のコマンドでは反映されない場合があります。

2. パスの指定ミス

相対パスを使った場合に、予期しないディレクトリを基準にしてしまう問題です。

3. コマンド・パッケージの未インストール

グローバルにインストールされていないコマンドを呼び出そうとした場合です。

解決手順

Step 1: 絶対パスを使用する

# ❌ 相対パスは基準ディレクトリがずれるリスクあり
cd project && node scripts/build.js
 
# ✅ 絶対パスなら確実
node /tmp/repos/project/scripts/build.js
 
# ✅ または cd と実行を1行にチェーンする
cd /tmp/repos/project && node scripts/build.js

Step 2: ファイルの存在を確認してから操作する

# ファイルの存在確認
FILE="/tmp/repos/project/package.json"
if [ -f "$FILE" ]; then
  echo "File exists"
  cat "$FILE" | head -5
else
  echo "File not found: $FILE"
  # 親ディレクトリの内容を確認
  ls -la "$(dirname "$FILE")"
fi

Step 3: コマンドのパスを確認する

# コマンドの所在を確認
which node
which python3
which npm
 
# パスを確認
echo $PATH
 
# npx 経由で実行(ローカルインストールのみでOK)
npx tsc --version

環境変数が反映されないエラーの原因と解決策

症状

# 環境変数を設定したはずなのに空になる
echo $MY_API_KEY
# → (空)
 
# または .env ファイルの値が読み込まれない
node -e "console.log(process.env.DATABASE_URL)"
# → undefined

原因

Claude Code の Bash ツールでは、各コマンド実行がそれぞれ独立したシェルセッションで動作します。そのため、あるコマンドで export した環境変数は、次のコマンドには引き継がれません。

解決手順

Step 1: 同一コマンド内で環境変数を設定・使用する

# ❌ 別々のコマンドでは引き継がれない
# コマンド1: export MY_VAR="hello"
# コマンド2: echo $MY_VAR  → 空
 
# ✅ 1つのコマンド内で完結させる
export MY_VAR="hello" && echo $MY_VAR
 
# ✅ インライン環境変数
MY_VAR="hello" node -e "console.log(process.env.MY_VAR)"

Step 2: .env ファイルを明示的にロードする

# .env ファイルの値を現在のシェルに読み込む
set -a && source .env && set +a && node server.js
 
# または dotenv を使用(Node.js の場合)
node -r dotenv/config server.js

Step 3: 設定ファイルに永続化する

繰り返し使う環境変数は、プロジェクトの設定ファイルに記述しておくのが確実です。

# .env ファイルに記述
echo 'DATABASE_URL=postgresql://localhost/mydb' >> .env
echo 'NODE_ENV=development' >> .env
 
# package.json の scripts で環境変数を設定
# "scripts": {
#   "dev": "NODE_ENV=development node server.js"
# }

確認方法 — エラーが解決できたか検証する

問題を修正したあとは、以下の手順で解決を確認してください。

# 1. 基本的なコマンド実行テスト
echo "Hello from Bash tool" && echo "Exit code: $?"
 
# 2. ファイル操作の権限テスト
touch /tmp/test-permission.txt && echo "Write OK" && rm /tmp/test-permission.txt
 
# 3. Node.js / Python の実行テスト
node -e "console.log('Node.js OK:', process.version)"
python3 -c "import sys; print(f'Python OK: {sys.version}')"
 
# 4. ネットワーク接続テスト
curl -s -o /dev/null -w "%{http_code}" https://api.anthropic.com/v1/messages
# → 401 が返ればネットワーク接続は正常(認証エラーは接続できている証拠)
 
# 5. git 操作テスト
cd /tmp && git init test-repo && cd test-repo && echo "test" > test.txt && git add . && git commit -m "test" && echo "Git OK" && rm -rf /tmp/test-repo

すべてのテストが正常に通れば、Bash ツールの基本機能は問題なく動作しています。

予防策 — Bash ツールのエラーを未然に防ぐベストプラクティス

日常的に以下の習慣を取り入れることで、Bash ツールのエラーを大幅に減らせます。

1. 常に絶対パスを使う

相対パスに依存せず、プロジェクトディレクトリの絶対パスを変数に格納して使いましょう。

WORK="/tmp/repos/my-project"
cd "$WORK" && npm run build

2. コマンドチェーンで cd と操作を結合する

# cd と実行を && で繋ぐ
cd /tmp/repos/my-project && npm test

3. エラーハンドリングを組み込む

# set -e でエラー時に即停止
set -e
cd /tmp/repos/my-project
npm install
npm run build
echo "All steps completed successfully"

4. 出力を適切に管理する

大量のログが予想されるコマンドは、最初からリダイレクトとフィルタリングを組み合わせましょう。

5. 対話的コマンドを避ける

Claude Code 環境では -y フラグや --non-interactive オプションを常に使用してください。

全体を振り返って

Claude Code の Bash ツール実行エラーは、原因を理解すれば確実に解決できます。この記事で取り上げたエラーパターンと対処法を整理すると、次のようになります。

  • タイムアウト: タイムアウト値の延長、非対話モードの使用、バックグラウンド実行
  • Permission Denied: 実行権限の付与、書き込み可能ディレクトリの使用、ロックファイルの削除
  • 出力切れ: ファイルへのリダイレクト、フィルタリング、冗長出力の抑制
  • ENOENT: 絶対パスの使用、存在確認、コマンドパスの確認
  • 環境変数: 同一コマンド内での設定、.env ファイルの明示的なロード

エラーに遭遇したら、まずエラーメッセージを正確に読み取り、この記事の該当セクションを参照してください。多くの場合、数分で問題を解決できるはずです。

関連する記事も参考にしてみてください。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-06-10
git add -A が .bak バックアップまで巻き込む — in-place 修正スクリプトと自動コミットの落とし穴
sed -i や自作の --fix スクリプトが残す .bak バックアップを git add -A が無言で取り込み、本番リポジトリに混入させてしまう問題。なぜ気づきにくいのか、scoped add と .gitignore でどう塞ぐかを実例で整理します。
Claude Code2026-06-09
前回の記事本文が別の記事に紛れ込む — 固定名の一時ファイルに残る残骸の罠
Claude Code の自動化で、固定名の一時ファイルに前回の中身が残り、まったく別の記事に古い本文が混入する。書き込みが無音で失敗する仕組みと、ユニーク名+挿入後の grep 照合で防ぐ方法を記録します。
Claude Code2026-06-03
Claude Code で git push が「成功」したのに反映されない — commit が無音で失敗する罠
git push がエラーを出さず Everything up-to-date と表示されるのに、変更がリモートに反映されない。clone 直後の identity 未設定で commit が無音失敗する原因と、SHA 照合で確実に検証する方法を解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →