インストール ESLint

まずはESLintを導入する

npm install --save-dev eslint

React Nativeには基本的に入っているという情報があったが、検索しても引っかからなかったので、上記コマンドでインストールした。

+     "eslint": "^8.49.0",

package.jsonを確認し、追加されたことを確認した。

Setting ESLint

次にESLintの設定をしていく。

npx eslint --init

上記コマンドで設定をスタートする。

You can also run this command directly using 'npm init @eslint/config'.
Need to install the following packages:
  @eslint/create-config@0.4.6
Ok to proceed? (y) y

まず、なんか追加でインストールしろと言われたのでインストールする。

その後、設定が始まる。

? How would you like to use ESLint? (Use arrow keys) // ESLintをどのように利用しますか?
  To check syntax only // 構文のみをチェック
  To check syntax and find problems // 構文をチェックし問題を見つける
> To check syntax, find problems, and enforce code style // 構文をチェックし問題を見つけ、コードスタイルを強制します

文法をチェックするだけではなく、自動で修正までを行ってもらうことにした。

? What type of modules does your project use? ... // プロジェクトでどの種類のモジュールを使用しますか?
> JavaScript modules (import/export) // JavaScriptモジュール (import/export)
  CommonJS (require/exports) // CommonJS (require/exports)
  None of these // どちらでもない

React Nativeでは主にimport/exportを使うのでJavaScript modules (import/export)を選択して次に進める。

? Which framework does your project use? ...
> React
  Vue.js
  None of these

React NativeReactを基盤にするのでReactを選択する

? Does your project use TypeScript? » No / Yes

使用するのでYesを選択する。

 Where does your code run? ...  (Press <space> to select, <a> to toggle all, <i> to invert selection)
    Browser
√ Node

React NativeNodeベースなのでNodeを選択する

? How would you like to define a style for your project? ... // プロジェクトのスタイルをどのように定義しますか?
  Use a popular style guide // 人気のあるスタイルガイドを使用
> Answer questions about your style // スタイルについて質問に答える

どのスタイルガイドを使うのか選択するか、勝手に決められるのも怖いので自身で選択するにした。

? What format do you want your config file to be in? ...
> JavaScript
  YAML
  JSON

ESLintの設定ファイルをどのように持つか。JavaScriptにした。

? What style of indentation do you use? ...
> Tabs
  Spaces

インデントをどう持つかはタブにした。

※ のちにスペースに変更する(いつもスペースなのに間違えた。)

? What quotes do you use for strings? ...
  Double
> Single

シングルクォーテーションかダブルクォーテーションかの選択、シングルにした。


? What line endings do you use? ...
>  Unix
 Windows

改行(行末の処理)の方法を選ぶもの、Unixを選ぶのが標準っぽいのでそれにならった。

 Do you require semicolons? » No / Yes

セミコロンの有無について、いつもつけないので、Noにした。

@typescript-eslint/eslint-plugin@latest eslint-plugin-react@latest @typescript-eslint/parser@latest
? Would you like to install them now? » No / Yes

設定を終えると、必要なパッケージを提案してくれたので、Yesでそれを受け入れる、

? Which package manager do you want to use? ...
> npm
  yarn
  pnpm

パッケージマネージャーを聞かれるので、使用しているマネージャーを選択する。

これで設定は完了した。

実行していく

次にpackage.jsonにスクリプトを登録する。

    "lint": "eslint .",

npm run lintで実行すると

   1:44  error  Extra semicolon                                    semi
   2:42  error  Extra semicolon                                    semi
   7:1   error  Expected indentation of 1 tab but found 2 spaces   indent
   8:1   error  Expected indentation of 2 tabs but found 4 spaces  indent
   8:5   error  'React' must be in scope when using JSX            react/react-in-jsx-scope
   9:1   error  Expected indentation of 3 tabs but found 6 spaces  indent
   9:7   error  'React' must be in scope when using JSX            react/react-in-jsx-scope
  10:1   error  Expected indentation of 3 tabs but found 6 spaces  indent
  10:7   error  'React' must be in scope when using JSX            react/react-in-jsx-scope
  11:1   error  Expected indentation of 2 tabs but found 4 spaces  indent
  12:1   error  Expected indentation of 1 tab but found 2 spaces   indent
  12:4   error  Extra semicolon                                    semi

無事にソースに対してLintが働いていることが分かった。

スクリプトに--fixオプションをつけることで、

  "lint": "eslint . --fix"

修正まで行ってくれ、エラーが3件まで減った。

   8:3  error  'React' must be in scope when using JSX  react/react-in-jsx-scope
   9:4  error  'React' must be in scope when using JSX  react/react-in-jsx-scope
  10:4  error  'React' must be in scope when using JSX  react/react-in-jsx-scope

ちなみにエラーは上記の通り。

こちらは.eslintrc.jsrulesに下記設定を追加することで回避できる。

	'react/jsx-uses-react': 'off',
	'react/react-in-jsx-scope': 'off',

これで無事にエラーがゼロ件になった。

アプリが無事に立ち上げることも確認できたのでESLintの導入は成功した。

インストール Prettier

次にPrettierをインストールする。

npm install --save-dev prettier eslint-plugin-prettier

ルートに.prettierrc.jsを作成し、下記内容を記載する。

module.exports = {
  semi: false,
  singleQuote: true,
  trailingComma: 'all',
};

ESLintへPrettierを設定する

.eslintrc.jsに下記のように反映する

	'plugins': [
		'@typescript-eslint',
		'react',
		+ 'prettier'
	],

rules'prettier/prettier': 'error',を追加する。

最後にスクリプトを登録する。

    "format": "prettier --check ."

実行していく

実行すると

[warn] .eslintrc.js
[warn] app.json
[warn] App.tsx
[warn] babel.config.js
[warn] globals.d.ts
[warn] prettierrc.js
[warn] styles.css
[warn] tailwind.config.js
[warn] tsconfig.json
[warn] Code style issues found in 9 files. Run Prettier to fix.

という結果に。

修正まで行ってくれるようにする。

    "format": "prettier --write ."

上記行うと修正まで行ってくれたけれど、そのあとにESLintを実行すると膨大なWarningが出るようになってしまった。

ESLintでセミコロン消してるのにPrettierでつけてたりしていて、見る感じ競合している。

prettierrc.js.が必要なことを忘れていた。後はESLintの設定と競合しないように設定を変えていけばできた。