🌀
Claude Code が突然使えなくなったので対応した。
1. 概要
発生した現象
claude コマンド(@anthropic-ai/claude-code)を実行した際に、Node.js のモジュール読み込みエラーが発生し、コマンドが実行できない。
Error: Cannot find module './yoga.wasm'
環境
- パッケージマネージャー: npm (グローバル)
- 環境: mac (nodebrew 環境下)
2. エラーの背景と根本原因
2.1. エラーの背景:yoga.wasm と WebAssembly
エラーの原因となっている yoga.wasm は、Yoga というレイアウトエンジンの一部。
-
問題の構造:
claude-codeは内部でこの Yoga エンジンを利用しており、その.wasmファイルを 相対パス で読み込もうとしますが、ファイルが見つからないらしい。
2.2. 根本原因:破損したグローバルインストール
このエラーの主な原因は、グローバルインストールされた @anthropic-ai/claude-code のパッケージディレクトリが何らかの理由で破損したことです。
-
ファイルの欠落/破損: インストール時(またはアップデート時)にエラーが発生し、
yoga.wasmのような重要なファイルが正しく配置されない、または破損した。 -
ENOTEMPTYエラー: アンインストール時(npm uninstall -g)にENOTEMPTY: directory not emptyエラーが発生したことから、古いインストールで生成されたファイルや残骸が残り、npm の正常な処理を妨害していたことが確認さた。
3. 解決策と手順
3.1. 解決の考え方:完全なクリーンアップ
npm による通常のアンインストールが失敗したため、手動で問題のディレクトリを完全に削除し、クリーンな環境で最新版を再インストールするというアプローチを取った。
3.2. 実施した対応手順
-
強制キャッシュクリア(予備的なクリーンアップ):
npm cache clean --force -
破損パッケージの手動による強制削除(最重要ステップ):
- エラーメッセージよりパスを特定し、強制削除を実行。
# 例として示されたパスの構造: TARGET_PATH="/Users/[USERNAME]/.nodebrew/node/v20.18.0/lib/node_modules/@anthropic-ai/claude-code" # 強制削除を実行 sudo rm -rf $TARGET_PATH -
グローバルパッケージの再インストール:
- クリーンな環境で最新版を再インストール。
npm install -g @anthropic-ai/claude-code@latest -
動作確認:
-
claudeコマンドを実行し、正常に動作することを確認。
-
4. 今後の教訓
4.1. ENOTEMPTY エラーの対応
npm error ENOTEMPTY が発生した場合、それは npm がディレクトリ操作に失敗したことを示している。この場合、sudo rm -rf を使って原因となっているディレクトリを手動でクリーンアップするのが、最も早く確実な対処法。
4.2. グローバルパッケージの管理
特定のツール(例: claude)でエラーが発生した場合は、which <command> で実行されているバイナリのパスを確認し、競合がないかをチェックすることが重要。今回はパスの競合ではなく、インストールディレクトリそのものの破損が原因だった。
Discussion