LoginSignup
6
1

More than 3 years have passed since last update.

RailsプロジェクトでもESLintがしたい!

Last updated at Posted at 2019-11-05

JS(ECMAScript)のlinterとしては、ESLintがあります。
しかしながら webpack*er* 環境下でこいつをしっかり動かそうとしてハマりました。

しっかりというのは、ESLintのairbnbルールのことなのですが、
こいつはimport先の存在性確認とかが必須になるようです。(import/no-extraneous-dependencies)

で、ESLint自体はこれを処理できないのですが、プラグインで拡張すればできるわけです。(eslint-plugin-import)
ESLintがwebpack環境でそれをやるには eslint-import-resolver-webpackを使うのが良さそうなのですが、
さて、コイツ、webpack.config.js を必要とします。

しかし、Railsプロジェクトには、webpack.config.js がありません。
コマッタ!

webpack.config.js をひねり出す

で、色々調べたところ、参考になる記事を見つけました。
https://system.blog.uuum.jp/entry/2019/04/12/111803

webpackerがwebpackをwrapする手法としては割合シンプルで、
結局は、config/webpack/[RAILS_ENV].js が求めるconfigの[Object]のようです。

ESLintを動かす文脈に戻ると、例えばdevelopment環境ならこう書けばいいはず。
で、実際動きました!

/.eslintrc.js
module.exports = {
  env: {
    browser: true
  },
  parserOptions: {
    sourceType: 'module'
  },
  settings: {
    'import/resolver': {
      webpack: {
        config: './config/webpack/development.js'
      }
    }
  }
}

ということはwebpackのデフォルト設定ファイル名でファイルを置いてあげて、上手く切り替えてあげれば、
webpackに依存するツールセットからは、設定ナシで正しく見えるのではないだろうか?
つまりこう。

/webpack.config.js
let env = process.env.RAILS_ENV || 'development'
module.exports = require(`./config/webpack/${env}.js`)
/.eslintrc.js
module.exports = {
  env: {
    browser: true
  },
  parserOptions: {
    sourceType: 'module'
  },
  settings: {
    // 設定ファイルの指定を省略
    'import/resolver': 'webpack'
  }
}

うごきます!!
プロジェクト構成に根差した複雑なlintもちゃんと走るので、とても良い感じ。
あと、この手法は、今後webpackに依存するような複雑なツールを入れる時にも、設定ファイルの位置を毎回指定しないで済むので、嵌り要素が減って良さそう!

前略、Railsの上より (あとがき)

TL;DR

Rails側からフロントエンド資産を利用方法として、"なんちゃら-rails"みたいなgemで入れるのがスタンダードだった時期がありましたが、それも今は昔1
JSが一つの言語系として隆盛するにしたがって、JSの資産はJSでhostされるようになり、
これを利用するためにはJSのビルドシステムと付き合うしかなくなりました。

で、Rails5からwebpacker2という、フロントエンドライブラリの資産をRailsでも使えるヤツーが導入されました3
webpackerは、RailsのフロントエンドビルドシステムであるSprocketとwebpackをRubyからするといい感じに協働させてくれるのですが、
Railsプロジェクトのconventionに合わせるために、config構成がちょっと普通と違う感じになっています。

で、それをみて、僕は勝手にJS側のツールと相性がイマイチだと思ってしまった4ワケなんですが、
解決策としては意外とシンプルなものが得られたので、記事にしました。

webpackerとガチで向き合うの今までつらかったんですが、整合性のある設定ファイルが存在することが理解出来たら、そこまでツライ相手でもないかもしれないですね、コレ。


  1. rails-assets.org (自動的になんちゃら-railsのgem作るヤーツ)とかも2016年にもう更新止まっています。 

  2. webpackするマン。 

  3. Rails5ではoptionalでしたが、Rails6ではもうデフォルトがコッチらしいですね。 

  4. 実際今回も、めちゃくちゃ嵌った。4時間ぐらい。 

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1