EsLintのRule、Configのライブラリについてまとめました
リンクも多用してるのでハブとして使って頂けると嬉しいです!
1. 背景
コーディングルールのチェックを極力リンターに任せたいなと思い、この度便利なルールを調査しました!
ESLint,typescript-eslintの設定はこちらで紹介していますのでご覧ください!
Eslintとtypescript-eslintを手動で設定してみる
2. EsLint
Version v8.57.0
recommended
抜粋します、便利なものばかりです✨
-
no-cond-assign
条件式で代入演算子を使用しない -
no-constant-condition
typoによって条件文が必ず通る、または通らなくなるということを防ぐ -
no-debugger
debuggerを書かないようにする -
no-dupe-else-if
if-else-ifチェーンの重複条件の禁止 -
no-duplicate-case
ケースラベルの重複を禁止する -
no-empty-character-class
正規表現で空の文字クラスを許可しない
recommended以外
以下はrecommended以外で便利なルールを抜粋して紹介します。
-
no-self-compare
双方がまったく同じである比較を許可しない
typoの可能性を考慮 -
no-template-curly-in-string
通常の文字列でテンプレート・リテラル・プレースホルダーの構文を無効にする
typoの可能性を考慮❌"${str}"
🟢`${str}`
-
no-useless-concat
リテラルやテンプレート・リテラルの不要な連結を禁止する。 -
no-unused-expressions
未使用の式を許可しない -
no-underscore-dangle
識別子の先頭にアンダースコアを使用しない -
no-sequences
カンマ演算子の使用禁止 -
no-restricted-globals
指定したグローバル変数の使用を許可しない -
no-nested-ternary
ネストされた3項演算子を禁止するconst foo = bar ? baz : qux === quxx ? bing : bam;
-
no-negated-condition
否定条件の禁止 -
no-multi-assign
連鎖した代入式の使用を禁止 -
no-magic-numbers
マジックナンバーの使用禁止 -
no-continue
continueステートメントの禁止 -
new-cap
コンストラクタ名は大文字で始まる必要がある -
max-statements
ファンクション・ブロック内で許可されるステートメントの最大数の強制 -
max-params
関数定義におけるパラメータの最大数の強制 -
max-nested-callbacks
コールバックがネストできる最大の深さを強制する。 -
max-lines-per-function
関数内のコード行数の上限を強制する -
max-depth
ブロックがネストできる最大深さを強制する -
max-classes-per-file
1ファイルあたりの最大クラス数を強制する -
init-declarations
変数宣言で初期化を要求するかしないか -
id-match
指定された正規表現にマッチする識別子を要求する -
id-length
識別子の長さの最小値と最大値を強制する -
id-denylist
指定された識別子を許可しない -
func-style
関数宣言または式の一貫した使用を強制する -
eqeqeq
=== と !== の使用を強制する -
default-param-last
デフォルト・パラメーターの位置を最後にする -
consistent-return
returnステートメントで常に値を指定するか、指定しないかを指定する -
complexity
プログラムで許容される最大のサイクロマティック複雑度を強制する -
accessor-pairs
オブジェクトとクラスでゲッターとセッターのペアを強制する -
curly
すべての制御文に一貫したブレース・スタイル(中括弧)を強制する
こちらで記事書きましたので良かったらご覧ください!
3. typescript-eslint
v7.1.0
recommended
recommendedはこちら
recommended以外
以下はrecommended以外で便利なルールを抜粋して紹介します。
-
array-type
配列には一貫してT[]またはArrayを使用する -
explicit-function-return-type
関数とメソッドに明示的な戻り値の型を要求する -
explicit-module-boundary-types
エクスポートされた関数やクラスのパブリック・クラス・メソッドでは、戻り値と引数の型を明示する必要がある -
no-confusing-non-null-assertion
混乱を招くような場所での非NULLアサーションを禁止する -
prefer-for-of
可能な限り、標準的なforループよりもfor-ofループの使用を強制する -
- 型、クラス名はPascalCase、変数名はcamelCaseのように命名規則の細かい設定ができる
- こちらで使ってみた記事書きましたので良かったらご覧ください!
-
no-unnecessary-boolean-literal-compare
真偽値リテラルに対する不必要な等号比較を禁止する -
no-unnecessary-condition
型が常にtruthyまたは常にfalsyである条件式を許可しない -
no-useless-template-literals
不要なテンプレート・リテラルを禁止する -
non-nullable-type-assertion-style
明示的な型キャストに対して NULL 以外のアサーションを強制する -
prefer-includes
indexOfメソッドよりincludesメソッドを強制する -
prefer-nullish-coalescing
論理和代入、チェーンの代わりにNull合算演算子の使用を強制する -
consistent-indexed-object-style
Record
と{[key:string]:string}
のスタイルをどちらに寄せるかです。 -
prefer-find
単一の結果を検索する場合、Array.prototype.filter()の後に[0]を続けるよりも、Array.prototype.find()の使用を強制する -
switch-exhaustiveness-check
リテラルの和として型付けされた値、または列挙型として型付けされた値に対するswitch文のcase漏れ、またはdefault句がないことを防ぐ
4. eslint-plugin-unicorn
v 51.0.1
100以上の強力なESLintルールがあるとのことです。
こちらの記事で紹介されていました
イチオシのルールも紹介してくださっています!
JavaScriptのコード品質をさらに高めるeslint-plugin-unicornのススメ
recommendedはこちら
最近追加されたルール
一部紹介します
どちらもrecommendedに入っています。
Disallow anonymous functions and classes as the default export
無名関数とクラスをdefaultのexportを許可しない
Disallow passing single-element arrays to Promise methods
単一要素の配列を Promise メソッドに渡すことを禁止する
5. eslint-plugin-import
no-cycle
循環 import の禁止
import/max-dependencies
モジュールに多くの依存関係(import文やrequire文)を持たせない
6. eslint-plugin-import-access
-
@package
とマークされた変数を同一ディレクトリ外のファイルからインポートすることを制限する - TypeScript Language Service Pluginとして機能し、このようなインポートの自動補完を防ぐ
こちらで解説してますので良かったらご覧ください!
7. eslint-plugin-strict-dependencies
使い方についてはこちらで調査しました。
eslint-plugin-import-access、dependency-cruiserとの使い分けを以下で調査しました。
8. eslint-plugin-eslint-comments
ESLintディレクティブコメントの追加ルールをまとめたものです。
こちらの記事で紹介されていました!
ESLint プラグイン紹介: eslint-plugin-eslint-comments
9. eslint-plugin-security
Nodeの脆弱性を診断するためのESLintルールです。
10. eslint-plugin-promise
JavaScriptのPromiseに関するベストプラクティスのルールです。
11. eslint-plugin-react
React固有のLintルールに特化しているそうです。
12. eslint-plugin-no-type-assertion
型アサーションの禁止
以前こちらで記事書きましたので良ければご覧下さい!
13. eslint-plugin-unused-imports
未使用のimport文を自動で削除します
こちらで紹介してますので良ければご覧ください!
14. config系
14.1. eslint-config-standard
ruleはこちら
14.2. eslint-config-airbnb
airbnbのコーディング規則を基にしているものです。
Reactを使用している場合
ruleはこちら
Reactを使用していない場合
eslint-config-airbnb-baseを使用
ruleはこちら(ES6版)
eslint-config-airbnb-typescript
eslint-config-airbnb,eslint-config-airbnb-baseをinstallした後にinstallするそうです。
詳細はこちら
15. configファイルの設定方法
16. 設定されていないルールを調べる
eslint-find-rulesを使いESlintの全ての項目を設定する
eslint-find-rulesを使うと設定されていないルールを教えてくれるそうです
17. 参考
- JavaScriptのコード品質をさらに高めるeslint-plugin-unicornのススメ
- ESLintのルールを全部手動で設定するのは大変だからやめておけ
- ESLintなんもわからんから調べた
- うわっ...私の.eslintrc、無駄が多すぎ...?
- React × TypeScriptにおけるESLintとPrettierの設定
- TypeScriptプロジェクトでディレクトリ単位のカプセル化をする
- React+TSプロジェクトで便利だったLint/Format設定紹介
- 8 ESlint plugins for your NodeJs app
- ESLint プラグイン紹介: eslint-plugin-eslint-comments
- awesomejs.dev eslint
- ESLint を使い倒す(おすすめルール紹介)
- 型アサーションをLintで禁止にしたい
- eslint発火時に不要なimportを削除する
18.最後に
弊社のコーディングルールも既にlintのルールに落とし込められているのが多くあったので使いたいと思いました!
他にもおすすめのものがありましたらぜひ教えて頂けるとありがたいです!🙏
今後も随時更新していきます