オープンソースソフトウェア開発の貢献に必要なスキルは何かとインタビューされた

カテゴリ: oss

とある筋からオープンソースソフトウェア開発への貢献に必要なスキルセットは何かとインタビューを受けた。氏の研究に必要らしくて受けたが、今日のことをブログにしても構わないとのことだったので、ちょっとメモがてら書き残しておこう。

貢献といっても個人的には色んな方法があると思っている。誰かの受け売りな気がするのだけれど、代表的なところでは

  • ソフトウェアの利用
  • 使い方や用例の紹介
  • バグの報告や機能の提案
  • コーディング
  • スポンサー

だろう。インタビューの時はスポンサーのことを忘れていた。熟考して返事しにくいので、個人的には文章でのやりとりを好む。ただ、今回はどうも「think aloud」すなわち「思考発話法」なるものを求められていたようで、思ったことを口にして欲しかったようだ。忘れていたといってもスポンサーも凄く大事だ。大規模プロジェクトのインフラを支えることもあれば、個人プロジェクトのモチベーションを支えることもある。かく言う私もスポンサー様に多大な支援を受けていて、日々感謝の気持ちとやる気に満ちております(https://github.com/sponsors/atusy)。

で、どの貢献の仕方の話が聞きたいんだ?と尋ねたところ、今回のインタビューはコーディングに関してのものだった。

初めて貢献しようと思った人は

  • 何が必要か
  • issueやPRの何に注目すれば貢献できそうか判断できるか

といった質問だったように思う。

最低限必要な知識やスキルは、プログラミング言語、バージョン管理システム(Gitなど)、開発プラットフォーム(GitHubなど)、貢献したいソフトウェアの利用経験、語学力(英語など)、プロジェクトの運営方針への理解あたりだろう。最初の3つは完璧を求めないが重要だ。足りないところは検索しよう。最後の2つはそれなりでもいい。語学力は多少不足していても、何をしたいか読めば分かる、self-descriptiveなコーディングを心掛けていれば、メンテナがある程度行間を補完してくれると思っている。プロジェクトの運営方針に従ってなければ、注意を受けるかもしれないが、直せばいい。ただ、それでも目を通すくらいはした方がいい。

issueやPRの何に注目すれば初PRできそうか判断できるか。これは難しい質問だった。ここで、「初」とは、どのプロジェクトにもPRしたことがない人……という前提だったと思う。私は、自分に必要な機能が不足していたから、実装を提案したのが、最初のPRだ。既出issueを探しはしたものの、有無によらずやることは同じで、明らかだった。というか貢献することを目的に、PR未経験者がPRできそうな内容をissueやPRから探すことがあるのか?とすら思った。

まぁ仮にあったとして、私の答えは以下の通りだ。インタビューでは思いつかなかった回答を含む。

  • 「good first issue」と記された、手頃なissueを探す
  • 読む気が失せない程度の説明が成されているか確認する
  • コード例が複雑過ぎないか確認する
    • 依存パッケージが多すぎない
    • 長すぎない
    • 複数のファイルに跨らない
    • 再現できる

これらを満たすissueであれば、説明を流し読みして、コード例で遊ぼう。特にバグ報告のissueではコード例で遊ぶことが非常に重要だ。とりあえずパラメータを弄りながら、どんな時にバグが起きるか検証する。できれば、バグを再現する最短コードを見当する。一通り遊んだらもう一度説明を読む。英語が分かりにくかった場合も、コードを通じて筆者の思いを多少は汲めるようになったはずだ。理解できなかった場合は諦めよう。きっと難易度の高いissueだ。

理解できた場合は問題の切り分けに進もう

  • 問題が関係する部分のドキュメントを精読する
  • 問題が関係する部分のコードを検索する

ドキュメントを読むと、案外、コーディングは不要で、パラメータを変えれば済む場合もある。コードの検索はGitHubの検索覧を使っても良いし、git grepしても良い。問題の原因となる関数名や、引数名、あるいはその値を検索してみよう。ここまで来たなら丁寧にコードを読めば、どこに問題があるかわかるはず。場合によっては、問題がそのパッケージが依存するパッケージにあったり、内部で利用している他の言語(Rのパッケージ中で使われているC++とか)のコードにあったりする。こういう時は撤退を考えてもいいかもしれない。

PRのことも聞かれたが、初貢献を試みてとりあえずPRを覗くケースが最後まで思い付かなかった。だって人が試みててmerge前ってことは、レビュー待ちとか、議論中とかだろう。どうしてもと言うなら、関連issueを読むところから始めたらいいんじゃないかな。とりあえず思うところを色々と述べたが、本記事では対象外としよう。

私のインタビューへの回答が、研究にどう役立つかはわからないが、オープンソースコミュニティへの貢献に繋がることを願いたい。それが研究の目的そのものでもあるらしいが。

Enjoy!