GoglandでオススメのGo快適開発環境構築方法

  • 34
    Like
  • 0
    Comment

Goに2ヶ月ほど前に入門しました。

普段はVimをメインエディタとして使っているのですが、リファクタリング・デバッグ・コードジャンプ・補完などの機能がビルトインされたGoglandを使ってみたら思いのほか使用感が良く、あっという間に気に入ってしまったので、これからGoで開発を始めようかなと思ってらっしゃる方に是非Goglandでの開発をオススメしたいので私なりの設定方法やノウハウなどを投稿します。

環境

MacBook Pro (Retina, 13-inch, Early 2013)
macOS Sierra Version 10.12.5

準備

Goglandのダウンロードサイトはこちらです。

Gogland Early Access Program

Goglandは現在Early Access Programです。
現在は無料で提供されていますが、いずれ有料になると思います。
JetBrainsさんの他のツールは約800円/月ぐらいなので、Goglandもおそらくそれぐらいの金額になるのではないでしょうか。
PyCharmのCommunity Editionのように、無料で提供してもらえる方法も選択肢として用意して頂ければ有難いですが。
ただ、お金を払っても使う価値は充分にあると思っています。

私の現在のGoglandのバージョンは1.0です。(2017/09/10現在)

GoglandでのGOROOT, GOPATHの扱い方について

GoはGOROOTGOPATHという環境変数があり、これらを設定しなければいけませんが、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コードを置いたほうがいい、と言っています。

Getting Started with Gogland

しかし、たとえばプロジェクト毎にGoのバージョンを変えたい、パッケージの依存問題などをあらかじめヘッジしておきたい、などの理由で厳密にプロジェクト毎にGOROOTやGOPATHを指定したい場合があるかと思います。
そういった場合でも、Goglandではまったくストレスを感じません。

例えば下記のようにproject-1 project-2という2つのプロジェクトがある時、project-1ではproject-1-pathGOPATHに設定し、project-2ではproject-2-pathGOPATHに設定すると、お互いのパッケージを共有で使用しないため、それぞれのプロジェクトがお互いに干渉しあうことなく開発できます。

.
├── project-1-path
│   └── src
│       └── project-1
│           └── main.go
└── project-2-path
    └── src
        └── project-2
            └── main.go

この辺りはどういう風に開発したいか、ということだと思いますので一概にどちらが良いとは言えないかもしれません。
ですが、Goglandでスマートに切り替えが出来るなら、こういったディレクトリの切り方も有りではないかと思っています。
go_1.7.5go_1.8.3というように、Goのバージョン単位でworkspaceを作るのもいいかもしれませんね。

プロジェクトを始める

実際にproject-1を読み込んでみます。
(下記project-1の構造が出来ている、という前提です)

└── project-1-path
    └── src
        └── project-1
            └── main.go

Open Projectを選択

start.png


project-1を選択して実行

project-1.png

これでproject-1を開発する準備が出来ました。

テーマを設定する

個人的な好みですが、私はなんでもなるべく黒っぽい画面で開発したいです。
そのほうが何となくエンジニアっぽいからです(笑)。

左上のGogland-EAP -> Preference -> Appearance & Behavior -> Appearance

上部のThemDefaultDarculaにします。

thema.png

プロジェクト固有のGOPATH、GOROOT設定

GOROOT

先ほど言ったように、これが簡単に出来るのがGoglandの魅力の1つだと思ったところです。

Gogland-EAP -> Preference -> Go -> GOROOT

Goがインストールされていればセレクトボックスから自動で選択出来るようになっていると思います。

goroot.png

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

image.png

これで、project-1だけのGOROOT、GOPATHが設定出来ました。

プラグインを整理してシンプルにする

私は出来るだけシンプルに使いたかったので、最初から用意されているプラグインをあまり使わないように設定しました。
画面がごちゃごちゃするよりもシンプルにすっきり使えたほうが個人的に好きなのでそうしています。
GitHubDatabaseREST ClientTerminalなどは他のもので代用出来るのでわざわざGoglandのプラグインでやる必要も無いと思っているし、多分プラグインだと結局機能が足りなくて専用のものを使うことになるだろうと思うからです。
よって、割り切ってこれらはばっさり使わないように設定しておくとスッキリするかと思います。

Gogland-EAP -> Preference -> Plugins

私の場合、今はGoGo IDE以外を全部外しています。

IdeaVIM、TypoScript Plugin

といってもPlugin全体を否定するわけではないので、自分にとって必要なものはインストールしました。
私にとっては上記2つは必要だと思ったのでインストールしました。

Pluginsの画面から、Browse repositories...をクリックし、上記を検索してインストールします。
Typoチェッカーは他にもありましたが、★の多さでTypoScript Pluginsにしました。

image.png


私の場合、ViewToolbarStatus barなどのチェックも外して下記のようなエディタだけの画面にしています。
Toolbarなどを使って何か操作することは普段はあまり無いですし、私は画面いっぱいにエディタを表示したいので最終的にこのようなシンプルな画面にしました。

image.png

キーバインド

あまりたくさんキーバインドを覚えるのは大変なので、よく使うものだけ覚えるようにしました。
あと、少しカスタムもしました。
「ファイル検索」「右のタブへ移動」「左のタブへ移動」がカスタムです。

キーバインド 動作
command + 1 プロジェクトツリー開閉
command + 4 Runウィンドウ開閉
command + 5 デバッグウィンドウ開閉
command + f ファイル検索
command + → 右のタブへ移動
command + ← 左のタブへ移動


「ファイル検索」のキーマップ設定は、 Gogland-EAP -> Preference -> Keymap -> Main menu -> Navigate -> File です。

image.png

dommand + fですぐにファイルサーチが出来るようになりました。

image.png


「右のタブへ移動」「左のタブへ移動」は、 よく使っているiTermのタブ動作と同じにしました。
Keymap設定画面の右上の検索でtabを入力して検索すると、Select Next TabSelect Previous Tabという項目が引っかかるので、設定します。

image.png

Runコンフィギュレーション

次は実際にGoアプリケーションを動かすところです。

main.goを準備します。

package main

import (
    "log"
)

func main() {
    str := "Hoge"
    log.Println(str)
}

Run -> Edit Configurations でRun設定画面を開き、左上の+ボタンを押してGo Applicationを選択します。

image.png

Nameを適当に設定し、Run kindをpackageにし、pathやdirectoryを設定してApplyを押してOKします。

image.png

あとはRunから先ほど名前を付けたRun 'run'を選択し、実行します。
Runウィンドウが開いて実行されました。
Runウィンドウはcommand + 4で開閉出来ます。

image.png

デバッグ

合わせてデバッグも試します。
ブレイクポイントを仕込みます。

image.png

この状態でRunからDebug 'run'を選択し、実行します。

ブレイクポイントを仕込んだ場所で、実行がストップしていることが確認出来ると思います。
strの中身も確認出来ています。
デバッグウィンドウはcommand + 5で開閉出来ます。

image.png


デバッグのコンソールを見ると分かるのですが、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からテストが実行出来るようになります。

image.png

外部パッケージインストール

残念ながら、GoglandにはPyCharmのように外部パッケージをインストールする機能は現時点では無いようです。

しょうがないので私はコマンドラインから実行してインストールしています。
今後、Goglandに外部パッケージ管理機能が追加されるかもしれませんが、現在のところは無さそうです。

試しにORMのgormをインストールしてみます。

main.go"github.com/jinzhu/gorm"のimportを追加します。

image.png

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で認識出来ていることが確認出来ました。

image.png

glideなどで管理している場合のパッケージ管理も同様です。


いかがでしたでしょうか。
私がGoを気に入っている点はとにかく早いことですが、Goglandの動きも非常に軽快なのでGoの開発にマッチしていると思います。
本記事がこれからGoをGoglandで開発される方の一助になれば幸いです。