ESLint
ESLintはJavaScript、TypeScript用の静的解析ツールです。
潜在的な不具合の発見やベストプラティクスへの追従、コードスタイルの統一など様々なルールを設定できます。
ESLintの実行方法
CLI
以下のコマンドで実行できます。
npm run lint:es
オプションとして、--fixを指定することで、コードのスタイルなど機械的に修正可能なものは自動で修正してくれます。
このアプリでは、--fix
を指定したnpm script
を用意しています。
npm run fix:es
エディタ、IDE
エディタやIDEにプラグインなどを設定することで、コーディング中にルール違反した箇所を明示してくれます。
Visual Studio CodeでESLintを有効にする方法については、Visual Studio Code - Lint、フォーマッタを参照してください。
その他のエディタやIDEについては、ESLintの公式ページにあるIntegrations - Editorsを参照してください。
適用しているルール一覧
このアプリでは、ESLintのルールを.eslintrc.jsに定義しています。
基本的には、Expoが提供しているeslint-config-universeの設定をベースとしています。 その他、eslint-plugin-react-hooksなど、推奨ルールを提供しているプラグインの設定も取り込んでいます。
ただし、一部のルールについては、推奨設定から変更しています。変更したルールについては、以降に記載するルール一覧の該当箇所に理由を記載しているので、そちらを参照してください。
適用している全てのルールは以下のとおりです。
ESLintのCLIで--print-configオプションを指定すると、適用されているルールを確認できます。
以下の例では、src/apps/app/App.tsx
に適用されているルールの一覧などが表示されます。
npx eslint --print-config src/apps/app/App.tsx
@typescript-eslint
TypeScriptに特化したルールを提供するプラグインです。
eslint
ESLintが提供するルールです。
eslint-plugin-deprecation
非推奨コードの使用を検出するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
deprecation/deprecation | error | 推奨設定ではこのルールはoffになっています。 しかし、非推奨コードの使用は自動的に検知したいためこのルールを設定しています。 |
eslint-plugin-eslint-comments
eslint-disable
のようなディレクティブコメントの使用に関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
eslint-comments/disable-enable-pair | error | - |
eslint-comments/no-aggregating-enable | error | - |
eslint-comments/no-duplicate-disable | error | - |
eslint-comments/no-unlimited-disable | error | - |
eslint-comments/no-unused-disable | error | 推奨設定ではこのルールはoffになっています。 しかし、不要にESLintがチェック対象外になっていないかを検知したいため、このルールを設定しています。 |
eslint-comments/no-unused-enable | error | - |
eslint-comments/no-use | error | 推奨設定ではこのルールはoffになっています。 しかし、 eslint-disable などを使用してしまうとファイル単位でESLintのチェック対象外となってしまいます。そのため、eslint-disable-next-line 、eslint-disable-line のみを許可して、チェック対象外にするスコープを限定するようにしています。 |
eslint-comments/require-description | error | 推奨設定ではこのルールはoffになっています。 しかし、ESLintのチェック対象外とした理由を必ず記載する運用にするため、このルールを設定しています。 |
eslint-plugin-import
ES moduleのimport
/export
構文に関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
import/export | error | - |
import/first | warn | - |
import/namespace | error | - |
import/no-default-export | error | 推奨設定ではこのルールはoffになっています。 しかし、このアプリではTypeScriptのコーディング規約でnamed exportを推奨しています。そのため、このルールを設定しています。 |
import/no-duplicates | error | - |
import/order | warn | - |
eslint-plugin-jest
Jestに関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
jest/expect-expect | warn | - |
jest/no-alias-methods | error | - |
jest/no-commented-out-tests | warn | - |
jest/no-conditional-expect | error | - |
jest/no-deprecated-functions | error | - |
jest/no-disabled-tests | warn | - |
jest/no-done-callback | error | - |
jest/no-export | error | - |
jest/no-focused-tests | error | - |
jest/no-identical-title | error | - |
jest/no-interpolation-in-snapshots | error | - |
jest/no-jasmine-globals | error | - |
jest/no-mocks-import | error | - |
jest/no-standalone-expect | error | - |
jest/no-test-prefixes | error | - |
jest/unbound-method | error | 推奨設定ではこのルールはoffになっています。 しかし、同様の機能を持つ @typescript-eslint/unbound-method をerrorレベルで設定しています。それをJest用に拡張したこのルールも設定すべきと考え、このルールを設定しています。なお、対象がテストファイル( *.test.ts 、*.test.tsx )の場合は@typescript-eslint/unbound-method をoffにして、このルールのみ適用するようにしています。 |
jest/valid-describe-callback | error | - |
jest/valid-expect | error | - |
jest/valid-expect-in-promise | error | - |
jest/valid-title | error | - |
eslint-plugin-node
Node.jsに関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
node/handle-callback-err | warn | - |
node/no-new-require | warn | - |
eslint-plugin-prettier
ESLintでPrettierを実行し、Prettierのルールに違反する箇所をESLintの警告やエラーとして検出するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
prettier/prettier | warn | - |
eslint-plugin-react
Reactに関するルールを提供するプラグインです。
eslint-plugin-react-hooks
React Hooksに関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
react-hooks/exhaustive-deps | warn | - |
react-hooks/rules-of-hooks | error | - |
eslint-plugin-strict-dependencies
Module
の依存性に関するルールを提供するプラグインです。
ルール | レベル | 推奨設定からの変更 |
---|---|---|
strict-dependencies/strict-dependencies | error | 推奨設定ではこのルールはoffになっています。 このアプリでは、機能レイヤーの依存関係に準拠した設定をしています。 |