ひとりでやるRiak Advent Calendar 2012 day4 - OSS(というかRiak)に参加しよう!

まあよくあるオープンソースソフトウェアと同じです。

We maken een kringetje... Photo by Nia

0. 心構え

Q. Riakなどというガチンコ分散システムのOSSなんてどこぞの黄色い象の日本語コミュニティのようにモヒカンどもがうようよしていてうっかりつまらない質問でも投げようものならマサカリが全方向から飛んでくるんじゃないの?と心配しています (東京都 30歳 男性)

A. RiakはErlangで書かれています。Erlangコミュニティは紳士が多いことで有名で、erlang-questionsをみればわかるのですが些細な質問やFAQでも比較的みんな優しく答えてくれます。だから心配しないで!

Q. Erlang書けないんだけど?!(神奈川県 23歳 女性)

A. RiakはErlangで書かれていますが、できることは沢山あります!外からHTTPを叩いてテストしてもらうのにErlangは必要ありませんし、多くの言語のクライアントがあります。さらに、何よりもRiak本体にも、HTML, CSS, JavaScript, shなどが沢山含まれています。実際、BashoのエンジニアでもErlangほとんど書いてない人は何人かいます。

1. 怪しいな?と思ったら

有償ライセンスを持ってる人は以下略。持っていない人は、 GitHub Issuesを覗いてみよう。既知バグかもしれない。既知バグだったら "2. バグを直す" へどうぞ。実はRiak自体は多くのサブモジュールを持っていて、そのサブモジュールのどれかのバグかもしれないが、多すぎるので丹念に見る時間がねーよ、という人や、バグっぽいんだけどよくわからない…となったら メーリングリストで問い合わせてみよう。英語に自信のない人は、まだ人が少ないけど日本語MLへどうぞ。小さな話だったらIRC( #riak , #riakjp )にも人がいる。
どこかにBugzillaも生存しているらしいのだが、基本的には使われていない。

1. 現象を文章にして書く

このあたりは一般的な話だし、日本語でも英語でも同じなのでリンクだけ。

無事にかけたら、IssuesなりMLなりに投稿しよう。メールなら最初の挨拶は Hi folks! とかだし、Issuesなら余計な挨拶は省いておこう。

2. バグを直す

バグを投稿したら、小さなやつならPull Request出してしまおう。向こうではよく "PR" とか略すので、メールで "I've just sent a PR, please check it out!" などとURLを貼っておくとレビューしてもらいやすい。Issuesに登録して放置っていうのだと割と流れていってしまってたまりにたまっていたりする…
原因が分かってて直し方も予想がついている場合は、MLに投稿して「ちょっと…という直し方でパッチ書こうと思ってるんだけど、方針合ってる?」とか聞いてからやると、PRをレビューしてもらう時点になってから大幅に書き直す羽目になるとかがなくなると思う。
パッチ投稿のルールはどこにも明文化されていないので分かりにくいと思うが、だいたいを説明しておくと

  • MLにパッチを 1/7 ... とかいって投稿する必要はない
  • masterか、1.2ブランチに対してPRを出すと吉
  • いきなり送って待っていると流れるかもしれないのでMLで軽く説明&宣伝
  • 特にスタイルや、ASFのような厳格なルールはない
  • バグに対してテストを追加してもらえるとみんながとても喜ぶ
  • ./rebar eunitが通るとみんな喜ぶ
  • travis-ciのテストが通るとみんな喜ぶ
  • 誰かがレビューするとマージしてくれる
  • 2つ前のバージョンまで、後方互換性が必要
  • データ構造や通信プロトコルは変更できない(前のバージョンからデータをそのまま読みだすため。Rolling upgrade参照)
  • コーディング規約は特にない(erlang-mode.elが規約というか何というか)

3. 開発スタイル

BashoのエンジニアはUK, US(とあとJPも少し^^)に分散していて生活リズムもバラバラで、24/7のサポートも行なっているので基本的に24時間の間、誰かがどこかで何かしている。ので、気軽にいつでも質問すればよいですよ!!!11
スケジュールやロードマップも厳密なものはないし、OpenStackのようにアルファベット順に名前をつけて定期的にリリースとか、Debianのようにtestingとかstableとかそういうバージョンもない。あるのはリリースされた版(今は1.2.1, もうすぐ1.3が出る…のかな?)だけだ。いつから不安定版などがあると錯覚していた…?!
ASFのプロジェクトのようにJIRA起こさないとパッチ送れないとか、JIRAで延々と議論するとかもないし、WebKitやChromiumのようにツールに埋もれる*1こともない。まあつまりベンチャーなので悪くいうといろいろと適当で個人の良心に任されているのだけど、それで全て上手く行っている*2のだからすごいなあと思う。やはり、ベンチャーとはいえひとつの企業がスポンサーしたOSSだと、政治的な要素が少なくていろいろと楽だ。前職時代はCloudStackなんかCitrixに完全に囲われてるじゃねーかOpenStackだろJKと思っていたものだが、OpenStackのような類のOSSだとどうしてもリーナス・トーバルズが必要になってしまう。リーナス・トーバルズは一人しかいないので、自然と企業がスポンサーしている方がいろいろよいだろうなあと思う。

特に手が回っていないところ

  • ユニットテストを書く、直す
    • 状態を持った分散システムなのでユニットテストの重要性は割と低いので、手が回っていないのが実情。コーナーケースばかりだが riak_kv などは惨憺たる状況だ。これ…きれいなGreenだろ?テスト通ってないんだぜ…。
  • 各言語のクライアント
    • Ruby, Erlang, Javaはユーザーが多いのでよくメンテナンスされている
    • のだけど、Python, PHP, C++, node.jsはPRに対応しきれていないので、手が回ってくると嬉しい
    • 個人的にはPythonhttpsが使えるようになるととっても嬉しい

appendix. 練習問題

昨日・今日あたりのRiakのmasterブランチだとriak_controlにcompiled CSSが同梱されていなくてriak_controlの画面がものすごく間抜けになってしまう現象が観測されているので誰か試しにやってみてほしい。わりと切実…

*1:いや死にはしないし開発はちゃんと進んでいるけど

*2:ただし人出が足りないことを除く