オープンソースの開発現場では限られたリソースで品質管理をどうしているのか。Twitter4J、GitBucket、Asakusa Framework、power-assertの作者が討論(後編)
2016年3月8日に都内で開催されたソフトウェアテストシンポジウム「JaSST'16 Tokyo」において、オープンソースソフトウェアの品質管理についてのパネルディスカッション「OSSにおける品質管理・テストと運営」が開催されました。
(本記事は前編、中編、後編の3本から構成されます。いまお読みの記事は後編です)
そのプルリクエストはユーザーを代表しているのか?
和田氏 残り20分くらいなので、またツイッターでもらった質問に答えたいと思います。「ユーザーの5%程度からフィードバックが来るという話がありましたが、その5%からきたプルリクエストをユーザー全体の代表として受け取って大丈夫かどうか、どう考えていますか?」
竹添氏 これはGitBucketにかぎらず、過去に私がやっていたOSSのプロジェクトでも経験したのですが、全体のユーザーの代表として受け取ってはいけないと思います。
ある程度ユーザーが増えてくれば、1つの要求に対してVote(投票)が発生して、フィードバックをくれた方以外の方からもその機能が欲しいかどうかの反応が分かりますが、プロジェクトの初期の頃はユーザーの母数が少ないので、プルリクエストが来ると受け入れてしまいがちです。
プルリクエストが来るとうれしいのですが、ただ大きくてマージをためらうようなものや、機能的にプロジェクトの方針に反しているものや、コードがやばいものとかもあります。いきなりプルリクを送ってくる前に言ってくれればいいのにと思ったり、そういう案内をしたりもするのですが。
プロジェクトの方針に反する機能追加などははっきりとお断りしていますが、コードがやばい場合はマージしたあと自分で直したりもしています。また、プルリクに対して「ここはこうしてください」といったコメントをしても反応がないものもあったりします。そういう場合には「次の反応がないときには3カ月後にクローズします」という感じでドライにやっています。
川口氏 Asakusa Frameworkの場合は個別にユーザーさんから「こういう機能が欲しい」という話をきいたりしています。取り入れるかどうかはケースバイケースなのですが、それがコンセプトからはずれているとか、品質を損ないそうな場合などは、すごく便利だと思っても反映しないことの方がおおいですね。
もちろん代替案を示すとか、もっと検討したいので時間をかけますとか、いろんな返事の仕方はありますが、そこは難しいですね。
山本氏 プルリクが来るのはもちろんうれしくて、それはそこまでその人に使いこなしてもらったわけで、OSSとして作って公開したことがうまく回っているからだと思います。
要望はプルリクのコードの形で来ることもありますし、単に要望として来ることもありますが、Twitter4Jの場合にはJavaのライブラリということもあって、こういう使い方をしたけど、どうしたらいいですか? といった質問の形でくることが多いですね。
プルリクではポイントを外したようなものもきますし、ちょっとこのやり方はどうかな、というのも来ますが、リジェクトしてしまえば相手のモチベーションがなくなってしまうかもしれないので、ちょっとしたものならマージしてから私が直すこともあります。元々のコードが亡くなってしまうこともありますが、それでもマージした記録は残りますし、今後も続けてコントリビュートしてくれるかもしれませんし。
和田氏 まだプロダクトがメジャーじゃない段階では、最初のプルリクや2つ目のプルリクなんかはめちゃめちゃうれしいんですね。あ、使ってる人がいるんだと。で、そのプルリクを取り込むのですが、それがあとあと問題になったりすることもあったりします。
それに、そうして取り込んだ機能は自分では使わないので、どれだけ使われているのか分からないんですね。でもメンテし続けなければいけない。だからといってプルリクをリジェクトしてしまうと、そのあともうプルリクが来ないんじゃないかという心配に負けてしまって、取り入れてしまったりする。たぶんそういうのに揉まれてOSS作者は強くなっていくのかなあと思ったりします(笑)
なんにせよ、すごく悩ましいですね。
でも、これはこういうプロダクトだからとか、ポリシーを明確に表明しておくとリジェクトしたときにも相手に納得してもらいやすくなるので、そこは大事だと思います。
例えば、僕のpower-assertライブラリは機能の少なさが売りなので、「こういう機能を追加しました」というプルリクが来ても、「いや、機能の少なさが売りだから」と丁寧に断って、断ったことをFAQにも書いておく。すると「なんでこれはやらないんですか?」という似たような質問が来にくくなると思います。
品質を保つためにユーザーを増やすというアプローチ
和田氏 次の質問です。リリースフローやテストコードなどをちゃんとしようと思ったきっかけとなった出来事はありますか?
山本 昔「侍」という解析ツールを作って、それはしっかりしたものじゃなくて、コードをZipでサイトに置いてだけなのですが、それでも結構フィードバックをもらっていて、口頭で使ってますよとか。それで、ああコードを公開してみんなに使ってもらえるようにするのはいいことだと思って。
それでTwitter4Jでは形式を整えてフィードバックをもらいやすいようにしたらたくさんフィードバックをもらえるようになって、ユーザーも増えていってと、そこは雪だるま式にモチベーションが上がっていきましたね。
川口氏 やっぱりフィードバックをもらってOSSをよくしていこう、というのがモチベーションとしては大きいですね。
竹添氏 GitBucketを作る前にAmaterasというEclipseのプラグインをいろいろ作っていたのですが、当時はSourceforgeというところにソースコードを置いておくだけで、いろんな方に使ってもらえてユーザーも増えたのですが、開発コミュニティはうまく作れなかったという反省があって。それでGitBucketを作るときには全部英語でやろうと思いました。
GitBucketは最初は自分が社内で使うために作り始めたのですが、いちどHacker Newsにとりあげられて、その記事にコメントがいっぱい付いて、そこから爆発的にユーザーが増えた時期が合ったんです。そこからフィードバックをくれる人も急に増えて、そこでちゃんと体制を作らないと、こちらが回らなくなるという状態になりました。それがきっかけですね。
和田氏 質問はまだたくさんいただいているのですが、時間が来ましたのでこれでおしまいにしたいと思います。
OSS、特に大規模なOSSではない、個人の開発から始まったOSSがどんな悩みを持って、品質を保とうとしているか。もちろんテストは頑張るけれども、それとはちょっと違う品質の保ち方や考え方もあって、それは英語やコミュニケーションのチャネルを増やすよう頑張ると言った話がみなさんに伝われば幸いです。ありがとうございました。
あわせて読みたい
AzureからWindows 10のデスクトップ仮想化「XenDesktop Essentials」と、アプリケーション仮想化「XenApp Essentials」まもなく提供開始、シトリックス
≪前の記事
オープンソースの開発現場では限られたリソースで品質管理をどうしているのか。Twitter4J、GitBucket、Asakusa Framework、power-assertの作者が討論(中編)