🍎

Turborepoのapps配下のリポジトリでESlintが効かなかった時にやったこと

2024/11/18に公開

はじめに

Turborepoのpackages/eslint-config配下にファイルを作って各リポジトリにESlintを反映させようと思ったのですが、うまくいかなかったので、その時に行ったことを書きます。

構成はこちらです。

.
├── apps/
│   └── mobile/
│       ├── .eslintrc.js //ESlintの設定ファイル
│       └── ... (その他のファイル)
├── packages/
│   └── eslint-config/
│       ├── base.js //ベースとなるESlintの設定ファイル
│       └── expo.js //expoのみのEslintの設定ファイル

ESlintが効かなかった時にやったこと

下記の2つは頻繁に行いましょう

  • npm run dev等で一度アプリを立ち上げてみる
  • VScodeを再起動する(⌘ + P → >reload)

まず、rulesに'no-console': 'warn', などをデバッグように入れて、効いてるか確認したいフィルにconsole.logを入れてVSCode上に表示されるか確認しましょう。
効いていたらこんな感じにwarningが表示されるはずです。

それでも効かなかった時は、eslintが設定されているか下記コマンドで確認しましょう。

$ npx eslint --print-config apps/mobile/app/index.tsx //ESlintが効いてるか知りたいファイル

今回は下記のようなログが表示されました。

Oops! Something went wrong! :(

ESLint: 8.57.1

Error: ESLint configuration in .eslintrc.js » @repo/eslint-config/expo.js is invalid:
	- Property "rules" is the wrong type (expected object but got `[{"no-console":"warn"}]`).

原因は、下記のように配列で書いてしまっていたことでした。

rules: [
  { 'no-console': 'warn' },
];

こちらを修正し、VScodeを再起動、npm run devで再度立ち上げてみたら直りました🎉

それでもうまくいかない時

Turborepoは、packages/eslint-configというフォルダがあるので、そこに各ディレクトリの.eslintrc.jsを継承しています。そこの継承がうまくいっていない可能性もあるので、全てのESlintrc系のファイルにrulesの'no-console': 'warn'を入れて、どこまでが効いているかを確認するのも一つの手です。

継承先が効かなかった時、継承している方に一度聞かせたいルールを書いて効かせてから消すともどることもあります。(何でかはわからない)

npm installして、VSCodeをリロードさせるのも忘れないでくださいね!

Discussion