何を説明するか
下記は、TypeScript を使った React アプリ実装用に用意した ESLint 設定ファイル (.eslint.yml) の例です。
トップレベルのプロパティとして、env や extends などがありますが、これらが何を意味しているかをざっと説明します。
root: true
env:
browser: true
es2021: true
parser: '@typescript-eslint/parser'
parserOptions:
ecmaVersion: 2021
project: ./tsconfig.json
plugins:
- react
- react-hooks
- '@typescript-eslint'
extends:
- eslint:recommended
- plugin:react/recommended
- plugin:react-hooks/recommended
- plugin:@typescript-eslint/recommended
- plugin:@typescript-eslint/recommended-requiring-type-checking
rules:
react/react-in-jsx-scope: off各プロパティの説明
root: true
ESLint は、実行時のカレントディレクトリを起点にして、上位のディレクトリの設定ファイル (.eslintrc.*) を探していきます。
root: true の指定があると、この検索の振る舞いをそこで停止できます。
プロジェクトのトップディレクトリに置く .eslintrc.* には、この指定をしておくとよいです。
env: 実行環境の指示
どのようなグローバルオブジェクトを宣言なしで参照可能にするかを ESLint に知らせるための設定です。
例えば、Web ブラウザ上で動作させる JavaScript コードであれば browser、Node.js 環境で動作させるコードであれば node を true に設定します。
内部的には、選択した環境ごとに globals オプションの設定が行われます。
env:
browser: true
node: true
es2021: trueparser: 使用するパーサー
ESLint は標準で JavaScript コードのパースに対応していますが、TypeScript コード (.ts、.tsx) を扱えるようにするには、TypeScript 用のパーサー (@typescript-eslint/parser) をインストールして指定する必要があります。
parser: '@typescript-eslint/parser'parserOption: パーサーの設定
ESLint のデフォルトパーサーは ECMAScript 5 の構文で記述されたコードを想定します。
別のバージョンの ECMAScript 構文で記述したいときは、ecmaVersion でバージョンを設定します。
他にも、React アプリ内で JSX コードを使用する場合の指定などもここで行えます。
parserOptions:
ecmaFeatures:
jsx: true
ecmaVersion: 2021 # same as 12
sourceType: module # use import/exportparser に @typescript-eslint/parser を指定したのであれば、TypeScript 用の parserOptions 設定 を行います。
パーサーを変更すると、parserOptions で指定すべき項目や、それぞれのデフォルト値が変化することに注意してください。
例えば、jsx オプションは通常必要ありません(ファイルの拡張子が .tsx の場合は、デフォルトで JSX コードを認識します)。
parser: '@typescript-eslint/parser'
parserOptions:
ecmaVersion: 2021 # デフォルト値は 2018
project: ./tsconfig.json # プロジェクト内の型認識に使用plugins: 使用するプラグインの指定
ESLint プラグインを使用するには、あらかじめ npm でインストールした上で、ここに列挙しておく必要があります。さらに、実際にルールを有効化するには、extends なども指定する必要があります。
次の例では、npm でインストールした @typescript-eslint/eslint-plugin プラグイン、および eslint-plugin-react をロードするように指示しています。
plugins:
- react # means eslint-plugin-react
- '@typescript-eslint' # means @typescript-eslint/eslint-plugin上記の例からも分かるように、eslint-plugin というプレフィックスは省略できるようになっています(参考: Naming convention)。
extends: 共有設定の適用 (Sharable configuration)
複数のルールをまとめたコンフィギュレーション名を適用します。
ここで指定可能ものを sharable configuration オブジェクトと呼びます。
ESLint 標準のもの(eslint:recommeded など)以外は、npm パッケージをインストールすることで指定できるようになります。
extends:
- 'eslint:recommended'
- 'plugin:react/recommended'
- 'plugin:@typescript-eslint/recommended'内部のルール設定が重複する場合は、後から指定したものが優先されることに注意してください。
例えば、plugin:@typescript-eslint/recommended は eslint:recommended より後に指定する必要があります(TypeScript 用の設定で上書きする必要があるため)。
sharable configuration のみを提供している npm パッケージには、eslint-config- というプレフィックスが付けられており、extends プロパティで指定するときは、このプレフィックスを省略できます。
eslint-config-airbnbパッケージ →airbnbeslint-config-standardパッケージ →standard
npm パッケージのうち、ESLint プラグインと呼ばれているものは、その中のひとつの機能として sharable configuration を提供しています。
これを extends で指定するときは、次のようなフォーマットでコンフィグ名を指定します。
plugin:プラグインの省略名/コンフィグ名例えば、eslint-plugin-react プラグインが提供する recommended コンフィグを使う場合は、plugin:react/recommended と指定します。
@typescript-eslint/eslint-plugin プラグインが提供する recommended コンフィグを使う場合は、plugin:@typescript-eslint/recommended と指定します。
rules: 各ルールの設定
個々のルール単位で有効/無効にする設定を行います。
多くのケースでは、extends による共有設定で大まかなルール設定を行い、ここで個別ルールを細かく調整します。