OSSを作ってコミュニティに貢献してみることについて

4 min read読了の目安(約3900字

はじめに

これは前々回書いたOSSを理解するために自分こんなことをやっていますということについてや、前回書いたOSSにissueやプルリク送って貢献してみることについての続き的な記事。
OSSを使うならばやっぱり貢献していくということも大事だろうねということで書いている。
前回前々回からの今回ということで、今回はOSSを自分で作ってコミュニティに対して貢献するということについてを書いていこうかと。

ちなみにOSSを作るというと仰々しい響きに聞こえるし、例えばReactみたいな感じでみんなが作るようなものを作らないといけないのか?という気持ちになるけども実際そんなことはないなと個人的には思う。
もちろんOSSは積極的に作らないといけないわけではないが、個人的には能力アップなり転職なりで有利になるから作った方がいいよとは思うけどもそこは各々で判断をしてください的な。

どういうOSSを作るべきか

個人的に思っているところとしては、抽象的な言葉になってしまうけども便利なもの。
例えば自分が作ったものの中の一つとしては、react-native-simple-twitterというReact NativeでTwitterのAPIを使おうというライブラリである。
TwitterKitを使うとか色々とあるんだけども、これはWebviewで実装しておりExpoを使っている人でも気軽に実装できるようにしようぜ的な感じのもの。

こういう感じで自分がまずプロダクトで作っているものをOSSとして世に公開していくといいんじゃないかなと。

リポジトリ内にはexampleを用意しておくべき

これはOSSを使う側としての意見でもある。
OSSは作る人もたくさんいるので千差万別、中にはREADMEすら書いていない場合もあればドキュメント用のサイトを用意しているものもある。
前々回でも書いたんだけども、理解するには実装をしてみるのが一番ではある。
だけども実装するってなるとぶっちゃけコストがかかるものでもあるので、exampleをそのまま走らせれればすごく簡単になるんじゃないかなと。

なので使ってもらいたいならばexampleを用意しておくとよいなぁと。

READMEで書いておくべきこと

上でexampleを用意しておけばいい的なニュアンスを書いたけども、ドキュメントもやっぱり最低限必要。
例えばnpm(JavaScript/TypeScript)系のものであればinstall手順、もしAPIキーが必要ならばどこそこにこういう風に格納しようなどなど。
実装する上で最低限必要なものがあれば親切だし、メソッドにはどういう値を投げればどういう値が返ってくるかとかも書いてあるとかなり丁寧だなと思うけどそこまでするのは個人の気分次第。

とりあえずは最低限こういう感じで必要なファイル作ってここでこういう風にやればいいよぐらいでいいんじゃないかなと。

ライセンスは?

Apache/MIT/BSD/CCなど色々とある。
改変してもいいよとか商用利用はやめてねとか諸々色々と種類がある。
ここで述べるべき内容ではないし、調べればもっと具体的に優しく言語化してくれている人が多々いるのでそちらを参考にした方がいいと思う。

けど一つ言えることはどれでもいいけどOSSにするならばライセンスはちゃんと設定しておかないともったいない。

メンテナンスの頻度は?

これは正直難しい。
自分はあまり頻繁に更新出来ないのでフォークして内部のpackageアップデートを頻繁に行われてるなぁと感じてる。
本来は毎日packageのバージョンアップ確認してできる限り頻繁にやるべきなんだろうけど、自分がもうすでに使っていないものとかそんな頻繁に更新しないでいいものだとあまりやる気もせず。

できる限りとしか言うことはできないけど、フォークされたものが活発に更新し始めないぐらいにはやっておいた方がいいと思う。
自分あまり出来ていないけども。

コントリビュータを見つける

正直個人的にはこれが一番難しいと思う
もちろん自分1人で行っていきたいと思うならば全然問題なし。
だけども開発する過程で自分が作ったこのOSSはもうこれで十分だとなると開発は止まるわけだし、下手したらもうそのOSSを使わなくなることもある。
そうなった場合メンテナンスするやる気は一切なくなる。
上記のメンテナンス頻度の部分でも触れている問題でもある。

そうしたときに誰かが引き続きプルリクを送ってくれるような環境を作れていれば、自分がレビューをしてマージして公開してというフローができるので簡単に今後もメンテナンスが行うことができるようになる。

こればかりはちょっと自分でもこうした方がいいとかが言えないので、誰か知見がある人がいたら教えて欲しいです!

GitHubなりでどう運営していくべきなの?

自分はそこまで活発なもの(他にもコントリビュータがいるようなもの)を作ったことがないのであまり知見がないが、大きいところを見ているとDiscussion機能を使ったり、issue内のMilestoneなりを使ってこんな風にやっていくよみたいな指針を出している。
なので自分がどうやっていきたいかということを表明していくのがいいのではないかと。

あと自動化はちゃんとしていった方がいいと思う。
masterにマージされたらnpm publishをするだけぐらいのGitHub Actionを書くだけでも十分だと思う。

変化球的なOSSを作るということ

すでにメンテが終わっていて、プルリクを送っても一切反応もないし、これをフォークして似たような名前で公開している人もいないという場合に、フォークをして自分主導で運営していくという変化球的なOSSを作るのもありなんじゃないかと。
もちろん本家が再び活動し始めたら個人的には大人しく明け渡すべきでもあるし、そもそも本家はちゃんと運営してるのに相乗りみたいな感じで似たようなものを作るのは個人的には御法度でコミュニティに貢献どころか乱してるんじゃないかという気持ちになるので要注意。

NGなこと

変化球的なところでも書いたけど、相乗りするとかそういう感じのこと。
似たようなものもあるし、そっちにプルリク送ってもいいものを何で作るのか?
意味があるならばよいけどもそうじゃなかったらやめておいた方がいいんじゃないかなと思う。

あくまで絶対に作らないといけないものではないし、自分が作っているものをOSSに派生しようとしたときに似たような優れているものを見つけたらそちらを一緒に盛り上げていく。
そういう気持ちでやっていく方がいいんじゃないかなと。

どう宣伝していくか?

作ったはいいものの埋もれてしまって誰にも見向きもされないということもある。
もちろん人に使ってもらうのではなく自分が使いたいから作っているという理由もあるんだろうけど、人に使ってもらうと意欲はすごい増していくのでせめて少しくらいは宣伝をした方がいいんじゃないかなと。

ブログなりで記事を作りTwitterで発信していく

これは単純至極簡単な話。
Twitterでこういうの作ったよとかでもいいし、使い方をまとめたブログを書いてTwitterで拡散するなり。

GitHubで関連するIssueを見つけてそこに書き込む

やっていい場合とやってよくない場合がある。
これは常識の範囲内でという言い方になってしまうけども、あくまで自分のものを宣伝するのは最後。
どうしてもその問題を解決するのに自分のOSSじゃないと解決できないよというときぐらいで。
個人的にも宣伝臭が強いのは正直関わりたくないので。

slackやコミュニティサイトに書き込む

これも上記と同じ。
ただSlackとかコミュニティサイトだと宣伝の場みたいなスレッドが存在していたりするのでそこでは宣伝して問題ないと思う。
だけど重要なのは他のOSSよりも自分の方が優れてるとかそういう言い方は敵を作るからやめておいた方がいい。
純粋にこういう目的のためにこういうもの作ったよという感じがいいんじゃないかなと。

さいごに

OSSを作るのはマストではないし、前回前々回の話で言う理解することもプルリク送ったりとかそういうこともマストではない。
けどより良い発展、ひいてはよりよいOSSができることで自分が作りたいプロダクトがよりよくなるというのがOSSでもあるかなと。
なので自分は積極的にこういった活動をしていきたい。
あと勉強会とか行ったときに○○使ってます!便利です!って言われたときにすごく嬉しいというのもある。

なので使うだけではなく手伝っていく側、ひいては作る側に回ってみるとまた違う景色が見れていいんじゃないかなと。