💎

Next.js×TypeScript×ESLint 

2024/03/08に公開

はじめに

ESLintは今まできちんと向き合ってこなかったので、今回思い腰をあげて取り組んでみました。
ESLintの基本設定だけでは勿体無いので、Nextjsを使っている皆さんの記事を参考に3つプラグインも導入しました。

プロジェクト作成

npx create-next-app@latest

途中で出てくる ESLintを使うか? の質問にYesで答える

✔ Would you like to use ESLint? … No / Yes

実行

プロジェクトが立ち上がり、package.jsonにnext lintが追加されているのを確認。

package.json
"scripts": {
    "lint": "next lint"
  },

lintコマンドを打って実行

npm lint

すると、以下の質問が出現。

? How would you like to configure ESLint? https://nextjs.org/docs/basic-features/eslint
❯  Strict (recommended)
   Base
   Cancel

Strictは基本のESLint構成に加えより厳格なCore Web Vitals ルールセットが含まれているとのこと。初学者向きらしいのでstrictを選択。

プラグインを追加

今回はより良いコードを目指すため、下の3つのプラグインを追加します

インポート

基本ESLint系はdev環境でしか使わないので--save-dev(あるいは-D)をつけて3つまとめてインポート。

zsh
npm install --save-dev @typescript-eslint/parser eslint-plugin-simple-import-sort typescript @typescript-eslint/eslint-plugin

設定

3つまとめて設定。

.eslintrc.json
{
  "extends": [
    "next/core-web-vitals",
    "plugin:@typescript-eslint/recommended"
  ],
  "plugins": [
    "simple-import-sort",
    "@typescript-eslint",
  ],
  // "@typescript-eslint/parser""をパーサーとして指定
  "parser": "@typescript-eslint/parser",
  // TypeScript プロジェクトの構成ファイルへのパスを指定
  "parserOptions": {
    "project": "./tsconfig.json"
  },

  "rules": {
    // ~~~~~~~ simple-import-sortのルール
    // 全てのファイルに対してチェック
    "simple-import-sort/imports": "error",
    "simple-import-sort/exports": "error",
    // すべてのインポートがファイルの先頭にあるかどうか
    "import/first": "error",
    // インポートの後に改行があるかどうか
    "import/newline-after-import": "error",
    // 同じファイルのインポートがあれば統合する
    "import/no-duplicates": "error"
  }
}

自動修正コマンド追加

pacakge.json
"scripts": {
    "lint": "next lint",
    "fix": "next lint --fix" //追加
},

おわり

1個1個噛み砕いて書くには時間がかかりましたが、ESLintへの理解が深まったのでよかった。
ただまだまだカスタムの余地はありそう。結構思ったより奥深い。

Discussion