💨

Next.js 15 で ESLint 9(Flat config)を使う

2024/10/25に公開

はじめに

先日リリースされた Next.js 15 では ESLint 9 に対応しました
互換性はまだ維持されているため、従来の設定ファイルのままでも動作しますが、せっかくなので Flat config を使ってみましょう。
create-next-app で作成したプロジェクトでは、依然として ESLint 8 のままです。)

なお、next/core-web-vitalsnext/typescript は ESLint 9 未対応のため、fixupConfigRules を使っています。
そのため内部的には ESLint 8 が使われています。

インストール

以下の追加の依存関係が必要です。

pnpm install -D @eslint/compat

設定ファイル

create-next-app --eslint --typescript で作成したプロジェクトの .eslintrc.json を以下のファイルに置き換えます。

eslint.config.cjs
const { FlatCompat } = require("@eslint/eslintrc");
const { fixupConfigRules } = require("@eslint/compat");

const flatCompat = new FlatCompat();

/**
 * @type {import("eslint").Linter.Config}
 */
module.exports = fixupConfigRules(
  flatCompat.extends('next/core-web-vitals'),
  flatCompat.extends('next/typescript')
);

Prettier と使う

公式ドキュメント に記載されている、Prettier と共存できる Flat config の設定は以下の通りです。

eslint.config.cjs
const { FlatCompat } = require('@eslint/eslintrc');
const { fixupConfigRules } = require('@eslint/compat');
const prettier = require('eslint-config-prettier');

const flatCompat = new FlatCompat();

/**
 * @type {import("eslint").Linter.Config}
 */
module.exports = [
  ...fixupConfigRules(
    flatCompat.extends('next/core-web-vitals'),
    flatCompat.extends('next/typescript'),
  ),
  prettier,
];

おわりに

従来の設定ファイルはいずれ使えなくなってしまいます。
この記事が移行の一助になれば幸いです。

GitHubで編集を提案
Romanark Tech Blog

Discussion