🦔

ESlint + Prittierで自動整形する

2023/05/31に公開

新規プロジェクトにESlintとPrritierを導入して、自動整形できるようにする!

覚えるためのアウトプット用記事です
間違っていたり、おすすめの設定などあれば教えてください🙇‍♂️

ESlintとは

JavaScriptの静的解析ツールで
コード内の一般的なエラーやバグ、スタイルガイドの違反などを検出し、開発者に警告やエラーメッセージを表示する

インストール

https://eslint.org/docs/latest/use/getting-started

$ npm init @eslint/config

(上記コマンドを叩くと対話式での初期化が始まる)

ESlintに必要なパッケージ追加

必要なパッケージを追加する(プラグインや設定など)
公式ドキュメントや、npm、gitHubのREADMEをみて、
何をインストールすべきかや.eslintrcへ何を記載すればよいかを確認する

ベース

まずはベースになるパッケージを追加
eslint-config-airbnbが広く使われているため採用
(npmのWeekly Downloadsなどを参考にすると良い)
eslint-config-airbnbはTypeScriptをサポートしていないため、サポート用のパッケージを追加
eslint-config-airbnb-typescript

使用するフレームワーク用のeslintを追加

フレームワーク推奨のeslintが大体あるため、それをインストール

Prittierを追加

ESlintでチェックしたものを整形する

インストール

https://prettier.io/

https://www.npmjs.com/package/eslint-config-prettier
https://www.npmjs.com/package/eslint-plugin-prettier
→ 公式的には推奨ではないらしい

.prettierrcを編集

お好みで設定

{
  "bracketSpacing": true,
  "printWidth": 120,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "useTabs": false,
  "bracketSameLine": false
}

.eslintrcを編集

extends

ESLintの設定を他の設定ファイルや共有設定から継承するために使用される
あと勝ちするので、優先度の高いものを配列の最後に追記する

plugin

ESLintに対して拡張機能を提供するために使用される
基本的にextendsで継承したものに含まれることが多いが、明示的に使用するものを記載しておくと良い
こちらもあと勝ちするので、優先度の高いものを配列の最後に追記する

parserOptions

サポートしたいJavaScriptの言語オプションを指定する

rules

コードに適用するESLintルールを指定する
そのままだと厳しすぎるので、基本はいらないルールを削っていく
https://eslint.org/docs/latest/rules

今回は以下を設定する

  • no-console
  "rules": {
    "no-console": [
      "warn",
      {
        "allow": ["warn", "error"]
      }
    ]
  },

全ての設定を確認する

継承した設定など、何が含まれているかわからなくて何を書けばいいのかわからなくなってくるので、
一旦全ての設定を吐き出して確認してみる

$ npx eslint --print-config .eslintrc.json > eslint_config.txt

足りないものなどあれば適宜追加する

自動整形する

コマンドを実行する or エディタに拡張機能を入れる

コマンドで実行

# npx eslint [options] [file|dir|glob]
$ npx eslint --ext .js,.ts,.jsx,.tsx --fix src

オプションはお好みで
https://eslint.org/docs/latest/use/command-line-interface

エディタに拡張機能を入れる

拡張機能を入れるとエディタにエラーを表示して保存時などに自動整形できる
(以下はVSCodeの場合)
ESlint
Prittier

拡張機能設定例

settings.json
  "[typescript]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll.eslint": true
    },
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },

言語指定しないと、全てのファイルに適応されてしまうため注意

その他

.editerconfig

https://editorconfig.org/
異なるエディタや言語間で、フォーマットの一貫性を確保するために使用される設定ファイル

エディターごとのセッティングファイル

うまくいかない時、ここで何かをしていることが多い

Discussion