帰ってきた「しっぽのさきっちょ」

ATOM で Go — プログラミング言語 Go

今回もまた横道に逸れてツールの話。 ATOM Editor で Go 言語のコーディング環境を整える。 環境を作る度に「どうだったっけ」とあちこちサイトを巡るので,覚え書きとしてまとめておく。

例によって Windows 環境を前提にしているので,他の環境の方は適当に脳内補完してください。

(2016年3月: go-plus バージョン 4 以降で大きく構成が変わったので改訂した)

開発支援ツールの導入

まずは Go 言語用の支援ツールを導入する(更新時には -u オプションを付ける)。

$ go get -v github.com/alecthomas/gometalinter
$ go get -v golang.org/x/tools/cmd/gorename
$ go get -v github.com/nsf/gocode
$ go get -v github.com/rogpeppe/godef
$ go get -v golang.org/x/tools/cmd/oracle

gometalinter は所謂 lint ツールなのだが,単独で動作するのではなく,巷にいくつかある lint ツール(標準の vet を含む)を統合的に管理することができる。 以下のコマンドで gometalinter が使用する lint ツールをまとめてインストールする。

$ gometalinter --install --update
Installing:
  structcheck
  interfacer
  goconst
  golint
  goimports
  dupl
  errcheck
  aligncheck
  gocyclo
  ineffassign
  unconvert
  gotype
  varcheck
  deadcode
  lll

gorename は関数や変数の名前を変更したい時に使うツールで,文法を解釈してくれるため副作用が少ないのが特徴。 gocode は入力補完ツール。 godef は指定したシンボルの定義定義元情報を出力するツール(出力を使って定義元へジャンプできる。実際には oracle と併用するらしい)。 いずれも vim や emacs などでは有名だが ATOM でも使える。

言わずもがなだが,これらのツールには PATH を通しておくこと。 %GOPATH%\bin フォルダにパスを通しておけばいいだろう。

go-plus パッケージの導入

では,上述のツールを操作できる go-plus パッケージを導入する。 やり方は Settings 画面(ctrl+, で起動)で Install してもいいし apm コマンドを使ってもよい。

最近の go-plus は複数のサブ・パッケージで構成されているらしい。 go-plus を導入すると以下のサブ・パッケージも自動的に導入される。

コマンドパレットから呼び出されるコマンドもかなり整理されているようだ。

menu for go-plus (ATOM)
menu for go-plus (ATOM)

go-plus ではサブ・パッケージごとに設定項目がいくつかあるが,ほとんど既定値のままで使える。 たとえば gofmt サブ・パッケージの設定画面は以下のようになっている。

settings for gofmt@go-plus (ATOM)
settings for gofmt@go-plus (ATOM)

定義元へのジャンプと復帰は alt-cmd-g および alt-shift-cmd-G にバインドされているが Windows 環境では動かないので(コマンドパレットから起動してもいいのだが)適当なキーに再割当てするといいだろう。 ファンクションキーは結構空いてるので,たとえば

Keystroke Command Selector
f12 golang:godef atom-text-editor[data-grammar~="go"]:not([mini])
shift-f12 golang:godef-return atom-text-editor[data-grammar~="go"]:not([mini])

とアサインするなら %USERPROFILE%\.atom\keymap.cson

'atom-text-editor[data-grammar~="go"]:not([mini])':
  'f12': 'golang:godef'
  'shift-f12': 'golang:godef-return'

と設定すればいい。

lint や定義元のジャンプは GOPATHGOROOT を見て外部パッケージを判断しているのだが, gb のようなツールでは GOPATH をコマンド内部で書き換えて実行するので lint ツールとは整合性が取れなくなる。 go-plus の設定では GOPATH を上書きすることも可能なので,とりあえずこれで回避する方法もある2

settings for go-plus (ATOM)
settings for go-plus (ATOM)

go-plus 4.0.1 および gometalinter-linter 1.0.2 で上記の設定が効いてない模様。コマンドプロンプトななどで環境変数 GOPATH を上書き設定してからプロジェクト・フォルダ上で atom.com . と起動すれば上手くいくようだ)

language-go パッケージは同梱済み

language-go は Core パッケージに入っているためインストール時点で既に入っている3language-go の機能で目を引くのはやはり Snippets だろう。 以下はその一部(パッケージの Settings に一覧がある)。

Snippets for golang (ATOM)
Snippets for golang (ATOM)

こんなよぅけ覚えれるか! まぁとりあえず,よく使うものだけ覚えておけばいいのだろうけど。

使い方は,トリガーとなる文字列を入力して tab キーを押す。 たとえば func と入力して tab キーを押すと

func ()  {

}

と展開される。 iferr なら

if err != nil {
    return
}

となる。

ブックマーク

Go 言語に関するブックマーク集はこちら


  1. goimport はコード整形ツールで,標準の gofmt を置き換えることができ,かつ gofmt よりも若干かしこい。 gometalinter からインストールされる。 [return]
  2. GOPATHgo-plus の設定で上書きする場合は “Environment Overrides Config” を無効にすること。なんでかこれ,毎回ハマるんだよなぁ。 [return]
  3. language でインストール済みパッケージを検索するとメジャーな言語は大抵入っているのが分かる。 [return]