(この記事は「ATOM で Go — プログラミング言語 Go | text.Baldanders.info」とのマルチポストです)
ATOM Editor で Go 言語のコーディング環境を整える。環境を作る度に「どうだったっけ」とあちこちサイトを巡るので,覚え書きとしてまとめておく。
例によって Windows 環境を前提にしているので,他の環境の方は適当に脳内補完してください。
開発支援ツールの導入
まずは Go 言語用の支援ツールを導入する。
(実際には後述するパッケージが不足しているツールを自動的に go get
してくれるのだが,紹介を兼ねて先に導入する)
C:> go get -v golang.org/x/tools/cmd/vet
C:> go get -v golang.org/x/tools/cmd/goimports
C:> go get -v golang.org/x/tools/cmd/oracle
C:> go get -v github.com/golang/lint/golint
C:> go get -v github.com/nsf/gocode
C:> go get -v github.com/rogpeppe/godef
golint は,いわゆる lint ツール。vet もコードの静的検査ツール。両方あると幸せになれる。
goimport はコード整形ツールで,標準の gofmt を置き換えることができ,かつ gofmt よりも若干かしこい。gocode は入力補完ツール。godef は指定したシンボルの定義定義元情報を出力するツール(出力を使って定義元へジャンプできる。実際には oracle と併用するらしい)。いずれも vim や emacs などでは有名だが ATOM でも使える。
言わずもがなだが,これらのツールには PATH を通しておくこと。 %GOPATH%\bin
フォルダにパスを通しておけばいいだろう。
go-plus パッケージの導入
では,上述のツールを操作できる go-plus パッケージを導入する。やり方は Setting(ctrl+,
)から Install してもいいし apm
コマンドを使ってもよい。
go-plus には設定項目がいくつかあるが,ほとんど既定値のままで使える。コマンドパレットから golang
をキーワードに検索すると山程機能があるのが分かるだろう。
既定ではソースファイルを保存する度にコード整形や lint 等が走る。これを制御したい場合はパッケージの Setting で以下の項目を調整すればよい。
定義ファイルへのジャンプと復帰は alt-cmd-g
および alt-shift-cmd-G
にバインドされているが Windows 環境では動かないので(コマンドパレットから起動してもいいのだが)適当なキーに再割当てするといいだろう。ファンクションキーは結構空いてるので,たとえば
Keystroke | Command | Selector |
---|---|---|
f12 |
golang:godef |
atom-text-editor[data-grammar="source go"]:not(.mini) |
shift-f12 |
golang:godef-return |
atom-text-editor[data-grammar="source go"]:not(.mini) |
とアサインするなら %USERPROFILE%\.atom\keymap.cson
に
'atom-text-editor[data-grammar="source go"]:not(.mini)':
'f12': 'golang:godef'
'shift-f12': 'golang:godef-return'
と設定すればいい。
lint や定義ファイルのジャンプは GOPATH
や GOROOT
を見て外部パッケージを判断しているのだが, gb のようなツールでは GOPATH
をコマンド内部で書き換えて実行するので lint ツールとは整合性が取れなくなる。 go-plus の設定では GOPATH
を上書き可能なので,とりあえずこれで回避する方法もある。
gb への対応は “Planned Features” に挙がってるので,将来的には小細工しなくても gb ベースの開発ができるようになるかもしれない。てか,なってほしい。
go-find-references パッケージが惜しい
go-find-references パッケージは redefiance/go-find-references を使って指定したシンボルを参照しているファイルを列挙してくれる便利ツールだが, Windows 環境ではタグジャンプが上手く動かない。どうやら C:
などのドライブレターを上手く処理できないようだ。とほほ。