私は趣味でいくつかの自作OSSを開発しています。あまりバズったりはしていませんが(GitHubスターが一番多いのがLunarMLの200超)、それなりの期間続けているつもりです。
この記事では、趣味のOSS開発を細く長く続けていくためのコツを考察します。
自動化する
普段かかる手間は少なければ少ないほど良いです。つまり、自動化です。自動化するための手間はかける価値があります。
テストは自動化している人が多いでしょう。GitHub Actions等でpushの度に動かしましょう。巨大IT企業の金でテストを回しましょう。
(マイナーなOSやアーキテクチャー、それからGPU等に依存するソフトウェアのテストはGitHub Actionsでは回せないかもしれません。そんな場合でもできるだけの自動化はしたいものです。)
バージョン番号の更新も、手で書き換えるのではなく、シェルスクリプト一発でできるようにすると良さそうです。
リリースもGitHub Actions等で自動化できそうです。私はまだそこまではやっていませんが、リリース用のtarballを作るのは自動化しています。make archive
でできるようにしたり、ですね。
依存先の更新情報が自動で入ってくるようにする
自分の書いたプログラムが依存しているソフトウェア(言語処理系や依存ライブラリー)がメジャーアップデートされた場合、自分のプログラムも追従したいかもしれません。なので、これらの更新情報が自動的に流れ込んでくる仕組みを作りたいです。
具体的には、GitHubなら当該プロジェクトの通知設定をいじってリリースの情報が流れてくるようにする、もっと古典的なプロジェクトならメーリングリストに登録する、あるいはRSSを購読する、などです。
作業手順を文書化する
久しぶりに触ったら手順を全部忘れていた、なんてことはありがちです。なので、手順をドキュメント化しましょう。README.mdに書いたり、CONTRIBUTING.mdに書いたり、Makefileなら make
とか make help
でターゲット一覧が出てくるようにしたり、です。
定期的にリリースするために
思い立って自分のプログラムに何か変更を加えたとします。そのとき、あなたはすぐに新リリースを出すタイプでしょうか?そういうタイプならそれで良いですが、私のような怠惰な人間は「後でまた変更を加えたくなるかもしれない、そうすると今リリースせずに少し様子を見た方が良い」と考えがちです。そうすると永遠に新リリースが出ないことになります(忘却するので)。
忘却を防ぐためには、カレンダーに登録しておくのが良さそうです。登録した日が来たら自分のプロジェクトに何か変更が入っているか確認し、変更があれば適宜リリースを行います。変更があってもなくても、次回の日付をカレンダーに登録します。
インターバルは、こまめな人なら1ヶ月、長くて1年くらいでしょうか。私はとりあえず3ヶ月でカレンダーに登録しています。
私がやっている趣味OSSは個人開発なので、チームを組んで開発する場合や、人気が出て大量にissueやPRが立った場合の処理などは別のノウハウが必要かもしれません。