ContentsフォーマッタとリンタPrettierESLintReactとReduxを学ぶために、開発環境というかプロジェクトテンプレートをスクラッチから作っている。(最終的な成果はGitHubに置いた。)前回はReactをセットアップした。(2018/11/21更新)フォーマッタとリンタプロジェクトにフォーマッタとリンタを導入する。フォーマッタはソースの体裁を整えるツール。フォーマッタを使うことで体裁が統一され、ソースが読みやすくなり、品質向上につながる。リンタはソースを静的解析して、潜在的なバグ、構造的な問題、体裁の問題を検出して警告してくれるツール。フォーマッタは体裁だけ整えるのに対し、リンタは論理構造にも制約を課せるので、コーディングスタイルがより統一できたり、ミスをしやすい論理構造が無くなったりして、品質向上につながる。JavaScriptのような動的型付け言語では、実行時まで顕在化しないバグを作りこみやすく、また実行時エラーの原因解析が静的型付け言語に比べて難しいので、フォーマッタとリンタでプログラム実行前に問題をできるだけ取り除いておくのが重要。チーム開発では、コードレビューでコーディンスタイルを見る必要がなくなり、効率化につながる。PrettierフォーマッタにはPrettierを使う。Prettierは2017年1月にリリースされた新しいツール。行の最大長を考慮した整形)ができる。opinionated(独断的)であることも特徴で、Prettierプロジェクトが推奨するフォーマットをほぼ強制し、設定がほとんどない。このため導入が簡単だけど、かゆいところに手が届かないこともある。JavaScriptの他、JSX、CSS、Markdown、GraphQLのフォーマットにも対応している。プロジェクトにインストールする。prettierv1.15.2が入った。設定はprettier.config.jsというファイルを書いてプロジェクトルートに置けばいい。オブジェクトのプロパティとか関数の引数を複数行で書いたときに、全行の末尾にカンマをつける};また、フォーマット対象外のファイルを指定するファイルである.prettierignoreをプロジェクトルートに置く。.prettierignore:node_modules/dist/node_modulesはnpmパッケージが入るディレクトリ。実際はnode_modulesはデフォルトで無視されるから書かなくていいんだけど。prettier-ignoreコメントを書くことで、ソースを部分的にフォーマット対象外とすることもできる。最後に、npmスクリプトを書く。formatを実行するとプロジェクト内ソースを一通りフォーマットできる。ESLintリンタにはデファクトスタンダードのESLintを使う。ESLintは2013年6月にリリースされたそこそこ歴史のあるツール。リンティングルールがプラガブルで、豊富なルールを細かく制御できるのが特徴。フォーマッタとしての機能もあるけど、そこはPrettierにまかせることにする。JavaScriptもJSXもリンティングできる。リンティングルールはAirbnbによるeslint-config-airbnbが有名なのでこれを使う。ESLintを導入するために、以下のパッケージをプロジェクトにインストールする。webpackからESLintを実行するやつ。ESLintルール設定集。eslint-config-airbnbのピア依存。import文を処理するためのESLintプラグイン。eslint-config-airbnbのピア依存。JSXを処理するためのESLintプラグイン。eslint-config-airbnbのピア依存。React特有のリンティングルールを追加するESLintプラグイン。Prettierが施すコード整形とコンフリクトするルールを無効にするESLintルール設定集。ピア依存をインストールするのにはちょっとコツがいるので、eslint-config-airbnbのドキュメントを参照すべし。今回は以下のコマンドでインストールした。eslint-config-prettierESlintはv4.19.1が入った。ESlintの設定は、設定ファイルである.eslintrc.jsをプロジェクトルートに置けばいい。'prettier'],};アプリの実行環境はブラウザなのでenv.browserをtrueにしている。document)を使うときにESLintに怒られないようになる。extendsはeslint-config-airbnbとeslint-config-prettierのルール設定を取り込むように書いている。prettierが最後でなければいけないことに注意。リンティング対象外のファイルを指定するファイルをプロジェクトルートに置く。.eslintignore:node_modules/*dist/*node_modulesはnpmパッケージが入るディレクトリ。実際はnode_modulesはデフォルトで無視されるから書かなくていいんだけど。eslint-disableコメントを書くことで、ソースを部分的にリンティング対象外としたり、特定のルールを無効化することもできる。webpackからESLintを実行し、エラーがなくならない限りビルド成功できないようにする。(後略)あとはnpmスクリプト書くだけ。lintを実行するとプロジェクト内ソースを一通りリンティングできる。以上で、フォーマッタとリンタを導入できた。次回はCSS周りの処理系を追加する。