底辺技術者の備忘録とポエムと

IT関係の学習メモや妄想あるいは愚痴的な何かをつらつらと。

Go言語はじめました

私は普段の業務で主にRuby/Rails、あるいはJava(それもSWTJavaFXなどのクライアントものが多い)を使った、いわゆる業務系システムを構築することが多いのです。

Railsだけど業務系。。。と言われるのかな。。。 (Railsでもそこまでシビアな要求がない場合十分に業務系システムは作れます。当然デメリットもありますが、十分にメリットもあるのです。)

なのですが諸々思うところがあり、Go言語を本格的に学習し、一先ずお試し社内ツールをいくつか作っていこうと思いたちました。 ということで、その記録を「主には自分用の備忘録」として、はてブで残していこうと思います。

ちなみに、GoはサーバサイドのAPIを作るために使います。フロントエンドは今の所Reactを使って構築する予定です。 これまでJavascript関係は自作の簡易なFrameworkで半SPAを扱った程度のため、ReactもGoと合わせて今後みっちり学習して行くことになります。

Goの開発環境を整備する

何はともあれ、環境がなければ話になりませんので、自機PC(MacBook Pro Retina, 15-inch, Mid 2015)に環境を作り込みます。 これまでは主にParalleles上にUbuntu/WIndows環境を用意し開発をしていたのですが、これを機にRubyPythonJavascript、Goの環境を全てMacOS上に移行してしまいます。これにあたり言語のバージョン問題やらで面倒臭いことになりたくないので、

  • anyenvで*env環境を導入する。
  • Go言語はgoenvを使って構築する。

また、IDEやエディタなどのツールに関しては、

  • Visual Studio Code(今後VSCodeと表記)を使用する。
  • よほどのことがない限りVSCodeだけで、全ての開発作業を行う。

という感じにします。 以下手順です。

anyenvを導入する

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l

詳細は、公式サイトを参照の事

goenvを導入する

$ anyenv install goenv
$ exec $SHELL -l

これでGo言語のインストールを行う準備ができました。 goenvを使ってインストールする事のできるGoのバージョンは、以下のコマンドで確認できます。

$ goenv install --list

実行すると以下のように出力されます。(あくまでも記事作成時の表示内容です。コマンドの実行タイミングよっては内容は変わります。)

Available versions:
  1.2.2
  1.3.0
  1.3.1
  1.3.2
〜 中略 〜
  1.9.7
  1.10.0
  1.10beta2
  1.10rc1
  1.10rc2
  1.10.1
  1.10.2
  1.10.3
  1.11beta2

今回は1.10.3をインストールします。

$ goenv install 1.10.3

実行ごしばらくすると、インストールが完了しますので、その後以下のコマンドを実行し、標準で利用するGo言語のバージョンを1.10.3に固定します。

$ goenv global 1.10.3

これでGo言語が利用できる状態になります。 試しにバージョン情報を出力してみます。

$ go version
go version go1.10.3 darwin/amd64

最新のGoはGOPATHを指定しなくても、$HOME/goを自動的にGOPATHとして利用してくれますが、go getしたあと$HOME/go/bin配下のコマンドを円滑に使うために、以下の通り環境変数を編集しておきます。指定はこれと決まったファイルはありませんが、私は.bash_profileに記載しています。

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

良い感じにVSCodeで開発するための設定

デバッグをどうするのか、という問題は後においておくと、基本的なことはMicrosoftが提供してくれている拡張機能「Go for VIsual Studio Codeをインストールすれば良いかなと思います。ただ、この拡張機能はいくつかのGoのライブラリを使うことを前提としていますので、以下の通り必要なものをインストールしてしまいます。

$ go get -u -v github.com/ramya-rao-a/go-outline
$ go get -u -v github.com/acroca/go-symbols
$ go get -u -v github.com/mdempsky/gocode
$ go get -u -v github.com/rogpeppe/godef
$ go get -u -v golang.org/x/tools/cmd/godoc
$ go get -u -v github.com/zmb3/gogetdoc
$ go get -u -v github.com/golang/lint/golint
$ go get -u -v github.com/fatih/gomodifytags
$ go get -u -v golang.org/x/tools/cmd/gorename
$ go get -u -v sourcegraph.com/sqs/goreturns
$ go get -u -v golang.org/x/tools/cmd/goimports
$ go get -u -v github.com/cweill/gotests/...
$ go get -u -v golang.org/x/tools/cmd/guru
$ go get -u -v github.com/josharian/impl
$ go get -u -v github.com/haya14busa/goplay/cmd/goplay
$ go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
$ go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
$ go get -u -v github.com/alecthomas/gometalinter

その後、gometailinterで諸々のフォーマッタなどを一括インストールします。

$ gometalinter --install

これで、一先ずの準備は整いました。

ついでに、今後の学習でお手軽にGo言語の文法などを確認できるように、対話シェル(REPL)も導入しておこうと思います。 いくつか新しいものが出てきているようですが、私はgoreを使うことにしました。

$ go get -u github.com/motemen/gore

goreの使い方などは今後学習を進めながら都度紹介をしようかと思います。

これで自分で予定していた環境は最低限揃いましたので、ここはら一歩一歩Go言語の学習をしながら、社内ツールを作り込んでいきます。

ということで本日はここまで。