💨

PrettierのNode.jsサポートポリシーを決めたので紹介します

2023/07/01に公開

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 (
  (VERSIONEoL を迎えている) && (
    (VERSION では使えない機能を使う必要がある /* 訳注: かつ polyfill の導入も困難である */) ||
    (VERSIONEoL を迎えてから 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