ESLintの設定継承システム

ESLintのv0.20.0からプロジェクト・ローカルに.eslintrcがある場合は~/.eslintrcから設定を読まなくなった。つまりESLintのデフォルトの設定をユーザー・レベルで調節する術がほぼなくなったと言って良い。そうなった理由はわからないこともないのだけど、改悪な気がしてならない。

確かにプロジェクト・ローカルの.eslintrcだけしか見ないようにすると、プロジェクト・メンバー間でのコーディング・スタイルが統一しやすくなる。しかしそれはいわゆるフォーマッターの役目で、リンターの役目ではないように思う。リンターの段階でコーディング・スタイルへの準拠を強いられると、普段それと違う書き方をしている人達にものすごいフラストレーションを与えることだろう。

強いられたスタイルのうちいくつかはEditorConfigなどの併用により自動的に対応することはできる。その状態で書かれたコードは確かにコーディング・スタイルに沿っているだろうが、普段インデント幅を半角空白2つに設定している人が半角空白4つのインデントを強いられた場合、普段通りの感覚で書くことができるわけがない。つまり成果物の体裁の保証ができる代わりに、その質の保証が失われるという結果になる。


とにかくどれくらい辛いのかと、僕はrulesフィールドを書かなくて済むように自分を調教する道をあえて選んで色々書いているところだ。率直な感想としてはこれを他の開発者に強いるのはちょっと僕にはできそうもない。

他の開発者との兼ね合いだけではなく、自分だけのプロジェクトの時もいちいち設定してあげなくてはならないことが辛い。そういう場合はプロジェクト・ローカルの.eslintrcを作らなければ良いようにも思えるが、実際にはまだ多くのプロジェクトでenvフィールドを使ってNode.js向けかブラウザー向けかを.eslintrcで設定してやる必要があり、そういう運用は難しいだろう。


ESLintでは将来的にはウィザードでルールを設定して.eslintrcを吐くことができるように考えられているようだ。~/.eslintrcの継承を元に戻して、強いルール付けを課したいプロジェクトではこのウィザードを使って全ルールを出力するというような形がバランスが良いのかなと思う。とにかくリンターとしては良いツールだとは思っているので、プロジェクトごとにルールを柔軟かつ手軽に設定できるようになってほしいものだ。