Skip to content

Prettier 3.0.0でのeslint実行エラー: prettier.resolveConfig.sync is not a function

エラーの発生条件

ESLint実行時に以下のエラーが発生するケース:

bash
npx eslint "src"

TypeError: prettier.resolveConfig.sync is not a function
Occurred while linting src/index.js  
Rule: "prettier/prettier"
    at /project/node_modules/eslint-plugin-prettier/eslint-plugin-prettier.js:138:40

エラーの原因分析

このエラーはPrettier 3.0以上を使用する環境で、互換性のないeslint-plugin-prettierのバージョン(v4.x)を利用している場合に発生します。根本的な原因は:

  • APIの非互換性変更: Prettier 3.0でresolveConfig.syncメソッドが削除され、代替API(resolveConfig)が導入された
  • モジュール間バージョン不一致:
    json
    "prettier": "3.0.0",         // v3系
    "eslint-plugin-prettier": "^4.2.1"  // v4系 ← 互換性なし
  • 依存関係の暗黙的破壊: Prettierを更新したのにプラグインを更新し忘れた場合に発生

解決策1:eslint-plugin-prettierのバージョンアップ(推奨)

最も確実な解決法はeslint-plugin-prettierをv5以上に更新することです。

bash
# npm の場合
npm install --save-dev eslint-plugin-prettier@5

# yarn の場合
yarn add -D eslint-plugin-prettier@5

バージョン確認ポイント

package.jsonが以下のように更新されていることを確認:

json
{
  "devDependencies": {
    "eslint": "^8.42.0",
    "eslint-config-prettier": "^8.8.0",
    "prettier": "3.0.0",
    "eslint-plugin-prettier": "^5.0.0" // v5以上に更新
  }
}

解決策2:Prettierのダウングレード(既存プロジェクト用)

プロジェクトの事情でPrettier 3.xへの移行が難しい場合の代替案:

bash
# Prettierを2.x系に固定
npm install prettier@2.8.8

# eslint-plugin-prettierはv4.xを維持
npm install eslint-plugin-prettier@4
json
{
  "devDependencies": {
    "prettier": "2.8.8",          // 2.x系に固定
    "eslint-plugin-prettier": "^4.2.1"  // v4系を維持
  }
}

ダウングレードの注意点

  • Prettier 3.xの新機能が利用できない
  • 長期的にはv5への移行が推奨

その他の確認事項

Prettier本体がインストールされているか確認

稀ですが、Prettier自体がインストールされていないケースがあります(エラー内容に反して実際に存在しない場合)。

bash
# インストール確認
npm list prettier

# 存在しない場合のインストール
npm install --save-dev prettier

関連ツールの互換性対応

pretty-quickなどPrettier 3.xに対応していないツールを使っている場合:

bash
# 非互換ツールの削除
npm uninstall pretty-quick

# lint-stagedの導入
npm install --save-dev lint-staged
js
module.exports = {
  '*.{js,ts}': ['eslint --fix', 'prettier --write']
}

問題解決の流れ図解

根本原因と予防策

このエラーはsemantic versioningにおけるメジャーバージョンアップの本質を示す好例です:

  1. メジャーバージョン変更(v2→v3) = 後方互換性のない変更
  2. 依存パッケージの連鎖更新: メインライブラリ更新時は関連プラグインの更新を必須
  3. 予防策:
    bash
    # メジャーアップデート時は個別にバージョン指定
    npm install prettier@latest --exact
    
    # 関連プラグインのリリースノート確認
    npx npm-check-updates -u

::: success 最終確認ポイント

  • CI環境ではpackage-lock.jsonyarn.lockを必ずコミット
  • Docker環境ではビルドキャッシュをクリアして再インストール :::

以上の対策でエラーは解決します。プロジェクトの状況に応じて適切なアプローチを選択してください。