私が歌川です

@utgwkk が書いている

作ったOSSライブラリが使われつつあるときに思うこと

はじめに

これははてなエンジニアアドベントカレンダー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が立っており、これまで自作して公開したライブラリの中では一番使われていると思います。

このライブラリについて、詳しくは以前書いた記事をご覧ください。

blog.utgw.net

思うこと

作った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 さんです。

お風呂が沸きました

自宅に給湯器リモコンが登場したので使ってみたら、思い描いていた曲が流れたので大喜びしていた。YouTubeで公式チャンネルが出していた。

www.youtube.com

給湯器リモコンの音源だけを集めた動画があって一生聞いていたい。自動生成の字幕がおもしろかった。字幕のブレをヒップホップに活用できるかもしれない。

www.youtube.com

給湯器でフロアを沸かせる動画を探していたのだけどTwitterのブックマークに保存していたので助かった。

ナナヲアカリワンマンライブツアー「NNNN」大阪公演に行った

big-step.co.jp

現地でのライブに行くのは1年以上ぶりだと思う。このブログに記録が残っているものだと去年の1月なのでギリギリ2年ぶりではないぐらい。

チケットとドリンク代に加えて、新型コロナウイルス感染追跡サービスへの登録もしないといけなくて、時世が時世なので仕方ないけど忙しい感じだった。去年の今頃はこういうライブに行くことは夢にも思っていなかったので、ちょっとずつ再開しているのは喜ばしいことだと思う。

トークの雰囲気としてはゆるい感じでこれぐらいがいいと思う。曲は聞いていたけど人間性についてそんなに知らなかったので新鮮だった。

曲目は以下のような感じ。セトリをまとめてくれている人がいてありがたい。後半に向かうにつれて楽しい曲が増えて翌日はすごい筋肉痛だった。「雷火」の高音が高すぎてビビってた。

ナナヲアカリ「NNNN」@BIGCAT - YouTube

新しめの曲はあまり追えていなかったのでちゃんと追おう、と思った。

ドラム式洗濯機を無事に設置できた。洗濯物が乾いて出てきてかつてない体験だと思う。これまではびしょびしょの洗濯物が出てきて惨めな気持ちになっていたのでギャップがすごい。

引っ越しにかかる手続きが一通り落ち着いてきた。先週は引っ越しのことが頭から離れない状態のまま凝った実装について考えていて大変だった。空間を活かした収納グッズを揃えにかかっているところで、もうちょっとしたら段ボールを全部やっつけられると思う。

引っ越した

このたび、学生の頃からずっと住んでいたマンションの一室を離れて、新しい部屋に引っ越した。京都市内から京都市内の引っ越しである。

いろいろな物を捨てて、一度も着ないまま場所だけを取っていた服を全部捨てて、とにかくいろいろなものを捨てた結果、段ボール箱の数がギリギリだった。逆に言うと、引っ越し業者の人の見積もり精度が高い。段ボール箱をバラしまくってなんとか生活できるようになってきた。

生活の質をこれ以上よくするには引っ越すしかない、と思ったのが引っ越しのきっかけである。非連続な変化を起こさなければどうしようもない、みたいな感じ。ワンルームマンションでこれ以上やっていくことはできないと判断した。まだ家具を揃えていないので以前と同じように物を置いているけど、部屋に何もない空間があっておもしろい。

有休を取っていろいろ荷物を受け取ったり、住所変更の手続きをしたり、とにかく様々なことをやったら疲れ果ててしまった。銭湯に行ったら回復した。

区役所に行ってたら、ルンバ (パイモンという名前にした) がスタックしてしまった様子が通知されてきて未来っぽい。しかし区役所からはどうすることもできない……。


以下のリンクから引っ越し祝いを送ることができます。

scrapbox.io

「ほたるんの服」の差分はどこにあるのか

小ネタです。

2021/12/3時点での引用リツイートには、どのcommitのどの行かを示したツイートはなかったので、たぶんこれが一番速いと思います。

アタリをつける

firefoxArguments などの変数名からブラウザを起動する何かであるということを推測します。devtoolsheadless などの引数名からこれはpuppeteerのcommitではないか、とアタリをつけました。ここで外すとタイムロスです。

当該の差分を探す

GitHubのスクリーンショットから、PRの差分かcommitの差分だろうと推測して探します。 puppeteer/puppeteer を手元に git clone してきて以下のコマンドで探します。 -S <探したい文字列> で差分に指定した文字列を含むcommitを探して、-p でcommitの差分も表示します。

% git log -S firefoxArguments -p

あった

github.com

ありました。よかったですね。

コミットメッセージから、Firefoxのユーザーデータ用のディレクトリを任意に指定できるようにするcommitであることが分かります。

おわりに

puppeteerリポジトリのcommitである、というアタリをつけるところが一番難しいですね。全く知らないライブラリだったら探すのに苦労したと思いますが、比較的知ってるツールだったのでなんとかなりました。