eslintの設定ファイルに関するまとめ
はじめに
eslintの設定ファイルってかなりややこしいと思いませんか?
項目が多いので今までそれぞれが何を意味しているのかあまり深く考えずに使用してきました。
そんな設定ファイルについて簡単にまとめてみます。
ファイル形式
eslintの設定ファイルは.yml
、.json
、.js
、.cjs
のいずれかを指定できます。
個人的にはコメントアウトが行えて馴染みのある.js
が好きです。
公式ドキュメントはこちら。
v 9.0.0以降について
Warning We are transitioning to a new config system in ESLint v9.0.0. The config system shared on this page is currently the default but will be deprecated in v9.0.0. You can opt-in to the new config system by following the instructions in the documentation.
ドキュメントにも記載がありますがファイル形式はeslint.config.js
へ移行中でv 9.0.0
からはeslint.config.js
を使用する予定とのこと。現在の最新版は8.4.4
なので次のメジャーアップデートからはeslint.config.js
を使用することになりそうです。
eslint.config.js
の場合の記述方法についても既にドキュメントが用意されていました。
https://eslint.org/docs/latest/use/configure/configuration-files-new
sourceTypeがmoduleのプロジェクトではこちらが使用できるようですが、exportを使えるようになるのはいいですよね。
設定項目
それぞれの設定項目についてまとめます。
env
global変数を事前に読み込むための項目です。
https://eslint.org/docs/latest/use/configure/language-options#specifying-environments
下記の場合はブラウザで定義されている変数(documentなど)やES2021で用意されている変数をeslintが事前に読み込んでくれます。
"env": { "browser": true, "es2021": true, }
これだけではなんのこっちゃという感じなので例を挙げます。
後述するrurlesで"no-undef": "error"
(未定義の変数をいきなり呼び出すとエラーになる)を指定している場合にenvのbrowserをtrueに指定していないとdocumentを呼び出した際にerrorが発生します。
指定できる項目は多いですがbrowser、esXXXX、jestなどが使用頻度として高いのではないでしょうか。
parser
parserは下記のいずれかを使用しているプロジェクトの場合に設定が必要になります。
- Prisma
- TypeScript
- Babel
それぞれに指定する値が決まっていて下記で確認ができます。
https://eslint.org/docs/latest/use/configure/parser
parserOptions
https://eslint.org/docs/latest/use/configure/language-options#specifying-parser-options
構文解析時のオプションを設定できます。
主に使用するものはecmaVersion
とsourceType
です。
"parserOptions": { "ecmaVersion": "latest", "sourceType": "module" }
ecmaVersion
eslintがES5がまでの構文しかサポートしていないため、ES5以降の構文を使用している場合にはecmaVersionの指定が必要です。基本的にlatest
またはenvで指定した同じバージョンを指定しておけば良い。
sourceType
import/export文を使用している場合はsourceTypeにmodule
を指定する必要がある。
plugins
rulesを拡張するための設定項目。 eslintの拡張パッケージをインストールした場合はこちらに追加していく。
例えばeslint-plugin-react
をインストールして使用する場合は下記のように記載する。
"plugins": ["react"]
eslintのpluginは基本eslint-plugin-xxxx
で命名されているのでpluginsへ追加する際はeslint-plugin
の省略が可能。
extendsとの関係
後述するextendsに追加した項目から暗黙的にpluginsが追加されることもある。
eslint-plugin-react
はまさにその例でextendsにplugin:react/recommended
を追加した場合にpluginsへreact
の追加は不要となる。
※npmのインストールは必要
"plugins": [], "extends": ["plugin:react/recommended"]
extendsと併せてpluginsへの追加が必要か不要かはpluginによって変わるため、pluginのドキュメントを確認する必要がある。 また、こういった背景からpluginsとextendsは混同しがちなので、それぞれの役割を下記にまとめます。
項目 | 意味 |
---|---|
plugins | rulesで使用できるruleを拡張するための設定。 |
extends | eslintrcファイル自体を拡張するための設定。 |
extends
eslintrcファイル自体を拡張するための設定。 ここで追加された項目からeslintrcの各項目のデフォルト値が暗黙的に追加される。
例えばplugin:react/recommended
を追加した場合はparcerOptionsのecmaFeaturesが暗黙的に{ "jsx": true }
になる。
"parserOptions": { // 暗黙的に追加 // "ecmaFeatures": { "jsx": true } }, extends: ["plugin:react/recommended"]
extendsへの追加によって追加される項目については各pluginのドキュメントを確認する必要がある。
rules
eslintにwatchさせる項目を設定できる。 各ルールについては公式ドキュメントで確認ができます。
https://eslint.org/docs/latest/rules/
pluginで追加されるルールについては各pluginのドキュメントで確認ができます。
設定方法についても公式に詳細が記載されているので説明は割愛します。
さいごに
理解をややこしくしている原因は主に以下2点だと思いました。
- pluginsとextendsの違いがわかりづらい
- extendsの挙動(暗黙的に他の設定項目が追加されたりされなかったりする点)
また、pluginの数が多くてドキュメントを追いきれないのも理由としてあげられそうです。 概要だけ押さえてあとは都度、ドキュメントを確認するのが良いのではないかと思いました。