デブサミ2014「OSSコミッタ大集合」というので登壇してきた

http://event.shoeisha.jp/devsumi/20140213/session/394
https://docs.google.com/presentation/d/1eh7fMYMEUA1CriyUxay4wkYaWtnxLkg0l4jtd9CXLv4/htmlpresent
http://togetter.com/li/628956


謎のScalaz枠で。Scalazへの具体的な貢献は、2013年の年末にも書いた

2013年のScalaz

ので、まぁそんな感じです。3月から働きますが、引き続き2014年も1月2月無職だったので、ここ数ヶ月(versionでいうと、7.1.0-M3から7.1.0-M5あたりの変更点)の半分以上のコミットが自分という、謎の貢献度です。前回も書きましたが、あくまでコミット数ベースで、細かいどうでもいい最適化とかも多いのでそうなってるわけですが。


一部会場で話したことと重複するかもしれませんが、OSSとしてのScalazとか、自分がどうやって関わってるとか、きっかけとかモチベーションとか、あらためて少し書いてみようかと思います。


きっかけとか現在に至る経緯
  • Scalaを始めて4年以上経つが、最初の1〜2年はおそらくScalazの名前すら知らなかった。そもそもScalaの情報さえ少ないのに、Scalazの日本語情報は皆無だった。
  • 最初にコード読んだときも意味不明だった
  • 逆に、一見では意味不明で理解できないからこそ、興味がわいたのだと思う。1〜2年Scalaやっていて、ある程度のコードは読めるようになっていたのに、「なんだこのコードは・・・!?」という感じ
  • 勿論Scalaz自体は実用的な面もあるのだが、「理解することで(型クラスや不変データ構造などの)関数型の概念をScalaで勉強できる」という面が大きい
  • 今でもそうだが「ドキュメントない」かつ「英語得意じゃない(ので英語の解説読んでもそれほど効率よくない)」=>「理解するためにはコード読むしか無い」ので、基本iPadソースコード入れて、ひたすら隅から隅まで読む。そのうちだんだん理解できるようになる
  • 隅から隅まで読んでると、わりと細かいところが雑でバグあったり、テスト足りてなくて細かいpull req送り始めるようになる
  • そんなことを続けているうちに、気づいたらコミット数2位のコミッターになる(イマココ
ほかの人の話を聞いて思ったこと

yusukeさんとか、seratchさんとか、twitter4jやscalikejdbcに関して
「まだ誰もやってない、もしくは面倒であまり誰もやらない分野を自分がやり始めれば、デファクトスタンダードとれる」
的な話になってましたが、自分のScalaz(含むその他のScalaのライブラリ)に関する関わりかたは、ある意味それと正反対です。

勿論「すごい便利なライブラリを自分が最初に作りはじめて、多くの人に使ってもらいたい」という気持ちがないわけではないです。
が、OSSのソフトウェアとしてそれをやる際立ちはだかるのが、英語や、プロジェクト自体の運営です。「広く使われるOSSのプロダクトを育てていく」には、もちろんコード書く能力は必須ですが、コードだけ書ければいいわけではない、と思います。
具体的には

  • 英語でドキュメント書く
  • pull requestに英語で対応する
  • issueや質問にも英語で対応する
  • ユーザーから効率よくフィードバック受けてそれをもとに今後の開発
  • リリーススケジュールとか、今後の方針示したり

などなど。それらも、まぁ面白い部分でもありますが、ぶっちゃけ面倒なときもあります。自分でプロダクト作り始めると、ある程度安定して他のコントリビューターがつくまでは、それらを全部一人でやっていかないといけません。個人的には、まだまだそのあたりの自信がない感じです。
自作のライブラリいくつか公開してますが、どのライブラリもそういった面で気力がイマイチ足りないし、ある程度飽きっぽいところもあるので「本気で広く使われるプロダクトを自作しよう!」という気には、現状あまりなりません。まぁそれほど本気で作りたいライブラリ思いつかない、という面もありますが。



それでScalazの話に戻りますが、極端に言えばすでに開発スタイルが安定しているプロダクトなら、自分の好き勝手なpull req送っているだけの、ある意味かなり手軽な感じで始められます。もしコミッターになっても、お金もらってプロのOSSコミッターとして開発するわけではない限り、あまり大きな責任もなく、とにかくやりたいときにしたいことをする、といった感じです。まさに自分のScalazの関わり方がそんな感じです。
(勿論、出来る範囲でpull requestのレビューとかその他色々もやってますが)


pull reqするときでも、コードがしっかりしていれば、最低限の変な英語の説明でも大概は理解してもらえます。メーリングリストで英語で重要な議論してたりしても、あまり参加できてないです。(読んで理解はできるので、ひと通り目は通しているが)
Scalaz自体は、ものすごく巨大なライブラリというわけでもないですが(かといって、小さくもないが)アクティブなコミッターは5〜8人くらい*1いて、色々とそれぞれができることをやっていて、複数人でのOSS開発がうまく回ってる感じがあります。
それほどやることが山積みではなく、最近はScala2.9〜2.11でのクロスビルドをしつつ、ソース互換やバイナリ互換を出来る限り保ちつつ、ゆっくり進化していく感じなので、忙しくなく平和に開発できている感があります。


言いたいことがまとまってないような気がしますが無理やりまとめますが、そんなわけでOSSの貢献の仕方は人それぞれでいいと思うので、みんなもっとOSSに貢献しましょう。

*1:実際に権限ある人は20人近く