Gogland - Go 言語用 IDE - を使ってみた (2016年12月版)

# この記事は

この記事は [ACCESS Advent Calendar 2016](http://qiita.com/advent-calendar/2016/access) 24日目の記事です。
ACCESS の @pankona です。

さてクリスマスイブですが、そのタイミングを図ったかどうかはいざ知らず、
JetBrains から Go 言語用の IDEである「Gogland」の EAP 版が提供され始めました。

Gogland 公式はこちら → https://www.jetbrains.com/go/

JetBrains さんからのクリスマスプレゼントや！ということで、使ってみた具合なんかをレポートしてみたいと思います。今回試すのは EAP 版 (Early Access Program 版) ということもあり、今後、正式リリースまでには色々変更があるものと思われますが、その点はご承知置きいただければと思います。

ちなみに、EAP 版は Windows、MacOS、Linux 版が提供されていますが、今回は **Linux 版**を用いてトライしていきます。

![gogland_1.png](https://qiita-image-store.s3.amazonaws.com/0/36552/8244f89a-7a01-858b-e72c-8b54a8249063.png)
図1. 見た目。Android Studio とか使っている人には馴染み深いのでは。

# 設定諸々

IDE を初回に起動した後、諸々設定が必要な模様。

## GOROOT

さっそくコーディングを始めようと思った矢先、`GOROOT is not defined` 等とエディタの左肩に表示されている。このへんは今のところ自分で設定しなければならない模様。

メニューバーの `File` → `Settings...` を開くと、その中で `Go` という設定項目がある。
ここで GOROOT が設定できる (既に環境が存在している場合は、使う GOROOT がサジェストされる) 。

## GOPATH

この分なら `GOPATH` の設定も必要かな、等と思っていたが、上記の GOROOT を設定したら何故か自動的に設定してくれた。どうやら色々設定できるようになっていて、

* システム (環境変数) で設定されている GOPATH を用いる
* プロジェクト毎に GOPATH を設定する

あたりができるようになっている模様。プロジェクト毎に `GOPATH` 設定したいパターンもあると思うので、これはちょっとうれしい設定項目のような気がする。

# デフォルトの見た目が 1 タブ 8 スペース

これは完全に個人の好みの問題であるが、やたらインデントが深いのが気になった。
デフォルトの見た目は 1 タブ 8 スペース。何故なのか。いやインデントがスペース 8 っていうスタイルもあるけれどね。
1 タブは 4 スペースにしといた。
1 タブのスペース幅は、メニューバーの `File` → `Settings...` を開いて、 `Editor` → `Code Style` → `Go` のところで設定できる。

---

基本的には上記の3点 (タブ幅は別に設定しなくてもいいが) だけ設定しておけば、とりあえず使い始めることができる。とても簡単。
以下はその他の気になった点。

---

# コードの補完

何も設定していない状態でも、もうガンガンコード補完出してくれて、しかも速い。
これはとても気持ち良いぞ。

# オートフォーマッター (`gofmt`、`goimports`)

Go 言語の良いところのひとつとして `gofmt` や `goimports` によるコードの自動整形が挙げられると思うが、このへんは Intellij IDEA の IDE シリーズではおそらくお馴染みの、右クリックメニュー等から呼び出せる**「Refactoring」**の項目に装備されていた。もちろんショートカットキーもあって、デフォルトでは**「Ctrl+Alt+L」**。
できれば保存したときに勝手にやってほしいという気持ちがあるが…？どっかで設定できるか…？マクロ設定しなきゃダメか…？

地味に `import` のソート順を `gofmt` にするか `goimports` にするかみたいな指定もできて渋い。
`import` のソートは**「Ctl+Alt+O」**。メニューから `Optimize imports` というのを選んでもできる。できれば保存したときに勝手にやってほしいという気持ちがあるが…？

# デバッグ

IDE ならではというか、やはりグラフィカルなデバッグ機能は強力。
一般的なデバッグに必要な機能は備えていて、

* ブレークポイントを貼る、ステップ実行する
* ブレークポイントで止めて、周辺の変数の値を参照する

このへんは GUI 操作で可能。
このへんの機能はもはやデバッガといえば当たり前かもしれないが、`delve` や `gdb` 等の CUI なデバッガを使うのがイヤだという人は少なからずいると思われるので、これさえあれば Go 初めてみようかなって人もいるのではないかと。

ちなみに Intellij IDEA + Go プラグインだと、このへんはまともに操作できない場合があったりして (時々ステップ実行できないみたいなのあった) ので、このへんちゃんと動くのは朗報だったりする。

# Plugin

Intellj IDEA の IDE にはプラグインの仕組みがあるが、Gogland にも同様の機能がある。とりあえず IdeaVim を入れておいた。

# テスト関連

テストに関しての機能をぼちぼち探してみたところ、

* 設定でテストに使うコマンド (`go test`、`go check`、`go bench` あたり) が指定できる。  
(デフォルトは `go test`) 。
* 左側に出ているソースツリー上でパッケージを右クリックして Run を実行すると、パッケージ内に含まれるテストが全部実行される。
* もちろん単品で指定してテストを実行することもできる。
* ソースを変更したら自動でテストを流す、みたいなオプションもある。
* カバレッジも測定できるらしい (設定項目はあったが、実際のカバレッジをどこで見たらよいのか見つけられなかった) 。

---

# 所感

* GUI のデバッグ機能はやっぱり良い。
* 保存時に `go fmt` やら `go imports` するのはどうやるのか分からず終いであるが、ぜひ出来てほしい。個人的にはもうデフォルトにしてほしい勢い。
* 特にエディタの設定せずにコード補完できるのも良い (IDE なら当たり前っちゃ当たり前か) 。
* いままでは快適にコーディングするには、例えば vim 使うときなら vim + vim-go プラグインの設定あたりが必要で、チームみんなで導入しようと思ったらなかなか敷居が高い気持ちがあった。しかし今後はとりあえずみんなでこれ使っておけばいいんじゃないの、というぐらいの気持ちにはなれた。まともに設定された vim + vim-go プラグイン並の機能はあるように感じる。

---

ということで Gogland の所感をお伝えいたしましたが、いかがでしたでしょうか。
これを期に Go 言語初めてみてもいいのよ。ちなみに私は業務ではほぼ使っていません。しかし Go 言語大好きです。

明日はクリスマスですね。Advent Calendar も大詰めです。
明日は @kasaharu の出番です。お見逃しなく！