🌀

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 のパッケージディレクトリが何らかの理由で破損したことです。

  1. ファイルの欠落/破損: インストール時(またはアップデート時)にエラーが発生し、yoga.wasm のような重要なファイルが正しく配置されない、または破損した
  2. ENOTEMPTY エラー: アンインストール時(npm uninstall -g)に ENOTEMPTY: directory not empty エラーが発生したことから、古いインストールで生成されたファイルや残骸が残り、npm の正常な処理を妨害していたことが確認さた。

3. 解決策と手順

3.1. 解決の考え方:完全なクリーンアップ

npm による通常のアンインストールが失敗したため、手動で問題のディレクトリを完全に削除し、クリーンな環境で最新版を再インストールするというアプローチを取った。

3.2. 実施した対応手順

  1. 強制キャッシュクリア(予備的なクリーンアップ):

    npm cache clean --force
    
  2. 破損パッケージの手動による強制削除(最重要ステップ):

    • エラーメッセージよりパスを特定し、強制削除を実行。

    # 例として示されたパスの構造:
    TARGET_PATH="/Users/[USERNAME]/.nodebrew/node/v20.18.0/lib/node_modules/@anthropic-ai/claude-code"
    
    # 強制削除を実行
    sudo rm -rf $TARGET_PATH
    
  3. グローバルパッケージの再インストール:

    • クリーンな環境で最新版を再インストール。

    npm install -g @anthropic-ai/claude-code@latest
    
  4. 動作確認:

    • claude コマンドを実行し、正常に動作することを確認。

4. 今後の教訓

4.1. ENOTEMPTY エラーの対応

npm error ENOTEMPTY が発生した場合、それは npm がディレクトリ操作に失敗したことを示している。この場合、sudo rm -rf を使って原因となっているディレクトリを手動でクリーンアップするのが、最も早く確実な対処法。

4.2. グローバルパッケージの管理

特定のツール(例: claude)でエラーが発生した場合は、which <command> で実行されているバイナリのパスを確認し、競合がないかをチェックすることが重要。今回はパスの競合ではなく、インストールディレクトリそのものの破損が原因だった。

Discussion