Astro プロジェクトの ESLint Flat Config への移行
2024/04/22 に公開
ESLint v9 より旧 .eslintrc.*
ファイルのデフォルトでのサポートが廃止され、Flat Config がデフォルトとなった。この記事では、Astro プロジェクトの ESLint 設定を Flat Config に移行した際の手順を紹介する。
旧コンフィグの内容を整理する
移行前の設定ファイル:
まずは要らなそうな設定項目を削除する。Common JS は流石にもう書かないので、その設定を削除する。
Flat Config への移行
続いて、実際に Flat Config への移行を行う。Flat Config では設定ファイル名が eslint.config.js
に変更されたので、新たに eslint.config.js
を作成する。
typescript-eslint の移行
まず、最も重要そうな typescript-eslint
の設定を移行する。
公式ドキュメントの移行ガイド に従って、typescript-eslint
を新たに導入する。
旧コンフィグで使っていた、@typescript-eslint/parser
と @typescript-eslint/eslint-plugin
を削除する。
eslint.config.js
に typescript-eslint の設定を移行する。
eslint-plugin-astro の移行
eslint-plugin-astro
の設定を移行する。
eslint-config-prettier の移行
eslint-config-prettier
の設定を移行する。
.gitignore の内容を ESLint でも無視する
.gitignore
の内容を ESLint でも無視するように設定する。
CLI オプションの --ignore-path
は廃止されたので、eslint.config.js
の ignores
フィールドに無視するパスを追加する必要がある。しかし、これを手動で行うのは面倒なので、eslint-config-flat-gitignore
を導入する。
gitignore()
は一番最初に読み込むことが推奨されているので、他の設定よりも前に記述する。
グローバル変数の設定の移行
Flat Configでは、env
フィールドが廃止され、globals
フィールドでのみグローバル変数の設定が可能となった。これに伴い、env
フィールドで設定していたランタイム依存のグローバル変数を globals
フィールドに移行する。ただし、ランタイム依存のグローバル変数を全て手動で書くのは不可能なので、globals
パッケージ を利用する。
ここでは、ブラウザと Node.js 依存のグローバル変数を設定している。
TypeScript ファイルで no-undef
を無効化する
未定義変数のチェックは TypeScript 側で行うため、TypeScript ファイルでは ESLint の no-undef
ルールは無効化する。
We strongly recommend that you do not use the no-undef lint rule on TypeScript projects. The checks it provides are already provided by TypeScript without the need for configuration - TypeScript just does this significantly better.
ESLint を実行するスクリプトの変更
package.json
の lint
スクリプトを変更する。
VSCode の設定
ESLint の VSCode Extension で、Flat Config を有効化する。
おまけ(CommonJS から ESM への移行)
今回移行したプロジェクトでは、prettier等の設定ファイルを CommonJS で記述していた。しかし、今回の Flat Config への移行に伴い ESLint での CommonJS に対するコンフィグは削除した他、流石にもうコンフィグといえど CommonJS は書きたくないので ESM に移行する。
ついでに、ESLint のコンフィグファイルの名前が eslint.config.js
に変更されたのに合わせて、他のコンフィグファイルも .hogerc.cjs
から hoge.config.js
に名前を変更する。
おわりに
Flat Config では、設定ファイルが .eslintrc.*
から eslint.config.js
に変更され、設定の書き方も大幅に変更された。移行には手間がかかるが、新しい設定ファイルの書き方はより柔軟で、設定の共有が容易になった。設定ファイルが JS のみになったため、旧コンフィグでの extends: ["eslint:recommended"]
といった文字列での指定は無くなり、eslint.configs.recommended
のようにオブジェクトで指定するようになった。これにより、直感的に設定を追加・削除できるようになった。
少し前までは多くのプラグインが Flat Config に未対応であり移行は大変苦しかった。しかし現在では typescript-eslint など主要なプラグインのほとんどが対応しているため、移行はかなり容易になっている。
いつかは移行せざるを得ないので、早めに移行しておくことをおすすめする。
GitHub リポジトリ:
完成した eslint.config.js
: