Claude Codeが起動しないトラブルとは
Claude Codeをターミナルから起動しようとしたときに、突然以下のようなエラーが出ることがあります。
claude
zsh: permission denied: claude
または、claude コマンド自体は存在しているように見えるのに、通常起動できなかったり、簡単な疎通確認でも次のようなメッセージが出たりすることがあります。
Error: claude native binary not installed.
Either postinstall did not run (--ignore-scripts, some pnpm configs)
or the platform-native optional dependency was not downloaded
(--omit=optional).
この症状は、Claude Code本体の設定や過去の会話履歴が壊れたというより、npmでインストールされているClaude Codeの実行ファイルが中途半端な状態になっている可能性が高いです。
この記事では、実際に遭遇したケースをもとに、原因の確認方法と安全な修復手順をまとめます。
今回発生した症状
今回の環境では、作業ディレクトリで claude を起動しようとすると失敗しました。
実際に困る場面は、いつも通り claude と入力して対話セッションを開こうとしたときです。
claude
切り分けのために、コマンドの場所とバージョン表示も確認しました。
which claude
claude --version
一見すると claude コマンドが見つからないように見えますが、PATH上には次のシンボリックリンクが存在していました。
/opt/homebrew/bin/claude -> ../lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
つまり、Homebrew配下にインストールされたnpmグローバルパッケージのClaude Codeを起動しようとしていた、という状態です。
原因はnpmグローバルインストールの破損
リンク先のファイルを確認すると、本来のClaude Code実行ファイルではなく、数百バイト程度のプレースホルダーファイルになっていました。
ls -la /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/bin
中身を見ると、次のようなエラーメッセージを表示するだけのファイルでした。
Error: claude native binary not installed.
Either postinstall did not run
or the platform-native optional dependency was not downloaded
Claude Codeのnpmパッケージは、インストール時に環境に合ったnative binaryをoptional dependencyとして取得し、postinstallで bin/claude.exe に配置する仕組みになっています。
今回の環境はApple Silicon Macだったため、本来は以下のnative packageが必要でした。
@anthropic-ai/claude-code-darwin-arm64
ところが、native binary自体は一部存在していたものの、package.jsonなどが欠けており、npmパッケージとしては不完全な状態でした。そのため、Claude Codeのpostinstallやwrapperがnative binaryを見つけられず、起動できなくなっていました。
履歴や設定は消えるのか
このタイプのトラブルで多くの人が心配するのは、Claude Codeの過去の履歴や設定が消えるかどうかです。
結論から言うと、npmグローバルインストールを修復するだけなら、通常は履歴やプロジェクト設定は消えません。
今回修復対象になったのは、以下のようなClaude Code本体のインストール先です。
/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/
/opt/homebrew/bin/claude
一方、プロジェクトごとの設定は次のような場所にあります。
.claude/settings.local.json
また、ユーザー単位の履歴や設定は一般的にホームディレクトリ配下に保存されます。
~/.claude/
~/.config/claude/
今回の修復では、これらの履歴・設定領域には触れていません。壊れていたのは、Claude Codeを起動するための実行ファイル側でした。
まず確認するコマンド
同じような症状が出た場合は、いきなり削除や再インストールをする前に、次の順番で確認するのがおすすめです。
1. claudeコマンドの場所を確認する
which claude
type -a claude
whence -va claude
zshでは which だけだと状況が分かりにくいことがあります。type -a や whence -va も併用すると、alias、function、PATH上の実体を確認できます。
2. Homebrew配下のリンクを確認する
Apple Silicon MacでHomebrewを使っている場合、npmのグローバルパッケージは /opt/homebrew 配下に入っていることがあります。
ls -la /opt/homebrew/bin/claude
readlink /opt/homebrew/bin/claude
正常なら、だいたい以下のようなリンクになっています。
/opt/homebrew/bin/claude -> ../lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
3. 実行ファイルのサイズを確認する
ls -lh /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
file /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
今回の正常復旧後は、claude.exe は約205MBのMach-O arm64実行ファイルになっていました。
-rwxr-xr-x 205M claude.exe
claude.exe: Mach-O 64-bit executable arm64
もし数百バイト程度のテキストファイルであれば、native binaryが正しく配置されていない可能性があります。
4. npmのグローバルインストール状態を確認する
npm list -g @anthropic-ai/claude-code --depth=0
今回の環境では、パッケージ自体は存在していました。
@anthropic-ai/claude-code@2.1.121
しかし、存在していることと正常に起動できることは別です。postinstallやoptional dependencyが失敗していると、パッケージは入っているように見えても claude は起動できません。
修復手順
基本的には、Claude Codeをnpmで再インストールするのが安全です。
npm install -g @anthropic-ai/claude-code
特定バージョンに固定したい場合は、バージョンを指定します。
npm install -g @anthropic-ai/claude-code@2.1.121
再インストール後、以下で確認します。
claude --version
これはClaude Codeの対話セッションを起動するためのコマンドではなく、バイナリが実行できる状態かを見るための軽い診断です。正常なら、次のように表示されます。
2.1.121 (Claude Code)
実際に対話セッションを確認する場合は、通常どおり以下を実行します。
claude
非対話で確認したい場合は、短いプロンプトを渡す方法もあります。
claude -p "hello"
ENOTEMPTYが出る場合の対処
再インストール時に、次のようなエラーが出る場合があります。
npm error code ENOTEMPTY
npm error syscall rename
npm error path /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code
npm error dest /opt/homebrew/lib/node_modules/@anthropic-ai/.claude-code-xxxxxxx
これは、npmが既存のClaude Codeディレクトリを退避しようとしたときに、過去の一時ディレクトリが残っていて衝突している状態です。
今回もこのパターンでした。
確認します。
ls -la /opt/homebrew/lib/node_modules/@anthropic-ai
以下のような一時ディレクトリが残っている場合があります。
.claude-code-2DTsDk1V
これはClaude Codeの会話履歴ではなく、npmがパッケージ更新時に使った退避用ディレクトリです。中身が通常のパッケージファイルであることを確認したうえで、削除します。
rm -rf /opt/homebrew/lib/node_modules/@anthropic-ai/.claude-code-2DTsDk1V
同時に /opt/homebrew/bin 側にも一時リンクが残っている場合があります。
ls -la /opt/homebrew/bin | grep claude
不要なnpm退避用ファイルがあれば削除してから、再度インストールします。
npm install -g @anthropic-ai/claude-code
claude --version
ここでも claude --version は起動確認ではなく、修復直後の疎通確認として使っています。対話起動まで確認するなら、続けて claude を実行します。
起こりやすい原因
このトラブルは、他の人の環境でも起こる可能性があります。特に次のようなケースでは注意が必要です。
npm install -g @anthropic-ai/claude-codeの途中で中断した- ネットワークが不安定でoptional dependencyの取得に失敗した
--ignore-scriptsを付けてインストールした--omit=optionalを付けてインストールした- Claude Codeの自動更新や手動更新が途中で止まった
- npmの退避用一時ディレクトリが残った
- Node.jsやnpmのバージョン変更直後に再インストールした
- Apple Silicon Macでdarwin-arm64のnative packageが正しく展開されなかった
Claude Codeはnative binaryを使うため、単純なJavaScript CLIよりもインストール時のpostinstallやoptional dependencyの影響を受けやすいです。
安全に作業するための注意点
削除や再インストールを行う前に、対象が「Claude Code本体のインストール先」なのか「履歴・設定ファイル」なのかを分けて考えることが大切です。
触ってよい可能性が高い場所は、npmのパッケージ領域です。
/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/
/opt/homebrew/lib/node_modules/@anthropic-ai/.claude-code-xxxxxxx
/opt/homebrew/bin/claude
一方で、安易に削除しないほうがよい場所は、ユーザー設定やプロジェクト設定です。
~/.claude/
~/.config/claude/
.claude/
特に .claude/settings.local.json には、プロジェクトごとの権限設定が入っていることがあります。今回のケースでも、このファイルは読み取り確認だけ行い、変更や削除はしていません。
まとめ
Claude Codeが permission denied で起動しない場合、原因はプロジェクトファイルや履歴ではなく、npmグローバルインストールの破損であることがあります。
今回のポイントは以下です。
/opt/homebrew/bin/claudeは存在していたが、リンク先が壊れていたbin/claude.exeがnative binaryではなくプレースホルダーだった- optional dependencyの
@anthropic-ai/claude-code-darwin-arm64が不完全だった - npmの退避用一時ディレクトリが残っていて再インストールも一度失敗した
- 一時ディレクトリを削除し、同じバージョンで再インストールして復旧した
- 履歴や
.claude/settings.local.jsonは削除していない
最終的には、まず以下でバイナリの疎通を確認できました。
claude --version
そのうえで、普段通り claude を実行して対話セッションを開ける状態に戻しました。
同じ症状が出た場合は、まず claude のリンク先と bin/claude.exe の実体を確認し、必要に応じてnpmで再インストールするのが現実的な対処法です。

