7
6

More than 5 years have passed since last update.

EmacsでGo言語開発環境を構築したのでメモ

Last updated at Posted at 2016-03-30

前提条件

  • Mac (OS X El Capitan 10.11.4)
  • Homebrewインストール済み
  • Emacs

elispの書き方がある程度わかる人には問題ないとは思うけど、use-packageel-getを使ったコードを示すのでその辺の知識。

Goをインストール

Homebrewからインストールするのが楽なので

ターミナル
$ brew install go

これでインストールできるはず。インストールが終了したらgoと打って次のようなればインストールできている。

ターミナル
$ go
Go is a tool for managing Go source code.

Usage:

    go command [arguments]

The commands are:

    build       compile packages and dependencies
    clean       remove object files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         run go tool fix on packages
    fmt         run gofmt on package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

    c           calling between Go and C
    buildmode   description of build modes
    filetype    file types
    gopath      GOPATH environment variable
    environment environment variables
    importpath  import path syntax
    packages    description of package lists
    testflag    description of testing flags
    testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

GOPATHの設定

GOROOTは設定しなくても良い(?)みたいなのでGOPATH$GOPATH/binへのPATHを設定します。

GOPATHをどこに通すのが良いかは、自分にはわからないのでここでは取り敢えず次のようにします。

.bash_profile
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

GOPATHはホームディレクトリ直下にgoというフォルダを作り、そこに通します。また、PATHに対して$GOPATH/binへのパスも追加します。

Eamacsの設定

PATHを通す

Emacsでgoの恩恵を受けるためにinit.el等に次の記述を追加してパスを通します。usernameには自分のユーザー名で置き換えてください。

init.el
(setenv "GOPATH" "/Users/username/go")
(add-to-list 'exec-path (expand-file-name "/Users/username/go/bin"))

Emacsの設定の中でPATHを引き継ぐように設定していても自分の環境では2行が必要でした。理由はわかりませんが、各自動作を確認して削除しても問題ないかもしれません。

パッケージのインストール

自分は次のパッケージとコマンドを入れました。

パッケージ

  • go-mode
  • go-eldoc

コマンド

  • godef
  • goimports
  • gocode

パッケージのインストール

init.el等に以下の記述を追加し、各行の末尾でC-x C-eを押すかEmacsを再起動すればパッケージをインストールできます。(el-get-bundleを使っていること前提)

(el-get-bundle go-mode)
(el-get-bundle go-eldoc)

コマンドのインストール

コマンドはターミナルからgoコマンドを使ってインストールしていきます。

ターミナル
$ go get -v github.com/rogpeppe/godef
$ go get golang.org/x/tools/cmd/goimports
$ go get -u github.com/nsf/gocode

設定

(use-package go-mode
  :config
  (bind-keys :map go-mode-map
         ("M-." . godef-jump)
         ("M-," . pop-tag-mark))
  (add-hook 'go-mode-hook '(lambda () (setq tab-width 2)))
  (setq gofmt-command "goimports")
  (add-hook 'before-save-hook 'gofmt-before-save))

(use-package go-eldoc
  :config
  (add-hook 'go-mode-hook 'go-eldoc-setup))

簡単に説明すると

(bind-keys :map go-mode-map
         ("M-." . godef-jump)
         ("M-," . pop-tag-mark))

ここではM-.を定義ジャンプに割り当てて、M-,で元の位置に戻るようにしています。
ただし、これは簡易的な方法なので定義ジャンプで言った先でマークーを使うと正しく動作しません。
ネットの海のどこかにちゃんと動作するようにしたコードが落ちてた気がします。
定義ジャンプで他のウィンドウで開きたい人はgodef-jumpgodef-jump-other-windowに変えてください。

(add-hook 'go-mode-hook '(lambda () (setq tab-width 2)))

Go言語はインデントでタブ文字を採用しており、go-modeではEmacsではデフォルトでタブ幅が4に設定されているため、これを2にしています。
自分の場合は幅が気になったのでこうしましたが、気にならない人はいらない設定でしょう。

(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save))

これはファイルを保存する度に整形及びインポートの追加を自動で行うための設定です。
インポートを自動で追加する必要がない人は一行目を消せばおkです。
Go言語は整形するためのgofmtというコマンドを用意しているくらいなので2行目の設定はしておいた方がいいと思います。

(use-package go-eldoc
  :config
  (add-hook 'go-mode-hook 'go-eldoc-setup))

これでgo-eldocを使えるようにしています。
go-eldocはカーソル位置のメソッドのドキュメント(引数の型と帰り値の型)がmini bufferに出るようになります。


今のところこんな感じですが、helm回りのパッケージもあるみたいなのでその辺も入れてみます。

おすすめのパッケージとかコマンドあったら教えてください(>_<)

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6