sosukesuzuki.dev

August, 31 2020

はじめて自分で Prettier をリリースした

先日 Prettier のバージョン 2.1 をリリースしました。いままでコミット権限をもらってから1年ほど経ちますが自分でリリースをしたのははじめてでした。

こういう記録をあんまり見たことないような気がするので、やったこととかメンタルのことを書き残しておこうと思います。

やったこと

リリースチェックリストの Issue を作る

https://github.com/prettier/prettier/wiki/Release-Checklist にリリース前にやることリストのテンプレートがおいてあるので、それをコピーして Issue を作ってピンしておきます。(https://github.com/prettier/prettier/issues/8882)

基本的にはこのチェックリストにしたがって作業を進めていきます。

作業を整理する

Prettier は GitHub で管理されていて、バージョンごとの作業の管理にマイルストーン機能を使っています。

マイルストーンの運用に厳密なルールはなくて、メンテナが各々必要そうだなと思ったものをマイルストーンに入れています。なので、優先度の低いものや今はリソースが足りなくて取りかかれないものなどが入っていることがあります。そういったものをマイルストーンからはずして本当に次のリリースに必要なものだけを残します。

作業を完遂する

マイルストーンを整理したら、そこに入っている作業をこなします。今回のリリースでは、主に2つの作業がありました。

remark パーサーのアップデートに伴うテストの追加と、メンバーチェインのフォーマットの中途半端な改善のリバートです。

結構めんどくさい(難しくない)作業なんですが、頑張ってガガッと終わらせました。リバート作業の方は最初ミスってあとからまた直しました。いまのところそれが原因っぽいリグレッションは報告されてないから多分大丈夫だと思います。

リリースブログを用意する

https://prettier.io/blog/2020/08/24/2.1.0.html こういうやつを用意します。

https://github.com/prettier/prettier/pull/8932

Prettier のリリースブログは長くてしっかりしていると言われることがたまにありますが、全部の PR に Changelog をつけてもらっていてそれをスクリプトでくっつけているのであんまり記事の Author が書く量は多くありません。

でもプレビューしてみてコードブロック狂ってるとかシンタックスハイライトきいてなさそうみたいな不具合は修正する必要があります。

他のプロジェクトで新しい Prettier を実行してみてバグってないか確かめる

Prettier を使っているいくつかの OSS のコードベースに対して新しい Prettier を実行してみておかしなところがないかを探します。(https://github.com/prettier/prettier/issues/8882#issuecomment-671021183)

僕がそのリポジトリの勝手がわかっている方がやりやすいので、過去に何度か貢献したことのあるプロジェクトの中から良さそう(書かれてる言語とかが異なるもの)を選びます。今回はtypescript-eslint/typescript-eslintvuejs/vue-eslint-pluginexcalidrawを使いました。

この作業は結構めんどくさくて、それぞれフォークしてそのリポジトリの Prettier を更新して実行してフォークに PR 作ってみんなに共有して〜〜みたいな作業を手動でします。自動化したいのでよさそうな方法を考えています。

また、本当はもっと多くのプロジェクトに対してこれをやるべきだと思っているので、もし Vue(SFC)や Angular や GraphQL で書かれた Prettier を使っているよさそうな OSS をご存知の方がいたら教えて下さい。

見つけたバグを直す

↑ の作業で見つかったバグを修正します。

これが結構面倒。簡単に直せるやつならいいけど、今回はちょっと難しかった...。

TypeScript 4.0 の空気を読む

これは今回特有。2.1 準備中に TS4.0 の RC が出たり Babel が 7.11 で TS4.0 をサポートしたり typescript-eslint も一部の構文だけサポートしたり他のエコシステムの対応状況を見つつ、どこまでサポートをするべきかを考えます。

結局準備が長引いている間に TS4.0 の本リリースが行われたので、フルでサポートしました。これは依存しているパーサーを更新したりちょっとテスト書いたりすればいいから技術的には簡単です。

https://github.com/prettier/prettier/issues/8646

リリースする

そんな感じで、チェックリストの項目を全部クリアしたらリリースします。リリーススクリプトが用意されているので基本的にはそれを実行して表示される指示に従えば問題なくリリースできます。過去のメンテナーに感謝です。

一個おもしろい話としては、リリース準備中活動していたメンテナは僕含め誰も npm へのパブリッシュ権限をもっていなかったのでリリースができなかったタイミングがありました。結局過去のリリースを行った人に頼んで権限を付与してもらいましたが。

ちなみにめっちゃ緊張しました。「なんかミスったらやべえぞ!!!」と思ってましたが、結果としてはほとんど何事もなくリリースが完了しました。

メンタルっぽい話

自分はバグを直したり機能を追加したりコミュニケーションをとったりするのは楽しいと感じるから全く苦ではないのですが、リグレッションをチェックする作業とかリリースブログを用意する作業とか Issue を眺めて治ってるかチェックする作業とかはきつくて、「めんどくせーーー」と思いつつも僕がやらなかったら誰もやらないもしくはやるのがだいぶ遅れることになるので、頑張ってやりました。

自分は今大学が夏休みで、お仕事(業務委託)の稼働時間も少なくなっているので Prettier のための作業をする時間が結構確保できたけど、フルタイム社会人やりながらこういうことやってる人は時間の使い方が上手すぎるだろと思います。そういう人を目指して頑張ります。

なんか自分で色々とめんどくさいこともやってみて、お金のないコミュニティベースの OSS が持続しているのは偶然っぽいし、もし将来なにかしらの理由で億万長者になることがあったら OSS にお金をあげたいなあと思いました。

ただ、自分でリリースをすると達成感は明確にありました。数年前まで中学校の校庭でサッカーしてたやつのマシンから世界中で使われるソフトウェアがリリースされてるってすげえな...と感動しました。