Runner in the High

技術のことをかくこころみ

pretter/eslintのルール設定パッケージをひとつにまとめる理由

最近、eslint/prettierの設定を共通パッケージ(eg. xxx-prettier-config/xxx-esling-config)に切り出すタイミングがあった。

これに関して、巷ではxxx-prettier-configとxxx-eslint-configというような形でツールごとに個別のパッケージを用意するのが一般的かと思うが、個人的にはこのようなコーディングルールの自動化に関連するツールの設定ファイルは、分けずに敢えてひとつのパッケージにするほうがよいのではないかと思っている。

使われているのかは知らないが、たとえばSalesforceだとこういうのがある。

github.com

このパッケージはeslint, prettier, tsconfigなどのルール設定をひとつのパッケージにまとめている。

理由

端的にいうと、prettierとeslintで類似したルール設定にまつわる変更に一貫性を持たせることができる。

具体的な例として quote-props というルールを例に出し、以下のパッケージとバージョンがそれぞれ存在しているとする。

パッケージ バージョン 設定値
prettier-config v0 quoteProps: consistent
prettier-config v1 quoteProps: preserve
eslint-config v1 "quote-props": ["error", "consistent-as-needed"]

上記のケースではprettier-config v1とeslint-config v1を併用してもらえればquote-propsに関してはeslint側でconsistent-as-needeをルールとして強制することができる。

しかし、これがprettier-config v0とeslint-config v1の併用になってしまうと、eslintとprettierのどちらを先に適用するかでコーディングスタイルから一貫性が失われてしまうことになり、どのconfigをどの組み合わせで使うべきか意識する必要がある。

というわけで、以下のようにeslint/prettierのルール設定をcoding-styles-configとしてパッケージにしてバージョンニングすれば、変更がアトミックになるので嬉しい。

パッケージ バージョン 設定値
coding-styles-config v0 (prettier) quoteProps: consistent
coding-styles-config v1 (prettier) quoteProps: preserve
(eslint) "quote-props": ["error", "consistent-as-needed"]

peerDependenciesを利用する手もあるが、インストール時にエラーが出るのが体験として微妙なので、やはりこのようにモノリシックなパッケージである方が良い気がする。

余談

なおGoogleに至ってはprettier/eslintをラップしたCLIツールを内製しているらしく、さすがという感じ。

github.com