はじめに
これははてなエンジニアアドベントカレンダー2021 14日目の記事です。昨日は id:Windymelt さんのFreeBSDのZFSファイルサーバ再インストールRTAはーじまーるよー - Lambdaカクテルでした。
作ったOSSライブラリ
筆者はpytest-github-actions-annotate-failuresという、GitHub Actionsで落ちたテストの行にアノテーションを出力するpytestプラグインを公開しています。2021/12/14 8:31現在、GitHubリポジトリのスター数は40ちょっとで、たまにバグ報告や機能要望のissueが立っており、これまで自作して公開したライブラリの中では一番使われていると思います。
このライブラリについて、詳しくは以前書いた記事をご覧ください。
思うこと
作ったOSSライブラリがしばしば使われているのを目にしていて、思うことがいくつかあります。
全部自分でやらなくてよい
自作したライブラリなので、issueが立ったら全部自分で解決してしまおう、と思ってしまうかもしれません。ですが身体は有限なので、全てには対処できないことの方が多いでしょう。
自力で全部解決しようと意気込むのではなく、方針よさそうです、とコメントするぐらいがちょうどよいのかも、と思っているところです。自分は一人じゃないということを忘れずに、やってもらえる人に任せたり、必要に応じてリポジトリのcollaboratorを追加したりするとよいと思います。もちろん、気合が出たときにガッと実装してしまうならそれでもよいでしょう。
そういえば以前にいい記事を書いていたことを思い出しましたが、今も同じようなマインドでメンテナンスしています。
酔っ払ったまま修正PRを作って、めちゃくちゃ雑なコードでいちおう動いているけど、これではマージできないでしょう、しかし今は頭が回っていない!!! ということでhelp wantedのラベルを付けてから寝て、起きたら、ちゃんとした実装に直してくれるPRを作ってもらっていた。マージ権を持っているのが1人だからといって、酔っ払ったまま雑にマージボタンを押していたら雑な実装が世の中に出回っていたということで、それを未然に防げたのは大変ありがたい。たどたどしい英語で、サンキューです、修正を取り込んでリリースしましたって言いまくっている。
誰かに使ってもらえているコードを、さらに良くしてもらえるのはありがたい - 私が歌川です
知らないことがいっぱいある
私はこれまで、正直なところpytest自体は知っていたけどpytestプラグインの仕組みはよく知らずに作っていました。自分が想定したケースではそれらしく動いているので、いったんこれでpublishしてみよう、という感じでした。
いざリリースしてみると、想定していなかったケースのissueが報告されてきました。たとえば、サブディレクトリ内にテストの設定ファイルがあるとうまくアノテーションされない、Windowsだと動かない、といったものです。実装が素朴だったというのもあるとは思いますが、最初から全てのケースを想定して実装するのは大変なので、報告してもらえたのはありがたいと思います。
また、pytestプラグインという性質上、他のpytestプラグインと組み合わせて使ったときの挙動をよくしたい、というissueがしばしば立っています。これまであまりpytestプラグインを使っていなかったので、issueが作られるたびに、こんなプラグインもあるのか~と勉強になっています。テストフレームワークのエコシステムに貢献した分だけ還元されているような状態です。
どこまで取り込むのかは難しい
バグ報告や機能要望が来る中で、どこまで取り込むべきかは難しいな、と思うことがちょっと出てきました。バグ報告は大抵の場合は直せばよいと思いますが、機能要望については少し考えることがあります。pytest-github-actions-annotate-failuresという名前のpytestプラグインが何をやるべきで何をやらないのか、warningもアノテーションした方がよいのか、他に低コストで実現する方法があるならその方がよいのではないか、など考えながらissueを確認しています。
基本的にはどんな (行儀の良い) pytestプラグインと組み合わせても動けばよい、とは思っていますが、その先をうまく考えるのは難しいことがあります。別のプラグインとして開発した方がユーザーが幸せになれる、ということもあるかもしれません。
どうしても判断が難しい、ということになったらもっと詳しい人にメンテナを任せるというのも手だと思います。pytest-dev organization (pytestのコアメンバーのorganization) に移管しませんか、というissueが立っており、(ちょっと作業が停滞してしまっていますが) 基本的には移管する方向で検討しています。
おわりに
作ったOSSライブラリがちょっと使われていて、メンテナンスしていて思ったことを書いてみました。作ったものの性質 (ライブラリか、ソフトウェアか、など) によっても考えることが変わってくるかもしれませんね。
明日は id:masayosu さんです。