まくろぐ
更新: / 作成:

何を説明するか

下記は、TypeScript を使った React アプリ実装用に用意した ESLint 設定ファイル (.eslint.yml) の例です。 トップレベルのプロパティとして、envextends などがありますが、これらが何を意味しているかをざっと説明します。

.eslint.yml(例)
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 環境で動作させるコードであれば nodetrue に設定します。 内部的には、選択した環境ごとに globals オプションの設定が行われます。

設定例
env:
  browser: true
  node: true
  es2021: true

parser: 使用するパーサー

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/export

parser@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/recommendedeslint:recommended より後に指定する必要があります(TypeScript 用の設定で上書きする必要があるため)。

sharable configuration のみを提供している npm パッケージには、eslint-config- というプレフィックスが付けられており、extends プロパティで指定するときは、このプレフィックスを省略できます。

  • eslint-config-airbnb パッケージ → airbnb
  • eslint-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 による共有設定で大まかなルール設定を行い、ここで個別ルールを細かく調整します。

関連記事

まくろぐ
サイトマップまくへのメッセージ