Jest で「Cannot find module ‘ts-jest’」エラーを解決する

Jest と TypeScript を組み合わせたテスト環境で、次のようなエラーに遭遇することがあります。

Cannot find module 'ts-jest' from 'jest.config.ts'

あるいは、npm test 実行時にテストが起動せず落ちるケースもあります。これは、Jest が TypeScript を解釈するためのトランスパイラである ts-jest を見つけられない状態を示しています。

この記事では、このエラーの原因と、正しい設定・バージョン対応方法を解説します。

エラーの意味

ts-jest は Jest が TypeScript のコードをトランスパイルして実行できるようにするためのブリッジライブラリです。
Jest 本体には TypeScript の処理機能がないため、テストを実行するには ts-jest の設定が必須になります。

エラーメッセージ:

Cannot find module 'ts-jest'

これは Jest が node_modules 内で ts-jest モジュールを解決できないことを意味します。
つまり、依存関係のインストール漏れパス解決エラー、または 設定ファイルの不整合 のいずれかです。

主な原因と解決方法

原因1: ts-jest がインストールされていない

もっとも単純かつよくあるケースです。
Jest と TypeScript を導入したものの、ts-jest を追加していない場合、Jest は TypeScript ファイルを理解できません。

確認コマンド:

npm ls ts-jest

解決方法:

ts-jest を開発依存としてインストールします。

npm install -D ts-jest @types/jest

あるいは Yarn / pnpm の場合:

yarn add -D ts-jest @types/jest
# または
pnpm add -D ts-jest @types/jest

原因2: Jest と ts-jest のバージョン不整合

ts-jest は Jest のバージョンに強く依存します。
たとえば Jest 29 に対して古い ts-jest (v27など) を使うと、モジュール解決に失敗します。

バージョン対応表(2025年時点)

Jestts-jestTypeScript 対応
27.x27.x4.x
28.x28.x4.x / 5.x
29.x29.x5.x
30.x (alpha)29.x or next5.x

確認コマンド:

npm list jest ts-jest

対策:

npm install -D jest@29 ts-jest@29

または、TypeScript のバージョンも合わせて更新します。

npm install -D typescript@latest

原因3: jest.config.ts の設定ミス

Jest は jest.config.js または jest.config.ts を読み込みますが、設定内容が間違っていると ts-jest が正しく読み込まれません。

誤った例:

export default {
  preset: 'jest',
  testEnvironment: 'node'
}

正しい例:

export default {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleFileExtensions: ['ts', 'js'],
  transform: {
    '^.+\\.ts$': ['ts-jest', { isolatedModules: true }]
  }
}

また、jest.config.ts を使用する場合は TypeScript で構成を読み取れるようにする必要があります。
Node.js で ts-node が必要になるケースもあるため、うまく動作しない場合は .js に変換して試すのも手です。

代替として:

npx ts-jest config:init

このコマンドを実行すると、現在の環境に適した jest.config.js を自動生成してくれます。

原因4: グローバル環境での解決失敗

jest をグローバルインストール(npm install -g jest)している場合、ローカルにある ts-jest を認識できないことがあります。
この場合は、プロジェクトローカルに両方をインストール するのが安全です。

npm uninstall -g jest
npm install -D jest ts-jest

その上で、package.json にスクリプトを追加します。

{
  "scripts": {
    "test": "jest"
  }
}

原因5: ESM 環境での設定不一致

Node.js を ESM モード("type": "module")で使っている場合、ts-jest の設定が CJS 向けのままだと失敗します。

ESM 対応設定例:

export default {
  preset: 'ts-jest/presets/default-esm',
  testEnvironment: 'node',
  transform: {
    '^.+\\.ts$': ['ts-jest', { useESM: true }]
  },
  extensionsToTreatAsEsm: ['.ts']
}

package.json"type": "module" がある場合は、この設定を利用しましょう。

原因6: node_modules の破損やキャッシュ問題

依存関係の不整合でモジュールが見つからないケースもあります。
特に lock ファイルが壊れている場合に発生しやすいです。

対処法:

rm -rf node_modules package-lock.json
npm install

また、Jest のキャッシュをクリアして再実行するのも有効です。

npx jest --clearCache

まとめ

「Cannot find module ‘ts-jest’」エラーは、依存関係の不整合や設定ファイルの指定ミスが主な原因です。
解決のためには、以下の順で確認するとスムーズです。

  1. ts-jest がインストールされているか npm install -D ts-jest @types/jest
  2. Jest と ts-jest のバージョンが対応しているか
  3. jest.config.tspreset'ts-jest' になっているか
  4. グローバルではなくローカルで動作しているか
  5. ESM モードの場合は useESM: true を追加する

最終的には、npx ts-jest config:init を実行して自動生成される設定を使うのがもっとも確実です。

参考

タイトルとURLをコピーしました