React + TypeScript + ESlint + Prettier の環境構築【yarn】

npmよりyarn派の自分用に環境構築の備忘録

パッケージバージョン
node.js18.16.0
React18.2.0
TypeScript5.1.3
ESlint8.43.0
@typescript-eslint/eslint-plugin5.60.1
@typescript-eslint/parser5.60.1
Prettier2.8.8
目次

create react-app

VScodeのターミナルで

$ yarn create react-app プロジェクト名 --template typescript

npmの場合はnpx create-react-app プロジェクト名 --templete typescript のように
create の後に -(ハイフン)が必要
yarnの場合は -(ハイフン)をつけるとエラーになる。

プロジェクトのディレクトリ内にtsconfig.jsonがあるか確認する。
もしなければ、--template typescriptを入力忘れや誤字でTypeScript対応のReactになっていない。

構文チェックの ESlint と Prettier 導入

先程作成したプロジェクトのディレクトリに移動し、

$ yarn add -D eslint prettier eslint-config-prettier

これらは開発時だけ必要ので、-Dのオプションをつける。
eslint-plugin-prettier非推奨になっているので、推奨のeslint-config-prettierを導入する。

ESlint の初期設定

$ yarn 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.5
# Ok to proceed? (y) y

ターミナルでyarn eslint --initと入力すると、
You can also run ~(中略)~ OK to Proceed? (y)と質問される場合はyと答える。

√ How would you like to use ESLint? · style       
√ What type of modules does your project use? · esm
√ Which framework does your project use? · react
√ Does your project use TypeScript? · No / Yes
√ Where does your code run? · browser
√ How would you like to define a style for your project? · guide
√ Which style guide do you want to follow? · standard-with-typescript
√ What format do you want your config file to be in? · JavaScript
Checking peerDependencies of eslint-config-standard-with-typescript@latest
The config that you've selected requires the following dependencies:

eslint-plugin-react@latest eslint-config-standard-with-typescript@latest @typescript-eslint/eslint-plugin@^5.50.0 eslint@^8.0.1 eslint-plugin-import@^2.25.2 eslint-plugin-n@^15.0.0 eslint-plugin-promise@^6.0.0 typescript@*
√ Would you like to install them now? · No / Yes
√ Which package manager do you want to use? · yarn

2行目What type of modules does your project use?· esmJavaScript modules (import/export)を選択。
No / Yesの箇所はYesを選択。

質問に回答していくと下記の設定ファイル(.eslintrc)が生成される。

module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: [
    'standard-with-typescript',
    'plugin:react/recommended'
  ],
  overrides: [
    {
      env: {
        node: true
      },
      files: [
        '.eslintrc.{js,cjs}'
      ],
      parserOptions: {
        sourceType: 'script'
      }
    }
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  plugins: [
    'react'
  ],
  rules: {
  }
}

ESlintのTypeScript用パッケージを追加

$ yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser

.eslintrc.jsに設定を下記の通りに追記する。

module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: [
    'standard-with-typescript',
    'plugin:react/recommended',
  // TypeScript用プラグインを追加
    'plugin:@typescript-eslint/recommended',
    'plugin:@typescript-eslint/recommended-requiring-type-checking',
   // Prettierのコード整形に上書きするために extends の最後に記述
    'prettier',
  ],
  overrides: [
    {
      env: {
        node: true,
      },
      files: ['.eslintrc.{js,cjs}'],
      parserOptions: {
        sourceType: 'script',
      },
    },
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    // TypeScript用設定を追加
    tsconfigRootDir: __dirname,
    project: ['./tsconfig.json'],
  },
  // TypeScript用プラグインを追加
  plugins: ['react', '@typescript-eslint'],
  rules: {
    // React17から不要になった import React from 'react'; に対応
    'react/jsx-uses-react': 'off',
    'react/react-in-jsx-scope': 'off',
  },
  ignorePatterns: [
    'build/',
    'public/,',
    '**/node_modules/',
    '*.config.js',
    '.*lintrc.js',
    '/*.*'
  ],
};

.eslintrc.js の “extends” の箇所の最後に "prettier" を追記する。
ESLintのコード整形を無効化し、Prettierのコード整形に上書きするため extends の最後に記述する。

ESLintを適用しないファイルの指定をignorePatterns: []の項目に正規表現を用いて記述する。

ESlint 8.25.0以降 .eslintignore を作成して適応しないファイルを指定する方法は廃止で使えない。

Prettierの設定

プロジェクトのディレクトリ直下に .prettierrc を作成し設定を記述する。

{
  "singleQuote": true,
  "semi": true,
  "printWidth": 120,
  "tabWidth": 2
}

【VScode】保存時に自動的に静的解析とコード整形

VScodeにESlintとPrettierの拡張機能(プラグイン)をまだ導入していない場合は、
ESlintとPrettier – Code formatter をインストールする

settings.jsonの生成・開き方

.settings.json に設定を記述する。

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

reportWebVitals.ts の修正

srcディレクトリ内の reportWebVitals.ts に型定義が必要と旨のエラーがでるので下記の記述に修正する。

import type { ReportHandler } from 'web-vitals';

const reportWebVitals = (onPerfEntry?: ReportHandler): void => {
  if (onPerfEntry != null && onPerfEntry instanceof Function) {
    void import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
      getCLS(onPerfEntry);
      getFID(onPerfEntry);
      getFCP(onPerfEntry);
      getLCP(onPerfEntry);
      getTTFB(onPerfEntry);
    });
  }
};

export default reportWebVitals;
最後まで読んでくださりありがとうございました。シェア頂けると嬉しいです!
  • URLをコピーしました!
  • URLをコピーしました!

ABOUT ME

WEB制作者
スキル:HTML・Sass(FLOCSS)・JavaScript・jQuery・WordPress

コメント

コメントする

CAPTCHA

目次