0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bsidianのClaude Code連携プラグインが「Error: Claude Code process exited with code 1」で動かなくなった時の調査と対処

0
Posted at

ObsidianのClaude Code連携プラグインが「Error: Claude Code process exited with code 1」で動かなくなった時の調査と対処

TL;DR

  • Windows環境で npm install -g @anthropic-ai/claude-code すると、まれに メインパッケージとネイティブバイナリ(@anthropic-ai/claude-code-win32-x64)のバージョンがnpmレジストリ上でズレている ことがある
  • その場合、ネイティブバイナリのインストールが optionalDependencies として静かに失敗し、claude コマンドが実体を持たない500バイト程度のスタブのままになる
  • 結果、claude を起動するプロセス(今回はObsidianのClaude Code連携プラグイン)が即座に exited with code 1 でクラッシュする
  • 対処法は、メインパッケージとネイティブパッケージのバージョンが揃っている1つ前のバージョンにピン留めしてインストールし直すこと

症状

Obsidian上でClaude Code CLIと連携するプラグインを使っていたところ、ある日を境に突然

Error: Claude Code process exited with code 1

というエラーが出て、Obsidianから一切Claudeにアクセスできなくなった。

調査

まず、ターミナルで直接CLIの状態を確認する。

where claude
claude --version

C:\Users\<user>\AppData\Roaming\npm\claude
C:\Users\<user>\AppData\Roaming\npm\claude.cmd
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 コマンド自体は存在するが、実行に必要なネイティブバイナリが入っていない、という状態。

npmパッケージの実体を確認してみる。

ls "$(npm root -g)/@anthropic-ai/claude-code"

cli.js が存在せず、cli-wrapper.cjs と install.cjs のみ。最近のバージョンは、プラットフォームごとのネイティブバイナリを postinstall スクリプト (install.cjs) が別パッケージとしてダウンロードしてくる構成になっているらしい。bin/claude.exe を見てみると、わずか500バイトしかなく、本物の実行ファイルではなく「バイナリが無い場合のフォールバック用スタブ」であることがわかった。

1. postinstallがブロックされていた

再インストールしてみると、こんな警告が出た。

npm warn allow-scripts 1 package has install scripts not yet covered by allowScripts:
npm warn allow-scripts   @anthropic-ai/claude-code@2.1.237 (postinstall: node install.cjs)
npm warn allow-scripts
npm warn allow-scripts Run `npm install -g --allow-scripts=@anthropic-ai/claude-code` to allow these scripts once, or `npm config set allow-scripts=@anthropic-ai/claude-code --location=user` to allow them for all global installs.

npmのスクリプト実行ガード機能によって、ネイティブバイナリをダウンロードする postinstall スクリプト自体がブロックされていた。これが1つ目の原因。

npm config set allow-scripts=@anthropic-ai/claude-code --location=user

で許可した上で再インストール。

2. それでもネイティブバイナリが入らない

allow-scripts を許可した後も、claude-code-win32-x64 パッケージがどうしても入らない。個別にインストールを試みると、本当の原因が判明した。

npm install -g @anthropic-ai/claude-code-win32-x64@2.1.237

npm error code ETARGET
npm error notarget No matching version found for @anthropic-ai/claude-code-win32-x64@2.1.237.

メインパッケージの最新版 (2.1.237) が要求しているバージョンのネイティブバイナリが、npmレジストリにまだ存在しなかった。

npm view @anthropic-ai/claude-code-win32-x64 dist-tags
# { stable: '2.1.228', next: '2.1.236', latest: '2.1.236' }

ネイティブ側の latest はまだ 2.1.236 で止まっており、メインパッケージだけ 2.1.237 が先に公開されてしまっている状態(公開パイプラインの一時的なズレ)だった。optionalDependencies の解決に失敗しても npm install 自体はエラーにならず正常終了してしまうため、気づきにくい。

根本原因

- @anthropic-ai/claude-code はプラットフォームごとの実行バイナリを optionalDependencies として別パッケージ(例: @anthropic-ai/claude-code-win32-x64)から取得する構成になっている
- メインパッケージとネイティブパッケージの公開タイミングがズレると、要求バージョンのネイティブパッケージが存在せずインストールが静かに失敗する
- optionalDependencies の解決失敗はnpmの終了コードに影響しないため、CLIから叩くと初めて claude native binary not installed として顕在化する
- Obsidianプラグインなど、CLIを子プロセスとして起動する仕組みは、このエラーをそのまま exited with code 1 として受け取る

解決方法

メインパッケージとネイティブパッケージのバージョンが一致している、1つ前の版に明示的にピン留めする。

# 一致しているか確認
npm view @anthropic-ai/claude-code@2.1.236 optionalDependencies

# バージョンを固定してインストール
npm install -g @anthropic-ai/claude-code@2.1.236

claude --version
# 2.1.236 (Claude Code)

bin/claude.exe のサイズも500バイトから330MB超の正規バイナリに置き換わり、正常に動作するようになった。

ハマりどころ: 実行中プロセスによるファイルロック

再インストール中、以下のようなエラーが出ることがある。

npm warn cleanup Failed to remove some directories [
  ...
  [Error: EPERM: operation not permitted, unlink '...\claude-code-win32-x64\claude.exe']
]

自分自身がまさにそのClaude Code CLIプロセス上で作業している場合(今回のようにObsidianプラグイン経由でセッションを継続している場合)、実行中のバイナリをWindowsが上書き・削除させてくれないために起きる。この場合は再インストール自体は(ほぼ)成功しているので、アプリ(今回はObsidian)を再起動してプロセスを終了させてから動作確認するとよい。

再発防止

- latest タグを追いかけると同様の公開タイミングのズレに再度当たる可能性がある。安定運用したいなら package.json やインストールスクリプトでバージョンを明示的に固定しておくのも手
- 同様の症状(CLIツールが「processが code 1 で終了した」とだけ報告してくる)が出たら、まず単体で <コマンド> --version を実行し、内部的なエラーメッセージを確認するのが調査の近道

まとめ

「プロセスが code 1 で終了した」という一見情報の少ないエラーでも、CLIを単体実行してみる → npmパッケージの中身を覗く → optionalDependencies のバージョン不一致に気づく、という手順で原因を特定できた。npmの optionalDependencies は失敗してもインストール自体を止めないため、マルチプラットフォーム対応パッケージを使うツールでは今後も同種の問題が起こりうる。同じ症状で困っている人の参考になれば幸いです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?