Go開発環境セットアップ


オレオレですが私のGo開発環境を解説します。

Goのインストール

状況によって以下の3通りを使い分けてます。

  • 標準配布パッケージによるインストール
  • パッケージマネージャによるインストール
  • gvmによるGo複数バージョンの管理

もうひとつソースからインストールという方法がありますが、 環境ごとにすこしづつ面倒なことがあるのでオススメしません。

標準配布パッケージによるインストール

ここから対象となるアーキテクチャやOSにあった最新安定板バイナリ配布アーカイブをダウンロードします。

Linux向けの手順

tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

macOS向けの手順

  • 「go1.9.2.darwin-amd64.pkg」をダウンロード
  • ファイルを開いてインストールウイザードに従って進める

Windows向けの手順

  • 「go1.9.2.windows-amd64.msi」をダウンロード
  • ファイルを開いてインストールウイザードに従って進める

あとWindowsに標準でgitがないので

パッケージマネージャによるインストール

ubuntuの場合

# for 16.10 or later
sudo add-apt-repository ppa:gophers/archive
sudo apt update
sudo apt-get install golang-1.9-go
# for 16.04(LTS)
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

macOSの場合brewコマンドをインストールしておき、

brew install go

Windowsの場合 Chocolateyをインストールして 管理者用コンソールを開いておいて、

choco install golang

(この方法はGoのバージョンが若干古いです)

gvmによるGo複数バージョンの管理

この方法はプロジェクトごとにGoのバージョンを使い分けていたり、 tipバージョンのGoを試したりするのに向いています。

まずはgvmというツールをインストールします。

ただしWindows環境ではgvmは動きません。 そのかわりgovm+etc.(mingwその他)の利用で Go複数バージョンの管理ができますがパワーユーザー向けです。 なので詳細は割愛します。

以下をターミナルで実行すると以後新しいターミナルでgvmが利用可能になります。 (これを行う前にはexport -n GOPATHしておいた方が良さそう)

export -n GOPATH
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

「$HOME/.gvm/」にgvmバイナリやGoソース、各バージョンのインストールフォルダが格納されます。 「$HOME/.bash_profile」の末尾にセットアップスクリプトが追記されます。 gvmの利用をやめる場合はこれらの削除を行えば良いです。

また、標準やパッケージマネージャによるインストールしたGoとも共存できますので gvmのインストール直後にインストール済み一覧を表示させてみると、

$ gvm list

gvm gos (installed)

   system

というように「system」というエントリが表示されます。

インストール可能な一覧を表示。

$ gvm listall

gvm gos (available)

   go1
   go1.0.1
   ...
   go1.9
   go1.9.2
   ...

Go指定バージョンをインストール(-Bはバイナリ配布を用いたインストール)。

gvm install go1.8.5 -B

よくあるgvmの解説には「-B」をつけていないものが多いのですが、 その場合ソースからGo本体のビルドを行おうとします。 そうすると、Go1.4が必要になり、さらにgccまたはmingwが必要と 芋づる式にいろんなツールのインストールが必要になってしまいます。 さらに一部のOSではGo1.4が動作しないため手詰まりになることも。 なので特に理由がなければ「-B」をつけることをオススメします!

インストール済み一覧を表示。

$ gvm list

gvm gos (installed)

   go1.8.5
   system

利用するGoバージョンの一時的な切り替え。

$ gvm use go1.8.5
Now using version go1.8.5
$ go version
go version go1.8.5 darwin/amd64
$ gvm list

gvm gos (installed)

=> go1.8.5
   system

利用するGoバージョンの恒久的な切り替え。 常用するバージョンを指定しましょう。

$ gvm use system --default
Now using version system

開発中(tip)バージョンのインストールを行うには「-B」なしで「master」を指定します。 (いずれかのGoバージョンが利用可能である必要があります)

$ gvm install master
Downloading Go source...
Installing master...
 * Compiling...
master successfully installed!
$ gvm use master
Now using version master
$ go version
go version master darwin/amd64

ちなみにtipバージョンのドキュメントは https://tip.golang.org にあります。

gvm利用の場合、GOPATHやGOROOTの指定やPATHへの追加はgvmに任せた方が良いです。

常用するGo製ツールがあるなら以下の設定例を追加するのをオススメします。 例として後述のdirenvなどが$GOPATH/binにインストールされますが、 これをgvmで他のGoバージョンに切り替えた時に参照されなくなるので binフォルダだけをPATHに含めておきます。

cd;ln -s .gvm/pkgsets/system/global/bin bin
echo PATH=\~/bin:\$PATH >> .bashrc

direnvのインストール

特定のワーキングフォルダに入ると自動的に環境変数を整えたりできるユーティリティ。 ワーキングフォルダから出るとちゃんと元の設定に復元してくれます。

インストール

go get -u github.com/direnv/direnv

使用例

$ mkdir ~/work
$ cd ~/work
$ echo layout go > .envrc
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
$ direnv allow
direnv: loading .envrc
direnv: export ~GOPATH ~PATH
$ go env GOPATH
<$HOME>/work:<$HOME>/.gvm/pkgsets/system/global

これで~/work/src/github.com/username/sample1などでGoのsample1プロジェクトの開発ができます。 また複数のワーキングフォルダを使い分けることもできるでしょう。 あと、ググれば情報があると思いますが、direnvにてgvmのGoバージョン指定を強制したりできます。 つまりワーキングフォルダではgo1.8.5を使うようにしてその外のフォルダではsystemのgo1.9.2を使うといったことができます。

delveのインストール

Go専用の強力なデバッガです。 初心者の頃に挙動を追ったり、ディープな問題を追跡したりするのに使います。

インストール

go get github.com/derekparker/delve/cmd/dlv

これの使い方は後述のVisualStudioCodeなどの高機能なエディタと組み合わせて使うのがオススメです。

Visual Studio Codeのインストール

MicrosoftのTypeScript製コードエディタです。

標準の方法またはHomebrew Caskでインストールできます。

brew cask install visual-studio-code

拡張機能から'Rich Go Language support for Visual Studio Code'をインストールしましょう。 追加作業として「再読み込み」をした後、右下に「Analysis Tools Missing」という赤字をクリックして問い合わせにYesと答えると依存するGoツール群を一気にインストールします。 これでコード補完や定義ジャンプ、保存時の自動整形などが機能するようになります。

さらに前述のdelveがインストールされていればGoのコードのデバッガが使えるようになります。 Goのソースコード書いて行番号の左をつつくと ブレークポイントを設定できます。 メニューのデバッグ開始してmainの1行目で止めてみたところ。 debug 変数を参照したり、ここからステップ実行して見たり出来ますよ!

  • ウォッチ式
  • 条件付きブレークポイント

などを活用してトラブルシューティングをGUIで。

Go for VSCode その他の便利機能

  • パッケージ名やインスタンス名のあとに「.」(ドット)を打つとその場所に適した候補の選択肢がポップアップします。関数引数などでもそこに入る型の候補だけが表示されます。
  • シンボルにカーソルをホバーさせるとドキュメントがヒント表示されます。
  • コマンドパレットから'Generate Unit Test for ...'を呼ぶと、テストコードの雛形が生成されます。
  • 'Test File'にてそのファイルのテストが実行されます。
  • 正しくコピペされたコードが参照しているパッケージは保存(コード整形)時に自動的にimport文に加えられます。

まとめ

  • gvmでGoをインストールすると自在にバージョン切り替えできます。
  • direnvをインストールすると環境変数設定のスイッチを自動化できます。
  • Visual Studio Code は比較的軽量で必要十分な機能セット持っててオススメです。
  • delveは挙動の追跡に便利。(でも記述した挙動と期待する挙動の差がなくなってくるとあまり使わなくなるような気がします)