みなさん、こんにちは、エンジニアの望月(@c5meru)です。
Railsをはじめて1年ちょっと経ったので、「メタプログラミングRuby」を読むなどしまして、改めて言語仕様を学び直したりしています。
設計やリファクタリングも、もうちょっと上手になりたいです!
さて、私はLintおばさんなので、今回もブログでLint導入のお話をさせていただきたいと思います。
今日は Rails 5.1 × webpacker の環境に、ESLintを導入したお話です!
1. ESLintのインストール
まずは、yarnでESLintのインストールを行います。
以下のコマンドで、ESLintと依存パッケージをインストールします。
$ yarn add eslint babel-eslint eslint-plugin-node eslint-plugin-import --save-dev
eslint-plugin-node と eslint-plugin-import については、現在弊社でnode modulesと ES modulesが混在しているため、両方入れています。。
2. .eslintrc.jsの設定
次に、設定ファイルである .eslintrc.js
を作成し、プロジェクトルートに配置します。
弊社の .eslintrc.js
は、おおむね以下のような内容になっています。
module.exports = { env: { browser: true }, extends: [ // airbnbのルールを導入、Reactを入れていない場合は「-base」アリの方 'airbnb-base', 'plugin:node/recommended' ], plugins: [ 'node' ], globals: { // 指定したグローバルオブジェクトに対する警告を除外する '$': true, 'google': true, 'ga': true, }, 'rules': { // 除外したルール // 開発環境ではdebuggerを許容する 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 'no-alert': 0, 'prefer-destructuring': 0, } }
3. .eslintignoreの設定
.eslintを行いたくないディレクトリがある場合、それらを除外するために.eslintignore
を作成し、プロジェクトルートに配置します。
.eslintignore
には、除外したいディレクトリを書いておきます。
app/javascript/vendor/*
4. ESLintの実行
eslintコマンドで実行できます。
$ ./node_modules/.bin/eslint --ext .js app/javascript
上記のコマンドでは、./node_modules/.bin/eslint
で、動かすeslintがあるディレクトリを指定し、
--ext .js
でlintをかけるファイルの拡張子を指定し、app/javascript
でlintをかけるディレクトリを指定しています。
5. ESLintの主なルール
ESLintのルールについてはこちらのドキュメントや
以下の記事などで参考にすることができます。
この記事でも、いくつか取り上げて説明してみたいと思います。
camelcase
変数や関数名はキャメルケースで命名・記述しましょう。
func-names
関数には名前をつけるようにしましょう。
function () { // 名前がないのでダメ // なにか処理 }
function hoge() { // これはOK // なにか処理 }
no-alert
alert
, confirm
, prompt
は使わないようにしましょう。
→弊社では許容しており、設定ファイルで警告を除外しています。
no-new
参照や格納のない
new Hoge();
のような記述ではなく、
var hoge = new Hoge(); Hoge();
のように記述しましょう。
no-param-reassign
関数のパラメータの中身を直接変更してはいけません。
function hoge(fuga) { fuga = 1; // これはダメ }
function hoge(fuga) { a = fuga; // これはOK }
no-var
var
ではなくlet
かconst
を使って宣言しましょう。
prefer-destructurin
分割代入を優先して使いましょう。
→弊社では許容しており、設定ファイルで警告を除外しています。
6. CIツールで動くようにする
ESLintが手元で動くようになったら、今度はCIツールで動くようにします。
弊社ではwerckerを使っており、ブランチにpushするたびにCIが走るようになっています。
そのフローの中にESLintも含めました。
7. 以前導入したcoffeelintを削除する
CoffeeScriptは、以前行った大手術により役目を終えたので、同時にcoffeelintも不要になりました。
coffeelintに関係する記述は、ESLintのものに置きかわっていることを確認して、取り除いてあげました。
さいごに
以上がESLint導入の流れになります。
新機能がどんどん追加されて、JavaScriptの方も少しずつ複雑になってきました。
ですので、Lintに準ずることも、どんどん自動化させて、効率的に開発をすすめていく所存です(`・ω・´)
エンジニアを募集しています
Ruby on Railsでの開発ができる方、募集しています!
詳しくは以下を見てみて下さい(`・ω・´)