前回、create-react-app で React アプリを作成したが必要最小限の構成となっていた。
快適にコーディングするため、まずは ESLint と Prettier を適用させてみたい。
環境
- VSCode 1.25.1
- Node 8.11.3
エディタは VSCode を使用する。
ESLint
yarn でガシガシいれていく。まず Standard スタイル
yarn add --dev eslint eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node |
続いて React と JSX
yarn add --dev eslint-plugin-react eslint-plugin-jsx-a11y |
そして .eslintrc.js
を作成する。
module.exports = { |
もし VSCode でESLint
拡張機能を入れていない場合は入れておこう。
すると ESLint が効くようになるので、js ファイルを開くとエラーが表示されるようになる。
Prettier
このままだとエラーは表示されるが自動的にフォーマットは掛けてくれないが、一個一個手動でエラーを潰すのは手間だ。
そこで Prettier を利用してフォーマットをかけることにする。 Prettier でフォーマットすることでいくつかのエラーは解決することができる。フォーマットに関わるエラーはこれで潰すと楽だ。
yarn add --dev prettier eslint-config-prettier eslint-plugin-prettier |
.eslintrc.js
同時に.eslintrc.js
も修正する。
module.exports = { |
追加のルールには prettier のフォーマットを指定するルール他、4 つ追加している。
react/jsx-uses-vars
このルールが適用されると、以下の JSX でimport App from './App'
がno-unused-vars
でエラーとなってしまう。
import App from './App' |
'react/jsx-uses-vars': 1
とすることでこのルールを回避する。
react/jsx-uses-react
JSX 自体を有効にするため、import React from 'react'
としてインポートする必要があるが、このルールが適用されるとやはりno-unused-vars
となる。
import React from 'react' |
これも同様に'react/jsx-uses-react': 1
でルールを回避できる。
space-before-function-paren
Standard ルールではfunction ()
のように関数名と()の間にスペースが必要になる。
render () { // OK |
しかし Prettier のフォーマットではここにスペースを開けてはくれない。VSCode の設定を頑張ればスペースを入れれないこともないが、できるだけシンプルに解決したいし、そもそもスペースがあろうがなかろうがあまり気にしていないので、ルール自体を無効化する。
.prettierrc.js
prettier の挙動をある程度設定するため、.prettierrc.js
も作成する。
module.exports = { |
作成すると言ったが、VSCode の場合は"prettier.eslintIntegration": true,
という設定でも良い。
この設定を true にすると.eslintrc.js
を参照して Prettier が挙動を決定する。つまり上記の.eslintrc.js
のように Prettier の挙動をルールとして定義しておけば、.prettierrc.js
不要で同様の挙動を取るようにすることができる。
こっちのほうがカンタンだ。
最後に VSCode でPrettier
拡張機能を入れていない場合は入れておこう。これで Prettier が有効になり、フォーマットができるはずだ。
ついでに
create-react-app
で生成されるコードは以下のように Component を継承しているが、Stateless Functional Component (SFC) に書き直してみる。
class App extends Component { |
とはいえ以下のように関数とするだけだ
export default () => ( |
それほど変わっていないが、render
関数が不要になったり、Component
を import しなくても良かったりするので、よりシンプルになったと思う。
さいごに
ESLint と Prettier を適用させたことで、スタイルチェックとフォーマットを使うことができるようになった。
これで安心(?)して React が書けるようになったネ!