blog.syfm

徒然なるままに考えていることなどを書いていくブログ

近況

ここ最近は大学の期末考査や、アルバイト、インターンの課題が 2 つ、ドラクエ 11 と、死ぬほど忙しかった
今日・明日は休日なのでつかの間の休息みたいな感じになっている

今年の夏は 3 社のインターンに行き、8/14 から 9/30 まで休日以外はすべて埋まっているので大変ではあるけど、充実した夏休みになりそう
インターン先は受けた所すべてに受かったので嬉しかったけど、1 つだけ日程が被っていて、これからのチャンスやインターンに行ける可能性を考えて選んで、泣く泣く辞退したところもあって、そこだけがどうしても心残り…

それぞれのインターンについては追ってブログを書きたいな〜と思う (できれば今年も優勝したい)

9月頭には大学の友達らと京都旅行もするので楽しみ ⛩

最近は趣味コーディングができてないけど、それもできるようにがんばりたい

Go にコントリビュートするまでの手順

最近、ついに Go (golang/go) にコントリビュートしました!
正確にはレビュー中で、レビューが通ってもマージされるのは Go 1.10 なので、だいぶ先は長いですが取り敢えず自分のできることは一通り終わりました。
Go ではレビューシステムに GitHub は使っておらず、代わりに Google が開発した Gerrit を使っています。
普段の GitHub を利用したフローと結構異なっていたので備忘録がてらブログに書いておこうと思います。
なお、この記事は 2017 年 7 月 3 日現在のもので、情報が変わる可能性があるので必ず原文も目を通して下さい。
この記事は大雑把に原文を訳したものだと思ってください。

Contribution Guide - The Go Programming Language

この記事は自分を含めた英語弱者のための補完記事としての立ち位置でお願いします。

詳細

Gerrit について

Go では GitHub は Issue しか使っておらず、Pull Request は Gerrit というシステムで行われています。
Gerrit は Google の開発したソースコードレビューシステムで、全ての変更はここでレビューされてからマージされることになります。

go.googlesource.com のユーザ登録・パスワード生成

まず、go.googlesource.com へアクセスし、Google アカウントでユーザ登録をし、パスワードを生成します。
そうするとコマンドが表示されるので、それをターミナルで実行すると Gerrit を使うための準備が完了します。

Go の Gerrit にユーザ登録をする

次に go-review.googlesource.com にて Gerrit のユーザ登録をします。

CLA に同意する

コントリビュートするには Contributor License Agreement (CLA) に同意する必要があります。
個人なら individual contributor license agreement に目を通して同意します。
団体の場合は別に CLA があるので、原文を参照してください。

git-codereview の導入

Go の Gerrit を操作するためのコマンドラインツールです。もちろん go get でインストールできます。

$ go get -u golang.org/x/review/git-codereview

エイリアスの設定

ここは任意ですが、やっておくとタイピング量が少なくなるのでやっておいた方がいいかもしれません。

[alias]
    change = codereview change
    gofmt = codereview gofmt
    mail = codereview mail
    pending = codereview pending
    submit = codereview submit
    sync = codereview sync

これを ~/.gitconfig に追加し再読み込みします。 以下ではエイリアスを設定しているものとして進めていきます。

コードを書く前に

リポジトリに変更を加える前に、GitHub の Issue にて問題を報告するか、既存の問題を説明するようにしなければいけません。
Go は非常に大きなプロジェクトなので、その提案が正当かどうかレビューされる場合もあります。

Go リポジトリのクローン

GitHub ではなく、go.googlesource.com から取得します。

$ git clone https://go.googlesource.com/go

編集

変更は master ブランチで行います。
checkout して、Git でいう git pull である git sync を行ってリポジトリを最新にします。

$ git checkout master
$ git sync

ファイルを変更し終えたら、ここは普段の Git と同じようにファイルをステージングします。

$ git add <ファイル名>

git rmgit mv も同様に使えます。

編集が終わったら、git commit の代わりに git change を行います。この時に、ローカルにブランチが作成され、そこに変更がコミットされます。
ブランチ名は任意の名前が使えます。また、この操作はサーバへは送信されません。

$ git change <ブランチ名>

これを行うと、$EDITOR に指定したエディタか vi が起動し、コミットメッセージを記述できます。

コミットメッセージは以下のフォーマットに従う必要があります。

  • 一行目にはもっとも変更が加えられているパッケージ名を書き、変更の概要を書き、This change modifies Go to ___ という形式に合うように記述する。
  • 参考文献がある場合は記載する
  • Issue を Fix した場合は、# をプレフィックスにして記載する。

以下が公式のテンプレートです。変更されている可能性もあるので 必ず 原文も確認してください。

math: improve Sin, Cos and Tan precision for very large arguments

The existing implementation has poor numerical properties for
large arguments, so use the McGillicutty algorithm to improve
accuracy above 1e10.

The algorithm is described at http://wikipedia.org/wiki/McGillicutty_Algorithm

Fixes #159

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch foo
# Changes not staged for commit:
#   modified:   editedfile.go
#

書き終わったら保存してエディタを終了します。

さらに編集する必要がある場合は、同じように編集し、ステージングし、git change をします。

Go 1.4

ビルドやテストには Go 1.4 が必要になります。
Go リポジトリ内で release-branch.go1.4 にチェックアウトし、ビルドを行い、$HOME/go1.4 以下に配置します。

$ git checkout release-branch.go1.4
$ cd src/
$ ./make.bash
$ mv ../bin ~/go1.4/bin

テスト

必要に応じてテストを書く必要があります。
また、必ずレビューを受ける前に以下のコマンドを実行してテストが成功することを確認します。

$ cd go/src
$ ./all.bash

変更の送信

全ての変更が完了したらレビューのため、Gerrit へ送信します。 以下のコマンドを実行するだけです。

$ git mail

そうすると、Gerrit に反映されるので確認します。
しばらく経つとレビュアーがレビューを行ってくれるので待ちます。
あとは通常の PR と同じ流れになるかと思います。

CONTRIBUTORS

混乱を防ぐため、各ファイルにはコントリビュータの名前等は書かないことになっています。
代わりにコミットが取り込まれると、 CONTRIBUTERS ファイルに自動で名前が記載されます。

まとめ

ここでは基本のフローのみを紹介していたため、他のことについては扱っていません。もし他にわからないことがあった場合、原文を読めばだいたい乗っているかと思います。

感想

当然ではあるけども、レビュアーに Rob Pike 先生や Bradfitz などの超有名人がいて、恐れ多い… 😇
今回コントリビュートした内容はとても小さいものだけど、継続的に Go にコントリビュートできたらいいなぁと思う。

転職しました

今年の2月に約2年ほどアルバイトとして働いていた IT 企業を退職しました。
その後、3月から別な IT ベンチャーの会社でアルバイトのサーバサイドエンジニアとして働いています。
今しがた気づいたのですが、今日はちょうど入社して3ヶ月でした。

辞めた理由としては、

  • サーバサイドエンジニアとして働きたかった
  • 会社自体に不満があった

おもにこの2つです。

以前の会社では、主に Web フロントエンドの開発をしていました。フロントエンドも嫌いではないのですが、個々最近はフロントエンドよりバックエンドに興味が動いてきていて、そちらにメインに携わりたいと思っていました。

もう一つの理由に関しては、そのままです。
もう少し詳細に言うと、会社の体制や、技術に関する考え方などが自分の考え方に合わないと感じてきていたためです。
とはいえ、会社に不満を持つというのは (ある程度) 普通のことだと思うのでここでは特に言及するつもりはありません。(一応その理由についての記事は書いているけど、多分投稿することはないはず…)
不満について聞きたかったら直接お願いします。

現在の会社では100% Go を使って開発していて、自分の好きな言語も Go なのでとても良いです。
先輩や後輩もみんな優秀な方ばかりで、コードレビュー、リポジトリソースコードを読んだりして、毎日とても勉強になっています 🙇‍♂️

現在の会社は、今が一番重要な時期に入っていて、そこに関われるのは光栄な事だなと思っています。
すべてのプロジェクトにメインで参加しているので、技術のハードルや要求が以前の会社より高く、結構ついていくのが大変な時もありますが、楽しく仕事ができているので転職してよかったと思っています。

これからもよろしくお願いします…!