最近、eslint/prettierの設定を共通パッケージ(eg. xxx-prettier-config/xxx-esling-config)に切り出すタイミングがあった。
これに関して、巷ではxxx-prettier-configとxxx-eslint-configというような形でツールごとに個別のパッケージを用意するのが一般的かと思うが、個人的にはこのようなコーディングルールの自動化に関連するツールの設定ファイルは、分けずに敢えてひとつのパッケージにするほうがよいのではないかと思っている。
使われているのかは知らないが、たとえばSalesforceだとこういうのがある。
このパッケージは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ツールを内製しているらしく、さすがという感じ。