Go本体にContribute成功した話 と Gerritの話

来月ぐらいにはGo 1.7がリリースされそうなのですが、CONTRIBUTORSに名前が載せられそう( https://github.com/golang/go/blob/release-branch.go1.7/CONTRIBUTORS#L915 )なので記念エントリです。

f:id:stanaka:20160728104134p:plain

内容自体は、4月にあったGoCon 2016 Spring( http://gocon.connpass.com/event/27521/ )での発表済みです。

tl;dr

  • 一部のディストリの最新版でlinux/386でビルドしたバイナリが起動すらできない、というバグがあった
    • 問題はruntimeのアセンブラ部分だったけど、なんとかパッチ書けた
  • パッチ提出→コードレビュー→やりとり→マージまで、3日程度とスムーズに進行できた
  • Gerritを初めて使ったけど、GitHubとはまた違った思想を感じられて面白い

コントリビュート成功までの流れ

対処

Golangのレビュープロセス

  • コントリビュートの方法は丁寧なドキュメントがある https://golang.org/doc/contribute.html
  • git-codereviewというサブコマンドが用意されてる
  • 基本的には1コミットにすべて集約して、GitHubで言うところのPull Request相当に
  • レビューシステムは Gerrit を利用している
    • 1コミットに集約されたものにコメントをつける → コミットを更新する、の繰り返し
    • 過去のコミットとそれへのコメントも見易い
    • 慣れるとGithub Pull Request方式よりよい、という人もいるらしい
    • 行単位にコメントする際に、最初はDraftとして保存されて、全部入力し見直したあとで確定できるのは確かに便利
    • UI的には装飾がすくなくて、とにかく密度高め
    • 参考: Gerrit vs Github: https://gist.github.com/mbbx6spp/70fd2d6bf113b87c2719

感想

  • 広く使われている言語処理系のコア、しかもアセンブラで書かれているようなところに手を入れる機会はそうないので、パッチがマージされたはうれしい
  • 分かりやすいissueを発見したら、がんがんPull Request投げましょう
  • Gerritはかなり特徴的なシステムで、GitHubばかり使っている身にはいろいろ新鮮で面白い