PrettierのNode.jsサポートポリシーを決めたので紹介します
PrettierというソフトウェアはNode.jsで動作します。他のNode.jsで動作するソフトウェアと同様に、Prettierも、サポート対象のNode.jsのバージョンを決めています。
たとえば、Prettier v2.x は Node.js 10.13.0 以降のみで動作します。それより前の Node.js でももしかしたら動くかもしれませんが、それは想定されていません。CIでもテストしてません。
現在 Prettier v3.0 の開発を進めていて、どの Node.js までサポートしようか、という議論になりました。結論が出て、今後同じような議論を避けるためにポリシーを決めたので、理由と共に紹介しようと思います。
先に結論
https://github.com/prettier/prettier/wiki/The-policy-to-drop-Node.js-version に書いたとおりです。
私は複雑な条件を英語で書くことができないので、擬似コードで書きました。
ここには、その疑似コード内の英語の箇所を日本語に翻訳したものを掲載します。実際には、サポート対象を選ぶコードではなく、ドロップする対象のバージョンを選ぶコードです。
if (
(VERSION が EoL を迎えている) && (
(VERSION では使えない機能を使う必要がある /* 訳注: かつ polyfill の導入も困難である */) ||
(VERSION が EoL を迎えてから 1 年が経過している)
)
) {
drop(VERSION)
}
理由
もともと私は「EoL を迎えていればドロップしていいじゃん」という立場でした。この立場をとっていた理由は簡単で、メンテするのが(比較的)楽になるからです。
しかし、別のメンテナは「Node.jsが EoL を迎えたからと言って、それを使っているユーザーのことを忘れてはならない。(意訳)」という立場をとっていました。
たしかに、Node.jsのあるバージョンがEoLを迎えたということは、我々のユーザーがそのバージョンを使わなくなったということを意味しません。(本業のことを思い返すと耳が痛い話です)
とはいえ、そのためにずっと全ての Node.js をサポートし続けるは、明らかにメンテナーにとって負担になります。また、polyfill するのが難しい ECMAScript や Node.js の新しい機能をずっと使えなくなってしまいます。
それらの懸念を反映させたポリシーが上記の擬似コードです。
まず前提として EoL を迎えている必要があり、さらにそれから1年が経過している、あるいはどうしても使いたい新機能がある場合に限って、そのバージョンをドロップします。
このポリシーにしたがった結果 Prettier v3.0 ではすでに EoL を迎えているものの、 Node.js 14.x 系まではサポートするつもりです。
おわりに
Node.js 14 と Node.js 16 では、Prettierのメンテ負荷はそんなに変わらないので、今回に限ってはどっちでもいいですね。
Discussion