本文へスキップ
Claude Media
Claude Code v2.1.148 — Bashツールが全コマンドで失敗するv2.1.147のリグレッションを修正

Claude Code v2.1.148 — Bashツールが全コマンドで失敗するv2.1.147のリグレッションを修正

Claude Code v2.1.148は、直前のv2.1.147で混入したBashツールが全コマンドで終了コード127を返すリグレッションを修正したホットフィックスです。

読了目安 約9

このリリースで何ができるようになるか

Claude Code v2.1.148は、直前のv2.1.147で混入したリグレッションをピンポイントで潰すホットフィックスです。新機能はなく、修正はBashツールに関する1件のみですが、該当する環境では「Claude Codeがほぼ使えない」状態からの復旧を意味します。

修正されたのは、Bashツールが実行する全てのコマンドが終了コード127を返すという不具合です。終了コード127はPOSIXシェルで「コマンドが見つからない(command not found)」を表す値で、本来は実在しないコマンドを呼んだときにだけ返ります。これが全コマンドで一律に返るということは、gitnpmのような実在するコマンドまでシェルが見つけられていない状態を指します。

この症状が出ていた環境では、Claude Codeはテスト実行・ビルド・git操作・ファイル検索といったBashツール経由の作業を一切完了できませんでした。コード生成や説明のような対話だけは動くものの、エージェントとしての実作業がほぼ止まる、影響の大きいリグレッションです。v2.1.148に更新すると、Bashツールが通常どおりコマンドを実行できる状態に戻ります。

なお、この不具合は全ユーザーではなく一部の環境でのみ発生していました。v2.1.147を使っていてもBashツールが普通に動いていた場合は、その環境では今回のリグレッションを踏んでいなかったことになります。

あなたの開発フローはどう変わるか

v2.1.147以降Bashツールが動かなくなっていた環境

直前のv2.1.147に更新してから、Claude CodeがBashツールを使う操作で軒並み失敗するようになっていた場合は、v2.1.148に更新するだけで通常運用に戻ります。Claude Code側の設定変更やシェルの再構築は不要で、更新後に新しいセッションを開始すればBashツールが正しくコマンドを実行します。

自分の環境がこのリグレッションに該当していたかは、次の2点で切り分けられます。

  • claude --versionがv2.1.147である(v2.1.146は欠番のため、番号上の直前はv2.1.147です)
  • Bashツールの実行結果が、git statusのような確実に存在するコマンドでも一律に終了コード127(コマンドが見つからない)で失敗していた

この両方が当てはまっていたなら、本版が直接効きます。更新後は、適当なBashコマンドを1つ実行させて終了コードが0で返ることを確認すれば、復旧したと判断できます。

CIやヘッドレス運用でClaude Codeを呼んでいる環境

CIパイプラインやスクリプトからClaude Codeをヘッドレスで起動している運用では、このリグレッションは見えにくい形で影響します。Bashツールが全コマンドで失敗していても、エージェント自体は処理を続けようとするため、ジョブが「成功扱いのまま中身が空」になったり、テストやビルドのステップが実行されないまま完了したりするおそれがありました。

このリグレッションが見つけにくいのは、終了コード127が「エラー」ではなく「コマンドが見つからない」という、一見もっともらしい結果として返るためです。ヘッドレス運用では、Claude Codeがその127を受け取って「コマンドが存在しないようなので別の方法を試します」といった筋道で処理を続けてしまい、ログ上はエラーで止まらずに最後まで走り切ってしまうことがあります。気づくための手がかりとしては、ジョブの所要時間が普段より極端に短い、生成されるはずの成果物(ビルド出力やテストレポート)が空のまま、エージェントの応答に「コマンドが見つかりませんでした」という趣旨の記述が繰り返し現れる、といった兆候が挙げられます。対話的に使っている場合も、Claude Codeが同じコマンドを別の書き方で何度も試したり、本来不要な回避策を提案し続けたりする挙動が、同じ症状の表れとして観察されることがあります。

v2.1.147をCIで固定して使っていた場合は、その期間に走ったジョブの結果を一度見直し、Bashツール経由の処理が実際に走っていたかを確認する価値があります。本版に更新すれば、以降のジョブではBashツールが通常どおり動作します。バージョンを固定する運用であれば、固定先をv2.1.148以降に切り替えておくと安全です。

v2.1.147のリグレッションに当たっていなかった環境

このリグレッションは一部の環境でのみ発生していたため、v2.1.147でBashツールが問題なく動いていた環境では、本版に更新しても体感できる差分はありません。とはいえ修正はBashツール経路に限定された小さな差分なので、次の機能追加版を待たずに更新しても副作用の心配は小さく、予防的に上げておく選択肢もあります。

v2.1.146以前を使い続けている環境は、そもそもこのリグレッションが混入する前のため、本版を理由に更新を急ぐ必要は薄いと言えます。

主な変更点

本版の変更は次の1件です。

Bashツールが全コマンドで終了コード127を返す問題を修正

一部のユーザーで、Bashツールが実行する全てのコマンドが終了コード127を返していた問題を修正しました。この不具合はv2.1.147で混入したリグレッションで、gitlsのような実在するコマンドまで「コマンドが見つからない」として失敗していました。本版で、Bashツールが通常どおりコマンドを解決して実行できる状態に戻っています。

公式の変更履歴では内部的な原因までは説明されていないため、なぜ一部環境だけで終了コード127が一律に返っていたのかは明示されていません。後述のとおり、シェル環境の初期化経路に関わる修正と読むのが自然そうです。

exit 127という終了コードから何が起きていたかを読み解く

終了コード127は、シェルが「指定されたコマンドを見つけられなかった」ときに返す値です。タイプミスで存在しないコマンドを打ったときに返るのが本来の用途で、実在するコマンドでこれが返る場合は、コマンドそのものではなくシェルの実行環境のほうが壊れていることを示します。

Claude CodeのBashツールは、ユーザーのシェル設定(PATH、エイリアス、シェル関数など)を引き継いだ状態でコマンドを実行するために、シェル環境のスナップショットを生成して各コマンドの実行時に読み込む仕組みを持っています。このスナップショットの生成や読み込みが崩れると、PATHが空に近い状態でコマンドが実行され、実在するコマンドまで一律に「見つからない=終了コード127」で落ちる、という挙動につながりやすい部分です。

直前のv2.1.147では、シェルスナップショット周辺に複数の修正が入っていました。たとえば「アンダースコア1文字で始まる名前のユーザー関数がスナップショットから欠落し、それを参照するエイリアスが壊れる」問題の修正などです。本版のリグレッションが、こうしたシェルスナップショット系の変更のいずれかが一部環境で生んだ副作用なのかは公式には明示されていませんが、終了コード127という症状の性質から、シェル環境の初期化経路に関わる修正と読めそうです。

自分の環境がリグレッションを踏んでいたかの切り分け

自分の環境が今回のリグレッションに当たっていたかどうかは、いくつかの手順を踏めば本版に上げる前でも確認できます。まずclaude --versionを実行し、利用中の版がv2.1.147かどうかを見ます。v2.1.146は欠番のため、v2.1.148より前で症状が出る可能性があるのは実質的にv2.1.147だけです。

そのうえで、Claude Codeにごく単純な、確実に存在するコマンドを1つ実行させます。pwdecho okのように、PATHの状態にほとんど依存せずに通るコマンドが向いています。このときBashツールの実行結果が終了コード0で正常に返るなら、その環境ではシェルの実行環境が壊れておらず、リグレッションを踏んでいなかったと判断できます。逆に、こうした自明なコマンドまで終了コード127で失敗するなら、コマンド側ではなくシェルの初期化経路のほうに問題が出ている状態で、本版が直接効く環境だと言えます。CIで切り分ける場合は、ジョブのログにBashツールの終了コードを書き出すステップを一時的に挟むと、127が一律に並んでいるかどうかを後から確認しやすくなります。本版に更新しても症状が残る場合は、シェル設定そのものの問題である可能性があるため、Claude Codeのトラブルシューティングガイドで環境側の切り分け手順も確認できます。

直近リリースでのBashツール・シェル関連の変更

直近の機能追加版から本版までを並べると、次のようになります。

バージョン公開日Bashツール・シェル関連の主な変更
v2.1.1452026-05-19Bashコマンド中の非許可環境変数への代入が権限プロンプトを回避できた問題を修正
v2.1.1472026-05-21シェルスナップショット周辺を複数修正(アンダースコア始まり関数の欠落など)。本リグレッションが混入
v2.1.148(本版)2026-05-22全コマンドが終了コード127を返す問題を修正

v2.1.146は欠番のため、v2.1.148の番号上の直前はv2.1.147です。v2.1.147は30件を超える修正を含む整備リリースで、シェルスナップショットやPowerShellツールなど実行環境まわりに広く手が入っていました。広範囲を一度に整備したリリースの翌日に、その一部が一部環境で副作用を起こし、さらに翌日に単発のホットフィックスで潰される、という流れは、Claude CodeがCLI本体・SDK・拡張をひとつのリリース動線でまとめて配る構造で起きやすいパターンです。

利用形態別の影響度

本版が自分の環境にどの程度効くかは、次の早見表で確認できます。

利用形態影響度本版の効果
v2.1.147でBashツールが全滅していた環境更新で正常運用に復旧
v2.1.147を利用中だが症状が出ていない環境予防的に更新する価値あり
v2.1.146以前を利用中の環境リグレッション未混入のため急ぐ理由は薄い
Bashツールをほぼ使わない対話中心の運用ほぼ影響なし

全行が同じ判定にならない点が、このリグレッションの特徴です。発生は一部環境に限られる一方で、踏んだ場合の影響はエージェントの実作業全体に及ぶため、「該当すれば深刻、該当しなければ無風」という分かれ方をします。

バージョン固定運用への示唆

今回の流れで目を引くのは、30件を超える修正を含むv2.1.147という比較的大きな整備リリースの翌日に、たった1項目のホットフィックスであるv2.1.148が続いた、という時間軸です。広範囲に手が入った版はそれだけ副作用の入り込む余地も広く、その副作用が表面化して単発の修正で潰されるまでには、実際に多くのユーザーが使い始める1日程度のずれが生じます。v2.1.147を出た当日に本番へ固定したチームは、ちょうどこのずれの分だけリグレッションを踏んだ版に留まることになりました。

ここから読み取れる現実的な運用は、項目数の多い整備リリースを見つけたときほど、本番固定をその日のうちに行わず1〜2日置く、というものです。1日待つだけでも、今回のv2.1.148のような後追いホットフィックスが先に出そろい、固定先をv2.1.147ではなくv2.1.148に取れた可能性が高くなります。CIでバージョンを固定している場合は、固定値を1点に打ち込むのではなく、パッチバージョン単位で広めの範囲を許容して数日以内のホットフィックスが自動で乗るようにするか、claude updateを週次以上の頻度で回しておくと、本版のような単発のリグレッションに長く巻き込まれずに済むと言えそうです。

まとめ

  • v2.1.147でBashツールが全コマンド失敗していた環境: 本版に更新し、新しいセッションでBashコマンドが終了コード0で返ることを確認すれば復旧します
  • CI・ヘッドレス運用: v2.1.147を固定で使っていた期間のジョブ結果を見直し、固定先をv2.1.148以降へ切り替える価値があります
  • リグレッションに当たっていなかった環境・v2.1.146以前の環境: 急いで更新する理由は薄いものの、差分が小さいため予防的に上げておく選択肢もあります

v2.1.148は新機能を含まないホットフィックスで、本版単独で読み始める価値は限定的です。直前のv2.1.147が広範囲を整備したリリースであり、その一部が一部環境で副作用を起こした、という流れの中に位置付けると、Claude Codeのリリースサイクルの動き方が追いやすくなります。

この記事を共有:XLinkedIn