Goに2ヶ月ほど前に入門しました。
普段はVimをメインエディタとして使っているのですが、リファクタリング・デバッグ・コードジャンプ・補完などの機能がビルトインされたGoglandを使ってみたら思いのほか使用感が良く、あっという間に気に入ってしまったので、これからGoで開発を始めようかなと思ってらっしゃる方に是非Goglandでの開発をオススメしたいので私なりの設定方法やノウハウなどを投稿します。
環境
MacBook Pro (Retina, 13-inch, Early 2013)
macOS Sierra Version 10.12.5
準備
Goglandのダウンロードサイトはこちらです。
Goglandは現在Early Access Program
です。
現在は無料で提供されていますが、いずれ有料になると思います。
JetBrainsさんの他のツールは約800円/月ぐらいなので、Goglandもおそらくそれぐらいの金額になるのではないでしょうか。
PyCharmのCommunity Editionのように、無料で提供してもらえる方法も選択肢として用意して頂ければ有難いですが。
ただ、お金を払っても使う価値は充分にあると思っています。
私の現在のGoglandのバージョンは1.0です。(2017/09/10現在)
GoglandでのGOROOT, GOPATHの扱い方について
GoはGOROOT
とGOPATH
という環境変数があり、これらを設定しなければいけませんが、Goglandではプロジェクトごとにそれらを設定出来るので便利です。
GOROOT --- Goディレクトリ(実行バイナリが含まれた)のルート
GOPATH --- Goで開発する際のワーキングディレクトリのパス
また下記はGoglandのセットアップについてのドキュメントですが、It's recommended to keep all Go code in single a workspace with the following layout:
と言っているように、1つのworkspaceにすべてのGoコードを置いたほうがいい、と言っています。
しかし、たとえばプロジェクト毎にGoのバージョンを変えたい、パッケージの依存問題などをあらかじめヘッジしておきたい、などの理由で厳密にプロジェクト毎にGOROOTやGOPATHを指定したい場合があるかと思います。
そういった場合でも、Goglandではまったくストレスを感じません。
例えば下記のようにproject-1
project-2
という2つのプロジェクトがある時、project-1
ではproject-1-path
をGOPATH
に設定し、project-2
ではproject-2-path
をGOPATH
に設定すると、お互いのパッケージを共有で使用しないため、それぞれのプロジェクトがお互いに干渉しあうことなく開発できます。
.
├── project-1-path
│ └── src
│ └── project-1
│ └── main.go
└── project-2-path
└── src
└── project-2
└── main.go
この辺りはどういう風に開発したいか、ということだと思いますので一概にどちらが良いとは言えないかもしれません。
ですが、Goglandでスマートに切り替えが出来るなら、こういったディレクトリの切り方も有りではないかと思っています。
go_1.7.5
、go_1.8.3
というように、Goのバージョン単位でworkspaceを作るのもいいかもしれませんね。
プロジェクトを始める
実際にproject-1
を読み込んでみます。
(下記project-1
の構造が出来ている、という前提です)
└── project-1-path
└── src
└── project-1
└── main.go
Open Project
を選択
project-1
を選択して実行
これでproject-1
を開発する準備が出来ました。
テーマを設定する
個人的な好みですが、私はなんでもなるべく黒っぽい画面で開発したいです。
そのほうが何となくエンジニアっぽいからです(笑)。
左上のGogland-EAP
-> Preference
-> Appearance & Behavior
-> Appearance
上部のThem
のDefault
をDarcula
にします。
プロジェクト固有のGOPATH、GOROOT設定
GOROOT
先ほど言ったように、これが簡単に出来るのがGoglandの魅力の1つだと思ったところです。
Gogland-EAP
-> Preference
-> Go
-> GOROOT
Goがインストールされていればセレクトボックスから自動で選択出来るようになっていると思います。
GOPATH
Gogland-EAP
-> Preference
-> Go
-> GOPATH
Use GOPATH that's defined in system environment
のチェックを外し、+
ボタンを押して先ほどのルートのディレクトリproject-1-path
を選択します。
└── project-1-path
└── src
└── project-1
└── main.go
これで、project-1だけのGOROOT、GOPATHが設定出来ました。
プラグインを整理してシンプルにする
私は出来るだけシンプルに使いたかったので、最初から用意されているプラグインをあまり使わないように設定しました。
画面がごちゃごちゃするよりもシンプルにすっきり使えたほうが個人的に好きなのでそうしています。
GitHub
やDatabase
、REST Client
、Terminal
などは他のもので代用出来るのでわざわざGoglandのプラグインでやる必要も無いと思っているし、多分プラグインだと結局機能が足りなくて専用のものを使うことになるだろうと思うからです。
よって、割り切ってこれらはばっさり使わないように設定しておくとスッキリするかと思います。
Gogland-EAP
-> Preference
-> Plugins
私の場合、今はGo
とGo IDE
以外を全部外しています。
IdeaVIM、TypoScript Plugin
といってもPlugin全体を否定するわけではないので、自分にとって必要なものはインストールしました。
私にとっては上記2つは必要だと思ったのでインストールしました。
Pluginsの画面から、Browse repositories...
をクリックし、上記を検索してインストールします。
Typoチェッカーは他にもありましたが、★の多さでTypoScript Plugins
にしました。
私の場合、View
のToolbar
やStatus bar
などのチェックも外して下記のようなエディタだけの画面にしています。
Toolbar
などを使って何か操作することは普段はあまり無いですし、私は画面いっぱいにエディタを表示したいので最終的にこのようなシンプルな画面にしました。
キーバインド
あまりたくさんキーバインドを覚えるのは大変なので、よく使うものだけ覚えるようにしました。
あと、少しカスタムもしました。
「ファイル検索」「右のタブへ移動」「左のタブへ移動」がカスタムです。
キーバインド | 動作 |
---|---|
command + 1 | プロジェクトツリー開閉 |
command + 4 | Runウィンドウ開閉 |
command + 5 | デバッグウィンドウ開閉 |
command + f | ファイル検索 |
command + → | 右のタブへ移動 |
command + ← | 左のタブへ移動 |
「ファイル検索」のキーマップ設定は、 Gogland-EAP
-> Preference
-> Keymap
-> Main menu
-> Navigate
-> File
です。
dommand + f
ですぐにファイルサーチが出来るようになりました。
「右のタブへ移動」「左のタブへ移動」は、 よく使っているiTerm
のタブ動作と同じにしました。
Keymap
設定画面の右上の検索でtab
を入力して検索すると、Select Next Tab
とSelect Previous Tab
という項目が引っかかるので、設定します。
Runコンフィギュレーション
次は実際にGoアプリケーションを動かすところです。
main.go
を準備します。
package main
import (
"log"
)
func main() {
str := "Hoge"
log.Println(str)
}
Run
-> Edit Configurations
でRun設定画面を開き、左上の+
ボタンを押してGo Application
を選択します。
Name
を適当に設定し、Run kind
をpackageにし、pathやdirectoryを設定してApply
を押してOKします。
あとはRun
から先ほど名前を付けたRun 'run'
を選択し、実行します。
Runウィンドウが開いて実行されました。
Runウィンドウはcommand + 4
で開閉出来ます。
デバッグ
合わせてデバッグも試します。
ブレイクポイントを仕込みます。
この状態でRun
からDebug 'run'
を選択し、実行します。
ブレイクポイントを仕込んだ場所で、実行がストップしていることが確認出来ると思います。
str
の中身も確認出来ています。
デバッグウィンドウはcommand + 5
で開閉出来ます。
デバッグのコンソールを見ると分かるのですが、Goglandにdlv
が含まれていて、dlv
でデバッグしています。
GOROOT=/usr/local/Cellar/go/1.8.3/libexec
GOPATH=/Users/maedamasaki/go/project-1-path
/usr/local/Cellar/go/1.8.3/libexec/bin/go build -i -o /private/var/folders/h8/1hkjksjn6hn72q1x4ym362dr0000gn/T/rungo -gcflags "-N -l" project-1
"/Users/maedamasaki/Library/Application Support/Gogland1.0/intellij-go/lib/dlv/mac/dlv" --listen=localhost:63412 --headless=true --api-version=2 --backend=default exec /private/var/folders/h8/1hkjksjn6hn72q1x4ym362dr0000gn/T/rungo --
API server listening at: 127.0.0.1:63412
2017/09/09 20:46:11 Hoge
Process finished with exit code 0
ちなみにテストについても同様にRunとDebugが可能です。
Run
-> Edit Configurations
で+
ボタンを押した時にGo Test
を選択してテストのコンフィグレーションを作成すると、Run
からテストが実行出来るようになります。
外部パッケージインストール
残念ながら、GoglandにはPyCharmのように外部パッケージをインストールする機能は現時点では無いようです。
しょうがないので私はコマンドラインから実行してインストールしています。
今後、Goglandに外部パッケージ管理機能が追加されるかもしれませんが、現在のところは無さそうです。
試しにORMのgorm
をインストールしてみます。
main.go
に"github.com/jinzhu/gorm"
のimportを追加します。
project-1
の直下でgo get -t -d -v ./...
でインストールするのですが、その際にプロジェクトで指定したGOROOTとGOPATHを指定してインストールします。
$ GOROOT=/usr/local/Cellar/go/1.8.3/libexec \
GOPATH=/Users/maedamasaki/go/project-1-path \
go get -t -d -v ./...
インストール出来たらmain.go
で確認してみます。
(外部パッケージのGoglandでの読込には多少時間がかかる場合があります)
ちゃんと補完が効いていて、Goglandで認識出来ていることが確認出来ました。
glideなどで管理している場合のパッケージ管理も同様です。
いかがでしたでしょうか。
私がGoを気に入っている点はとにかく早いことですが、Goglandの動きも非常に軽快なのでGoの開発にマッチしていると思います。
本記事がこれからGoをGoglandで開発される方の一助になれば幸いです。