ESLintインストール方法と基本
はじめに
ESLintを使うにはNode.jsのインストールが必要です。
Node.jsが入っているかまずは確認してみます。
node -v
自分の環境ではv18.17.1
(2024-01-27時点)がインストールされています。
ESLintインストール
- 自動セットアップ(✅おすすめ)
- 手動セットアップ
インストール実行前にpackage.json
ファイルが必要。なければnpm init
でファイルを作成できる。
インストール(自動セットアップ)
設定ファイルの自動生成、必要なパッケージのインストールも同時に行いながらインストールされる。対話型のプロンプトに沿って設定を進めていく。
npm init @eslint/config
ESLintがインストールが完了すると、設定ファイル(.eslintrc.*
)が作成される。ファイル形式は、途中でJavaScript, JSON, YAMLから選べる。
手動セットアップ
上記の自動セットアップの方法以外に、eslintのインストールのみを行って後から設定ファイルの構築など手動でセットアップすることも可能。
npm install --save-dev eslint
実行すると次のような出力になり終了。
added 92 packages, and audited 277 packages in 17s
54 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
package.json
の開発依存関係にeslint
が追加された。
"eslint": "^8.56.0",
次に、.eslintrc.*
ファイルを作る。
touch .eslintrc.js // JSON、YAML形式でもOK
.eslintrc
ファイルができたら設定を記述する。参照:Configure ESLint documentation
インストール確認
eslint
コマンドが使えるか確認。パスを通してないため相対パスでeslint
を指定して実行。
$ ./node_modules/.bin/eslint --version
v8.56.0
npx
コマンドでも実行できる。
$ npx eslint --version
v8.56.0
設定ファイルの詳細
自動セットアップの方法で作成された.eslintrc
ファイル。
// .eslintrc.cjs
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"overrides": [
{
"env": {
"node": true
},
"files": [
".eslintrc.{js,cjs}"
],
"parserOptions": {
"sourceType": "script"
}
}
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
}
}
Reactを使う時の注意
基本:
"rules": {
"react/react-in-jsx-scope": 0, // React 17以降は不要なので無効化
"react/jsx-uses-react": 0, // React 17以降は不要なので無効化
}
propTypesによる型チェックをしない場合:
"react/prop-types": 0
Ziggyパッケージを使っている場合:
route
メソッドが未定義としてエラーになる。
error 'route' is not defined no-undef
ESLintがグローバル関数を認識していないために未定義として扱われる。以下の設定で読み取り専用のグローバル変数として設定すると解決する。
"globals": {
"route": "readonly"
},
ESLintを実行してみる
ESLintを実行:
npx eslint [ファイル名]
ESLintでファイルを修正:
npx eslint [ファイル名] --fix
使用例
実際に、jsファイルに対してeslintを実行して解析してみます。
.eslintrc.cjs
にルールを追加してみる。
{
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "single"]
}
}
上記ルールに引っ掛かるテストJSファイルを用意。
// test-eslint/test.js
function testFunction() {
var message = "Hello, world"; // ダブルクォート
console.log(message) // セミコロン忘れ
}
testFunction() // セミコロン忘れ
npx eslint ディレクトリ/ファイル名
で実行。
npx eslint test-eslint/test.js
2:17 error Strings must use singlequote quotes
3:23 error Missing semicolon semi
6:15 error Missing semicolon semi
✖ 3 problems (3 errors, 0 warnings)
3 errors and 0 warnings potentially fixable with the `--fix` option.
(先頭の数字は「行番号:列番号」 を表している。)
--fix
オプションをつけて実行すると一部のエラーは自動で修正される。
npx eslint test-eslint/test.js --fix
複数ファイル一括実行
ESLintでチェックするファイル拡張子、ディレクトリ・ファイル群を指定して一括で実行できます。
npx eslint --ext .jsx --ext .js resources/js/
npx eslint --ext .jsx --ext .js resources/js/ --fix
ディレクトリ例:
# LaravelでReactを使うプロジェクトの例
laravel-project/
└─ resources/
└─ js/
├─ Components/
│ └─ ...
├─ Layouts/
│ └─ ...
├─ Pages/
│ └─ ...
├─ Utils/
│ └─ ...
├─ app.js
└─ bootstrap.js
package.jsonにスクリプト設定
package.json
のscripts
に次のように設定すると、npm run lint
で実行できます。
"scripts": {
"lint": "eslint --ext .jsx --ext .js resources/js/"
},
次に、--fix
オプションをつけて実行するケースを設定します。これで、npm run lint-fix
で実行できます。
"scripts": {
"lint": "eslint --ext .jsx --ext .js resources/js/",
"lint-fix": "npm run lint -- --fix" // 追加
},
--fix
オプションの手前の--
は引数の区切りを示しています。
# 形式
npm run [スクリプト] -- [引数]
補足知識
- Node.jsとは、JavaScriptの実行環境
- npmとは、Node.jsのパッケージ管理ツール(node package manager)
- npxとは、パッケージの実行を行うツール(node package executer)
npx
コマンドははnpmバージョン5.2.0から同梱されている。
ブラウザ上でしか実行できなかったJavaScriptはNode.jsによってOS上で実行できるようになった。
参考ソース
公式ドキュメント: