# Claude Code「Cannot find module yoga.wasm」の対処法：原因は旧版

> 2.0.25 以前の npm 版 Claude Code が欠けたまま起動すると出ます。which -a claude で動くコピーを特定し、消して一つの経路で入れ直します。

- URL: https://blog.laozhang.ai/ja/posts/claude-code-cannot-find-module-yoga-wasm
- Published: 2026-10-16
- Updated: 2026-10-16
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ja/about)
- Topic: Claude Code
- Tags: Claude Code, yoga.wasm, トラブルシューティング, npm, インストール

---
## Cannot find module './yoga.wasm' の原因は 2.0.25 以前の版

`claude` や `claude doctor` を実行して次のように止まったなら、シェルが実際に起動しているのは、ファイルが欠けた古い JavaScript 版の Claude Code です。

```text
Error: Cannot find module './yoga.wasm'
Require stack:
- /Users/you/.nvm/versions/node/v20.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1420:15)
    ...
  code: 'MODULE_NOT_FOUND',
```

`yoga.wasm` は、Claude Code のターミナル画面（Ink）がレイアウト計算に使っていた Yoga というエンジンの WebAssembly 版です。npm に公開されたパッケージ `@anthropic-ai/claude-code` の中身を見ると、2.0.25 までは `cli.js` の隣に `yoga.wasm` が別ファイルとして入っていて、`cli.js` が起動時にそれを読み込みます。2.0.26（2025年10月23日公開）以降のパッケージにはこの別ファイルがありません。中身のバイト列を見る限り、Yoga の WebAssembly は `cli.js` の内部に取り込まれています（公式の説明ではなく、パッケージからの観察です）。その後、2.1.85 で Yoga は TypeScript 実装に置き換わり、2.1.113 からは npm 版の中身もネイティブバイナリになりました。読み込む別ファイルがない以上、2.0.26 以降の版でこのエラーは起こりようがありません。

このバージョン境界は公式ドキュメントには書かれておらず、npm に公開された各バージョンの中身（2.0.24・2.0.25 には `yoga.wasm` があり、2.0.26 にはない）から分かるものです。

したがって直し方は「足りないファイルを補う」ことではなく、**壊れた古いコピーを消し、新しい版を一つだけ入れる**ことです。`npm i yoga-wasm` のように似た名前のパッケージを入れても別物なので直りません。

ファイルが欠ける理由について、Anthropic の担当者は GitHub で、自動アップデートが途中で中断されると一部だけ更新された状態になり、`yoga.wasm` のような必要なファイルが欠けると説明しています（[GitHub の issue #7193](https://github.com/anthropics/claude-code/issues/7193)、2025年9月）。同じく担当者の説明として、インストーラーとアップデーターは複数プロセスの同時実行に対応していないこと（[issue #3172](https://github.com/anthropics/claude-code/issues/3172)）、`cli.js` だけを別の場所にコピーしても `yoga.wasm` などの付属ファイルがないと動かないこと（[issue #1103](https://github.com/anthropics/claude-code/issues/1103)）も挙がっています。

2026年になってもこのエラーに出会うのは、2025年秋より前の版がどこかに残っている環境です。考えられるのは、`DISABLE_UPDATES` で更新を止めたマシン、古いイメージを使い続けている CI や Docker、nvm や mise で Node を切り替えたあと古い Node の下に残ったコピーなどです。ここはパッケージの中身と更新設定の仕様からの推測で、事例を数えた結果ではありません。

## 検証環境：macOS arm64 で再現したことと、試していない分岐

「再現済み」と付けた手順は、2026年10月16日に macOS 26（Apple Silicon、arm64）、Node.js v24.11.0、npm 11.6.1 で実行したものです。手元のインストールに触れないよう、npm の `--prefix` で別フォルダを指定し、HOME も一時フォルダに切り替えて実行しています。

再現・確認できたこと：

- 2.0.25 を入れて `yoga.wasm` を削除すると（中断されたアップデートの模擬）、`claude --version`、`claude doctor`、通常の起動のいずれも `Error: Cannot find module './yoga.wasm'` で終了コード 1 になる。ファイルを戻すと `2.0.25 (Claude Code)` と表示される。
- 壊れた 2.0.25 の上から `npm install -g @anthropic-ai/claude-code@latest` を実行すると、2.1.301 のネイティブバイナリに置き換わって起動する。
- 公式インストーラー（`curl -fsSL https://claude.ai/install.sh | bash`）で 2.1.301 が `~/.local/bin/claude` に入る。PATH 未設定の警告も表示される。
- 公式インストーラー版が入っていても、壊れた npm 版が PATH の先にあると `claude --version` は yoga.wasm エラーのまま。古いほうのフォルダと起動用リンクを消すと 2.1.301 が起動する。

試していないこと：Windows、Linux、pnpm、mise、Homebrew で入れた Node、実際に中断された自動アップデート、ENOTEMPTY エラーそのもの、`npm uninstall -g` コマンド。これらに関わるコマンドは、Anthropic の公式ドキュメントか報告者の記述をもとに載せ、その場で出典を示しています。

## 手順1：which -a claude で動いているコピーを特定する

最初に、シェルがどの `claude` を起動しているかを確かめます。macOS と Linux では次のコマンドです（macOS で再現済み）。

```bash
which -a claude
```

複数行出たら、上の行ほど優先して使われます。一番上が、エラーを出しているコピーの候補です。Windows の PowerShell では `where.exe claude` が同じ役割を持ちます（[公式ドキュメントの重複インストール確認手順](https://code.claude.com/docs/en/troubleshoot-install#check-for-conflicting-installations)によるもので、未検証です）。

次にエラーの Require stack を見ます。末尾の `@anthropic-ai/claude-code/cli.js` があるフォルダが、壊れたコピーの場所です。`cli.js` が出ているのは JavaScript 版（npm の 2.1.112 以前）の印で、2.1.113 以降には `cli.js` 自体がありません。そのうえで `yoga.wasm` が見つからないというエラーなら、別ファイルを読み込む 2.0.25 以前の版で、そのファイルが欠けているということです。報告に実際に出ているパスは次のようなものです。

| Require stack のパスの例 | どこに入ったコピーか |
| --- | --- |
| `~/.nvm/versions/node/v20.x/lib/node_modules/@anthropic-ai/claude-code/cli.js` | nvm で入れた Node に npm でグローバルインストール |
| `/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js` | Homebrew で入れた Node に npm でグローバルインストール（Homebrew の cask 版とは別物） |
| `~/.npm-global/lib/node_modules/@anthropic-ai/claude-code/cli.js` | npm のグローバルインストール先を変更した環境 |
| `~/.local/share/mise/installs/node/22.19.0/lib/node_modules/@anthropic-ai/claude-code/cli.js` | mise で入れた Node に npm でグローバルインストール |

![which -a claude の一番上の行が起動中のコピーで、Require stack のパスの先頭から nvm、Homebrew、npm-global、mise のどこに入ったコピーかが分かることを示す図](https://blog.laozhang.ai/posts/ja/claude-code-cannot-find-module-yoga-wasm/img/find-running-copy.webp)

壊れたコピーは `claude --version` も `claude doctor` も同じエラーで止まるため（再現済み）、バージョンはそのフォルダの `package.json` で確かめます。パスは自分のエラーに出たものに置き換えてください。

```bash
grep '"version"' ~/.nvm/versions/node/v20.10.0/lib/node_modules/@anthropic-ai/claude-code/package.json
```

ほかにどんなコピーがあるかは、公式ドキュメントが挙げる次の3か所で分かります。

```bash
ls -la ~/.local/bin/claude
ls -la ~/.claude/local/
npm -g ls @anthropic-ai/claude-code
```

`~/.local/bin/claude` が `~/.local/share/claude/versions/` を指すリンクなら公式インストーラー版、`~/.claude/local/` は古いバージョンの Claude Code が作ったローカルの npm インストール、`npm -g ls` に出るのはいま有効な Node の npm グローバルです。`No such file or directory` はエラーではなく、その場所に何もないという意味です。nvm や mise では Node のバージョンごとにグローバルの置き場所が分かれるため、Require stack に出た Node のバージョンがいま有効なものと違うと、`npm -g ls` には出てきません。

## 手順2：壊れたコピーを削除する（~/.claude 本体は消さない）

削除の前に、開いている Claude Code をすべて終了します。インストーラーとアップデーターは複数プロセスの同時実行に対応していないためです。

壊れたコピーがいま有効な Node の npm グローバルにあるなら、公式の削除コマンドを使います（公式ドキュメントの手順。未検証）。

```bash
npm uninstall -g @anthropic-ai/claude-code
```

ここで `ENOTEMPTY` が出た場合は、後半の「npm error code ENOTEMPTY」の節に進んでください。

Require stack の Node のバージョンがいま有効なものと違う場合や、`npm uninstall` が効かない場合は、エラーに出たフォルダを直接消します。`lib/node_modules` の2つ上がそのコピーのインストール先で、同じ場所の `bin/claude` が起動用のリンクです。`ls -l` でリンク先が同じ `@anthropic-ai/claude-code` フォルダの中であることを確かめてから消します。パッケージのフォルダと起動用リンクを消す流れは再現済みです。

```bash
# 例：Require stack が ~/.nvm/versions/node/v20.10.0/lib/node_modules/@anthropic-ai/claude-code/cli.js の場合
ls -l ~/.nvm/versions/node/v20.10.0/bin/claude
rm -rf ~/.nvm/versions/node/v20.10.0/lib/node_modules/@anthropic-ai/claude-code
rm -f ~/.nvm/versions/node/v20.10.0/bin/claude
hash -r
```

`hash -r` は、シェルが覚えている `claude` の場所を忘れさせるコマンドです。新しいターミナルを開いても同じ効果があります。

手順1で `~/.claude/local/` が見つかった場合は、そのフォルダだけを消します。

```bash
rm -rf ~/.claude/local
```

Windows の PowerShell では `Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"` です（公式ドキュメントの手順。未検証）。

`~/.claude/` 本体は消さないでください。設定、許可したツール、MCP サーバーの設定、セッション履歴がここに入っていて、公式ドキュメントも削除するとこれらが失われると警告しています。今回消すのは、Require stack や `which -a claude` に出た具体的なパスだけです。

壊れていないコピーも、残すのは一つだけにします。公式ドキュメントの削除コマンドは次のとおりです（いずれも未検証）。

- Homebrew の cask 版：`brew uninstall --cask claude-code`（`claude-code@latest` を入れた場合はその名前）
- WinGet 版：`winget uninstall Anthropic.ClaudeCode`
- npm に統一する場合の公式インストーラー版：`rm -f ~/.local/bin/claude` と `rm -rf ~/.local/share/claude`

## 手順3：公式インストーラーか npm @latest のどちらか一つで入れ直す

入れ直す経路は、公式インストーラーと npm のどちらも公式に案内されています。公式ドキュメントは npm を非推奨とはしていませんが、重複を整理する場面では公式インストーラー版を勧めています。

| 項目 | 公式インストーラー | npm |
| --- | --- | --- |
| コマンド | `curl -fsSL https://claude.ai/install.sh \| bash` | `npm install -g @anthropic-ai/claude-code@latest` |
| Node.js | 不要 | 22 以上（古い Node では EBADENGINE 警告が出るが、インストールは完了し起動もする） |
| 置き場所 | `~/.local/bin/claude`（実体は `~/.local/share/claude/versions/`） | いま有効な Node の npm グローバル |
| 更新 | バックグラウンドで自動更新 | `npm install -g ...@latest` で更新し、`npm update -g` は使わない |
| 今回の再現 | 2.1.301 が入り起動 | 壊れた 2.0.25 の上から 2.1.301 に置き換わり起動 |

nvm や mise で Node をよく切り替えるなら、公式インストーラーのほうが扱いやすくなります。npm 版は Node のバージョンごとに別のコピーになるので、切り替えのたびに古いコピーが残りやすいからです。

### 公式インストーラーで入れ直す

macOS、Linux、WSL では次のコマンドです（macOS で再現済み）。

```bash
curl -fsSL https://claude.ai/install.sh | bash
```

Windows の PowerShell では `irm https://claude.ai/install.ps1 | iex` です（公式ドキュメントの手順。未検証）。

再現では、インストーラーが `Version: 2.1.301`、`Location: ~/.local/bin/claude` と表示したあと、次の警告を出しました。

```text
Native installation exists but ~/.local/bin is not in your PATH. Run:

  echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
```

この警告が出たら、表示されたコマンドをそのまま実行します。インストーラーは PATH を自分では書き換えません。Linux の Bash なら、公式ドキュメントでは書き込み先が `~/.zshrc` ではなく `~/.bashrc` です。

### npm のまま入れ直す

npm を使い続けるなら、`@latest` を付けて入れます。`sudo npm install -g` は、権限の問題とセキュリティ上のリスクがあるとして公式ドキュメントが使わないよう明記しています。

```bash
npm install -g @anthropic-ai/claude-code@latest
```

再現では、壊れた 2.0.25 の上からこのコマンドを実行すると `added 8 packages, removed 2 packages, and changed 1 package` と表示され、`claude` の起動用リンクが `bin/claude.exe`（macOS では arm64 のネイティブバイナリ）を指すようになり、`2.1.301 (Claude Code)` と表示されました。

ただし、上書きで直るのは、壊れたコピーと同じ Node の npm グローバルに入れたときだけです。nvm で別の Node に切り替えた状態で入れると、壊れたコピーは元の場所に残ります。

## 新しい版でも yoga.wasm エラー：古いコピーが PATH の先にある

公式インストーラーで新しい版を入れても、エラーが消えないことがあります。古い npm 版が PATH の先頭側に残っていると、シェルはそちらを先に起動するからです。公式インストーラーは、既存の npm 版を消しません。

再現では、公式インストーラー版の 2.1.301 を入れたうえで、壊れた 2.0.25 の npm 版を PATH の先に置きました（`repro` は検証用フォルダ）。

```text
$ which -a claude
repro/old/bin/claude
repro/home-native/.local/bin/claude
$ claude --version
Error: Cannot find module './yoga.wasm'
```

古いほうのパッケージフォルダと `bin/claude` を消して `hash -r` を実行すると、次のようになりました。

```text
$ which -a claude
repro/home-native/.local/bin/claude
$ claude --version
2.1.301 (Claude Code)
```

![壊れた npm 版 2.0.25 が PATH の先にあると yoga.wasm エラーのままで、古いフォルダと bin/claude を消して hash -r を実行すると公式インストーラー版 2.1.301 が起動する様子を比べた図](https://blog.laozhang.ai/posts/ja/claude-code-cannot-find-module-yoga-wasm/img/old-copy-first-in-path.webp)

「新しい版を入れたのに直らない」「ネイティブ版でも起きた」というときは、まずこの状態を疑ってください。GitHub の issue #7193 にも、ネイティブ版で起きたと書きつつ自分の入れ方に確信がなかった投稿者が、インストーラーを再実行してシェルを読み込み直したら直ったというコメントがあります。[Zenn の naruhiro さんの記事](https://zenn.dev/naruhiro/articles/8a883102262445)も、pnpm で入れ直したあとも nvm 側に npm で入れたコピーが PATH 上で優先され、yoga.wasm エラーが続いたという事例です。

## 手順4：which -a claude が1行、claude --version が表示されれば完了

入れ直しが終わったら、シェルの記憶をリセットして確認します（再現済み）。

```bash
hash -r
which -a claude
claude --version
```

`which -a claude` の結果が選んだ経路の1行だけで、`claude --version` が `2.1.301 (Claude Code)` のようにバージョンを表示すれば完了です。数字は更新のたびに変わり、2026年10月16日時点の npm の最新は 2.1.301 です。インストールの状態をもう少し詳しく見たいときは `claude doctor` を使います。セッションを開始せず、インストールと設定の診断だけを表示するコマンドです。

`which -a claude` が何も表示しない、または `command not found: claude` になる場合は、PATH 上に `claude` が一つもありません。手順3の PATH 設定を見直してください。プラットフォーム別の入れ方を最初から確かめたいときは、[Claude Code のインストール方法（全プラットフォーム対応）](https://blog.laozhang.ai/ja/posts/claude-code-install)が参考になります。

## 入れ直し中に出る ENOTEMPTY と native binary not installed

### npm error code ENOTEMPTY で uninstall や install が失敗する

`npm uninstall -g` や `npm install -g` の途中で、次のようなエラーが出ることがあります。

```text
npm error code ENOTEMPTY
npm error syscall rename
npm error path /home/you/.nvm/versions/node/v22.13.1/lib/node_modules/@anthropic-ai/claude-code
npm error dest /home/you/.nvm/versions/node/v22.13.1/lib/node_modules/@anthropic-ai/.claude-code-tVWAnUUt
```

npm が古いパッケージのフォルダを横に移せなかったという意味です。以前に中断された実行が残した `.claude-code-` で始まる一時フォルダが原因になります。[公式ドキュメントの ENOTEMPTY の対処](https://code.claude.com/docs/en/troubleshoot-install#npm-enotempty-during-update-or-reinstall)は次のとおりです（ENOTEMPTY は再現できておらず、未検証です）。

```bash
rm -rf "$(npm root -g)/@anthropic-ai/claude-code"
rm -rf "$(npm root -g)/@anthropic-ai/.claude-code-"*
npm install -g @anthropic-ai/claude-code
```

2行目で Zsh が `no matches found` と出したら、消す一時フォルダはなかったという意味です。エラーの `npm error path` の行が `npm root -g` の表示と違う場所を指している場合（nvm で Node を切り替えた後など）は、`npm root -g` を使わず、エラーに出ているフォルダを消します。Windows の PowerShell 用のコマンドも同じページにあります。

[Zenn の bluegrass さんのスクラップ](https://zenn.dev/bluegrass/scraps/fda26a9e82e8dc)では、mise で入れた Node 22.19.0 で `npm uninstall -g` が ENOTEMPTY になり、残っていた `.claude-code-` の一時フォルダを消したらアンインストールと再インストールが通ったと報告されています。

### Error: claude native binary not installed. と表示される

現在の npm パッケージは、インストール時のスクリプト（postinstall）とプラットフォーム別の optional 依存でネイティブバイナリを配置します。`--ignore-scripts`、`--omit=optional`、一部の pnpm 設定でこの処理が飛ばされると、yoga.wasm とは別の次のメッセージが出ます。

```text
Error: claude native binary not installed.
```

対処は、そのフラグを外して入れ直すか、メッセージに出ている `node node_modules/@anthropic-ai/claude-code/install.cjs` を実行することです。グローバルに入れた場合は、パスを `npm root -g` が示す場所に合わせます。`.npmrc` に `optional=false` があると optional 依存が落とされるため、その確認も必要です（[公式ドキュメントの native binary not found の節](https://code.claude.com/docs/en/troubleshoot-install#native-binary-not-found-after-npm-install)。pnpm は未検証）。

Zenn の naruhiro さんの記事（2025年6月）にある `pnpm approve-builds -g` は当時の JavaScript 版での手順で、現在の版でこのメッセージが出たときは上の公式の対処が先です。

## 翌日また yoga.wasm エラーになる：更新経路を一つに保つ

いったん直っても次の日にまた壊れた、という報告は GitHub の issue #7193 などに複数あります。セッションを開いたまま放置した、ノートパソコンを閉じていた、といった状況で起きており、担当者の説明どおり、古い JavaScript 版の自動アップデートが途中で止まったものと考えられます。2.0.26 以降の版に一本化すれば、`yoga.wasm` という別ファイル自体がないので同じ壊れ方はしません。

再発を防ぐために、次の点を守ります。

- インストール経路は一つだけにする。公式インストーラー版と npm 版、npm と pnpm を併用しない。
- npm 版は `npm install -g @anthropic-ai/claude-code@latest` で更新し、`npm update -g` は使わない。公式ドキュメントによると、`npm update -g` は最初のインストール時のバージョン範囲に従うため、最新まで上がらないことがあります。
- `sudo npm install -g` は使わない。
- 入れ直しや更新の前に、開いている Claude Code をすべて終了する。
- nvm、mise、Homebrew などで Node の管理方法を変えたら、`which -a claude` を実行して1行だけか確かめる。

バージョンを固定している環境では、固定先の見直しも必要です。`DISABLE_UPDATES` を設定すると、手動の更新も含めてすべての更新経路が止まります。固定先が 2.0.25 以前なら、壊れたファイルは自動では直りません。CI や Docker のイメージで古いバージョンを指定している場合も、指定を現在の版に上げてイメージを作り直します。

## 直らないときに GitHub の issue を出す前に確認すること

ここまでの手順で直らないときは、次の順に確かめます。

1. Require stack のパスが、`which -a claude` に出たどのパスとも対応しない場合は、古いインストーラーが残した `claude` のエイリアスを疑います。公式ドキュメントによると、`claude doctor` と `claude update` は `~/.zshrc`、`~/.bashrc` などのシェル設定に古い `claude` エイリアスが残っていないかを調べます。`alias claude` を実行して何か表示されたら、その行をシェル設定から消します（未検証）。
2. VS Code の拡張機能の中だけで失敗する場合は、拡張機能が自分専用の CLI を持っているため、ターミナルとは別に切り分けます。[Claude Code が VS Code で動かない時の切り分け](https://blog.laozhang.ai/ja/posts/claude-not-working-in-vscode)を参照してください。
3. yoga.wasm ではなく終了コード 1 だけが出ている場合は、[Claude Code process exited with code 1 の切り分け](https://blog.laozhang.ai/ja/posts/error-claude-code-process-exited-with-code-1)のほうが近い症状です。

`which -a claude` が1行だけで、そのコピーが 2.0.26 以降なのに yoga.wasm エラーが出るなら、パッケージの中身と矛盾するので個人の環境だけでは解決できません。2026年10月16日時点で、2026年に入ってからこのエラーを報告する新しい issue は Claude Code の GitHub リポジトリにありません。この状態になったら、`which -a claude` の結果、エラー全文、OS、`node --version` の結果を添えて [anthropics/claude-code の GitHub issue](https://github.com/anthropics/claude-code/issues) に報告してください。

## yoga.wasm エラーに関する質問

### yoga.wasm を npm で別にインストールすれば直りますか？

直りません。`yoga.wasm` は 2.0.25 以前の Claude Code のパッケージに別ファイルとして入っていたもので、`yoga-wasm` など似た名前のパッケージとは関係がありません。壊れたコピーを消して、2.0.26 以降の版を一つだけ入れ直すのが対処です。

### 公式インストーラー版（ネイティブ版）でも yoga.wasm エラーは出ますか？

公式インストーラー版は単体のバイナリで、`cli.js` も `yoga.wasm` も使いません。Require stack に `cli.js` が出ているなら、実際に起動しているのは別にある JavaScript 版（npm 版）です。`which -a claude` で、古い npm 版が公式インストーラー版より上に出ていないか確かめてください。

### Claude Code を削除すると設定や会話履歴も消えますか？

`npm uninstall -g`、`~/.claude/local` の削除、公式インストーラー版の削除のどれも、設定と履歴のある `~/.claude/` 本体には触れません。消えるのは `~/.claude/` や `~/.claude.json` そのものを削除したときです。ここまでの手順に、それらの削除は含まれていません。

## 参考資料

本文で参照している外部ページを、登場順に並べています。最終更新日：2026-10-16。

- [GitHub の issue #7193](https://github.com/anthropics/claude-code/issues/7193) (github.com)
- [issue #3172](https://github.com/anthropics/claude-code/issues/3172) (github.com)
- [issue #1103](https://github.com/anthropics/claude-code/issues/1103) (github.com)
- [公式ドキュメントの重複インストール確認手順](https://code.claude.com/docs/en/troubleshoot-install) (code.claude.com)
- [Zenn の naruhiro さんの記事](https://zenn.dev/naruhiro/articles/8a883102262445) (zenn.dev)
- [Zenn の bluegrass さんのスクラップ](https://zenn.dev/bluegrass/scraps/fda26a9e82e8dc) (zenn.dev)
- [anthropics/claude-code の GitHub issue](https://github.com/anthropics/claude-code/issues) (github.com)
