tatsumack blog

エンジニアによる雑記です

シュッとGoにコントリビュートした話

この記事は Go7 Advent Calendar 2019 の 19日目の記事です。

今年の7月に1ヶ月ほど有給休暇を取得し、時間があるのでせっかくだから何か大きめのOSSにコントリビュートしたいなと思い、Goにコントリビュートすることにしたときの体験談です。
それまでGoでがっつり開発した経験はなかったのですが、無事にGoにコントリビュートすることができました。

issueを見つける

コードを読み込んでバグを発見したり、新たな言語仕様を提案して取り込んでもらうのはハードルが高いので、 Goのレポジトリのissuesから自分でも直せそうなバグを見つけてみることにしました。
Issues · golang/go · GitHub

このとき、 help wantedNeedsFixというタグのついたissueから探すようにすると、解決方針が比較的自明なissueを見つけることができます。

僕は↓のissueに取り組むことにしました。
github.com

バグを直す

Goのレポジトリをcloneするなりにして、手元でコードを読みつつ、バグを直します。
このとき、issueのタイトルに x/... と記載されている場合、Go本体のレポジトリではなく、サブレポジトリにコードが置かれています。
僕が扱っていたissueは x/website と記載されていて、 https://github.com/golang/website にコードが置かれていました。

手元で環境を構築し、バグを再現することができたら、あとは直します。
今回のバグfixの差分は これ だけでした。
差分が小さいのでめっちゃ簡単な修正だったかというとそうでもなくて、この差分で問題ないか確認するために周辺のコードをそこそこ読み込む必要があるので、時間はそれなりにかかった記憶があります。

パッチを送る

手元でバグの修正が確認できたら、パッチを送って、レビューをしてもらいます。
アカウントの登録やレビューツールが必要になるので、 Contribution Guide - The Go Programming Language を読みつつ、用意します。
今回はサブレポジトリへのコントリビュートでしたが、cloneするレポジトリが異なる以外は、通常のフローと同じで問題ありませんでした。
パッチを送るには、GithubもしくはGerritを使う必要があります。今回はせっかくなので普段使わないGerritを使ってパッチを送ってみましたが、特に詰まることなくスムーズにレビューに出すことができました。

https://go-review.googlesource.com/c/website/+/187897

パッチを送ると、 botから「Congratulations on opening your first change. Thank you for your contribution!」というコメントがついて、ちょっといい気分になります。

Goのプロジェクトはsix-month development cycleを採用しており、7月はDevelopment Freezeの期間だったのでマージされるのはもう少し先になるかと思いきや、レビューに出した翌日にはレビュワーにOKを貰い、パッチを取り込んでもらいました。

後日談

Goのレポジトリには CONTRIBUTORS というファイルがあり、コントリビュートした方の名前が掲載されています。
今回直したバグはサブレポジトリの小さいバグだったので名前が載ることはないかなと思っていましたが、2ヶ月後くらいの更新のタイミングでCONTRIBUTORSに自分のアカウントが掲載されました。

プログラミング言語へのコントリビュートはものすごく高いハードルがあると思っていましたが、思っていたよりも簡単にコントリビュートできました。
この体験談がGoにコントリビュートしてみたいけれど手が出ないと思っている方の参考になれば幸いです。