Installation was killedエラーの原因と対処 — Claude Code
インストール中に「Installation was killed before it could finish」と出て止まるのはメモリ不足が原因です。exit code 137の意味とスワップ追加の手順をまとめます。
「Installation was killed」はインストーラーが強制終了された合図
インストールスクリプトを実行した直後に次のメッセージが出て止まるなら、OSがインストーラーのプロセスを強制終了させています。
Setting up Claude Code...
bash: line 183: 34803 Killed "$binary_path" install
Installation was killed before it could finish (exit code 137). This usually means the system ran out of memory.
Claude Code needs roughly 512MB of free memory to install. Free up memory, then run this script again.exit code 137は、UNIX系OSで「シグナル9(SIGKILL)を受け取ってプロセスが終了した」ことを示す値です。Linuxでは、空きメモリが尽きたカーネルのOOM Killer(out-of-memory killer)が実行中のプロセスを選んで終了させたケースが典型です。小さめのVPSやクラウドの最小インスタンスで起きやすい現象です。
必要な空きメモリは、インストール時でおよそ512MBです。claudeを動かす段階ではさらに多く必要で、動作要件はRAM 4GB以上とされています。
137という数字の読み方
シグナルを受けて終了したプロセスの終了コードは「128 + シグナル番号」で表されます。SIGKILLの番号は9なので、128 + 9 = 137です。手元のmacOS(Claude Code v2.1.287を導入済みの環境)で、bashの子プロセスにkill -9を送って確かめると、次のとおりになりました。
bash -c 'bash -c "kill -9 \$\$"; echo "exit=$?"'bash: line 1: 63152 Killed: 9 bash -c "kill -9 \$\$"
exit=137Killedという単語と137の組み合わせは、SIGKILLで落とされたことの痕跡です。ただしSIGKILLを送るのはOOM Killerだけではありません。kill -9で誰かが落とした場合も同じ形になります。メモリ不足かどうかを裏付けたいときは、Linuxのカーネルログを確認します。
sudo dmesg | grep -i -E "out of memory|killed process"OOM Killerが動いていれば、終了させたプロセス名とメモリ使用量の行が残ることがあります。一般ユーザーにはカーネルログの読み取りが制限されている環境もあるため、sudoを付けています。ログの行番号やプロセスIDは実行のたびに変わります。
症状から原因を切り分ける
同じ「インストールが止まる」でも、原因は3通りに分かれます。メッセージの文面で見分けられます。
インストールが止まる3つの型
Installation was killed ...
メモリ不足です。次の節の対処に進みます。
コンテナで反応が止まる
rootで
/から実行したときのハングです。Dockerコンテナの節に進みます。curl: (23) / curl: (56)
ネットワーク経路の失敗で、メモリは関係ありません。56はダウンロード自体の中断、23はcurlが受け取った内容をパイプへ書き込めなかったことを示し、通常はBashが先に終了しています。プロキシやTLS証明書はClaude Codeインストールエラーの切り分けチェックリストの担当範囲です。
メモリを確保するか、スワップを追加する
troubleshoot-installのページでは、スワップ領域の追加が最初の対処に挙がります。errorsのページでは、他のプロセスの停止が先に挙がっています。この記事の手順は前者の順です。スワップはディスクをオーバーフロー用のメモリとして使うため、物理メモリが少なくてもインストールを完走できます。まず空きメモリを見て、足りなければスワップを足します。
追加する前に空きメモリを見る
今どれだけ空いているかを確認します。
free -h見るのはavailable列です。新しいプロセスに割り当てられる実質的な空きの目安で、キャッシュに使われている分のうち解放できるものを含みます。free列だけを見ると実際より少なく見えます。availableが512MBを下回るなら、次の手順でスワップを追加します。
2GBのスワップファイルを作る
2GBのスワップファイルを作って有効にします。
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile2GBは公式が例に挙げているサイズです。空きメモリが極端に少ない環境で、2GBでも再び強制終了されるなら、-lに渡すサイズを大きくして作り直す選択肢があります。ディスクの空き容量との兼ね合いで決めます。
有効になったら、インストールスクリプトを再実行します。
curl -fsSL https://claude.ai/install.sh | bash有効になったかどうかは、swapon --showとfree -hのSwap行で確かめられます。swapon --showに/swapfileが並び、Swapの合計が約2GBになっていれば成功です。
swaponで有効にしただけのスワップは、/etc/fstabに載せないと次回起動時に自動では有効になりません。インストールだけが目的ならそのままで構いません。常用するなら、/etc/fstabに次の一行を足します。
/swapfile none swap defaults 0 0スワップ領域のエントリでは、2列目をnoneにします。書式の詳細はfstab(5)とswapon(8)のmanページにあります。
不要になったらsudo swapoff /swapfileで無効にして、ファイルを削除できます。
fallocateで作ったファイルをswaponが拒否するときは、同じ2GBをddで実体のあるファイルとして作ります。fallocateで事前確保したファイルは、ファイルシステムによっては穴のあるファイルと解釈されて拒否されます。ddで作る方法は、スワップファイルの作り方として最も移植性が高いとされています。sudo dd if=/dev/zero of=/swapfile bs=1M count=2048のあとに、chmod以降を同じ順で実行します。
スワップを追加できないときはプロセスを止める
メモリを食っているプロセスを止めてから再実行します。何が食っているかは、メモリ使用量の多い順に並べると分かります。
ps aux --sort=-%mem | head -5たとえばビルドジョブ、並列で動くコンテナ、データベースが上位に並ぶことがあります。止めてよいものを一つ選んで止め、free -hでavailableが増えたことを確かめてから、インストールを再実行します。それでも足りなければ、公式の対処にあるとおりインスタンスサイズを上げます。スワップはインストールを通す手段で、実行時の要件(RAM 4GB以上)を満たす手段ではありません。インストールが通ったあとにclaudeの動作が重いなら、物理メモリの側を見直す場面です。
Claude Codeが対応するLinuxは、Ubuntu 20.04以降・Debian 10以降・Alpine Linux 3.19以降です。
Alpineなどの軽量コンテナで先に用意するもの
軽量なコンテナ・インスタンスの代表格がAlpine Linuxです。Alpineにはbashもcurlも入っていないため、メモリが足りていても、インストールコマンドはnot foundで失敗します。AlpineなどmuslベースのLinuxでは、インストールコマンド用にbashとcurl、実行時にlibgcc・libstdc++・ripgrepが要ります。
apk add bash curl libgcc libstdc++ ripgrepripgrepはcommunityリポジトリにあります。apkがパッケージを見つけられないときは、Alpineのバージョンに合わせたcommunityの行を/etc/apk/repositoriesに足します。
echo "https://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories
apk updateapk updateでパッケージの一覧を更新したら、apk addをやり直します。そのうえで、settings.jsonのenvにUSE_BUILTIN_RIPGREPを0として書きます。
{
"env": {
"USE_BUILTIN_RIPGREP": "0"
}
}not foundは「Installation was killed」とは別の失敗なので、メモリを増やしても直りません。
Dockerコンテナでは作業ディレクトリが原因になる
コンテナ内でrootとして/からインストールスクリプトを実行すると、ハングすることがあります。症状は強制終了ではなくハングです。原因は、ルートから実行したインストーラーがファイルシステム全体を走査してメモリを大量に使うことです。WORKDIRで小さなディレクトリに限定すると回避できます。
WORKDIR /tmp
RUN curl -fsSL https://claude.ai/install.sh | bashDocker Desktopでは、ビルド用コンテナがDocker Desktopの仮想マシンに割り当てたメモリを共有します。Dockerが使えるメモリの総量は、docker infoのTotal Memory行で確かめられます。
docker info | grep -i "total memory"この値が小さいときは、Settings → Resourcesでメモリ上限を上げてから、ビルドをやり直します。
v2.1.200からエラーの理由が表示される
v2.1.200より前のインストールスクリプトは、プロセスが強制終了されたとき、シェルが出すKilledの一行で終わっていました。メモリ不足なのか別の問題なのか、メッセージからは分かりませんでした。
v2.1.200の前後でインストール失敗の表示が変わった
v2.1.200より前
シェルのKilledが出るだけで、原因の説明も、必要なメモリ量の案内もありません。
v2.1.200以降
Linuxで終了コードが137のとき、メモリ不足の可能性と、必要な空きメモリ量(約512MB)が表示されます。
v2.1.200以降でもOOMの説明が付かない組み合わせがあります。
| 環境と終了コード | 表示されるメッセージ |
|---|---|
| Linux、137 | 表示されるメッセージ冒頭の例と同じ2行(OOMの説明と必要メモリ量) |
| macOS、または137以外の致命的シグナル | 表示されるメッセージInstallation was killed before it could finish (exit code <N>)だけ |
WSL内のインストールもmacOS・Linux用のスクリプトが担うため、このメッセージの対象です。PowerShell経由のネイティブWindows用インストールスクリプトは、このメッセージを持ちません。Windows単体の環境でこの文言を見ることはありません。
Killedの一行しか出ないときは、v2.1.200より前のスクリプトを使っている可能性があります。対処は同じで、メモリの確保かスワップの追加です。
CIやプロビジョニングで再実行するとき
CIやサーバー構築のスクリプトでは、インストールが落ちたかどうかを終了コードで拾いたい場面があります。Linuxでメモリ不足のときは、インストールスクリプトが終了コード137で終わります。curl ... | bashのパイプラインでは、$?にはパイプの最後にあるbashの終了コードが入ります。curl側の失敗も拾いたいなら、先にset -o pipefailを指定します。
再試行の分岐は、137のときだけスワップを足してからもう一度流す形にします。137で分けるのは、137以外の終了コードにはメモリ不足の説明が付かず、curlの(23)や(56)のようにメモリと無関係な失敗もあるからです。137以外のときは、スワップを足す前にエラーメッセージを読んで原因を確かめます。
バージョンを指定してインストールするときは、bash -sに引数を渡します。curl -fsSL https://claude.ai/install.sh | bash -s stableで安定版、bash -s 2.1.89のようにバージョン番号を渡す書き方も使えます。claude installコマンド自体も同じ指定を受け取ります。v2.1.287の--helpは次のとおりです。
claude install --helpUsage: claude install [options] [target]
Install Claude Code native build. Use [target] to specify version (stable,
latest, or specific version)
Options:
--force Force installation even if already installed
-h, --help Display help for commandよくある質問
インストール後のアップデートで同じ現象が出ますか
インストールスクリプトが報告するのはclaude installステップの強制終了です。アップデートに関するエラーはClaude Codeアップデートの方法で扱っています。
ロックファイルのエラーとは関係がありますか
「another process is currently installing Claude」はロックファイルの残留で起きる別のエラーで、原因も対処も異なります。詳しくはClaude Codeのロックファイル残留でインストール失敗する原因と直し方にあります。
まとめ
137はmacOSやkill -9でも出る値です。Linuxならカーネルログでメモリ不足を裏付けてから、スワップを足す流れになります。