goimportsを使ってIntelliJ IDEA でGoのコードのimportを手軽に整理する

  • 32
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

import文を削るのが手間

GoをIntelliJで書いていると、必要なimportは結構よしなに追加してくれます。
ところが、そのimportしたパッケージが不要になった場合(使用してるコードを削除する)、そのimportを削除するところまではやってくれません。
Goは不要なimport文があるとコンパイルが通らないので、自分でimport文を削らなければならずちょっと手間です。

GoImportsを使う

Goimportsというツールが有ります。
https://github.com/bradfitz/goimports

これを使用することで、不要なimportsの削除、標準パッケージであればimportsの追加をしてくれていい感じに整理もしてくれます。

導入は簡単で

go get golang.org/x/tools/cmd/goimports

をすればOK
あとはコマンドライン上で、goimports -w hoge.goとするだけでファイルのimportを整理してくれます。
ちなみに -w 付けないと標準出力に吐き出されます。

IntelliJ IDEAから呼び出す

これでいつでも整理できるようにはなりましたが、都度コンソールから実行するのは不便です。
IntelliJから呼び出せるようにしましょう。
まず一旦 goimportsのフルパスを確認。

$ which goimports -> /Users/yourname/bin/goimports

で、適当な場所(今回は/usr/local/bin/ )にシェルスクリプトを作成します。

$ touch /usr/local/bin/goimp.sh
$ chmod +x /usr/local/bin/goimp.sh

中身をこんな感じに編集

goimp.sh

#!/bin/sh

if [[ $1 == *.go ]]
then
         /Users/yourname/bin/goimports -w $1
fi

きちんと実行できるかは試しておいたほうがよいです。

$ /usr/local/bin/goimp.sh /Users/yourname/src/hoge/fuga.go

きちんとimportが整理されているようなら、外部ツールとして登録します。
Preference(⌘+,)を開いて、IDE SettingsExternal Toolsを開きます。で、追加ボタン。

Preferences.png

名前は自分のわかりやすいもの、Groupも適当にGolangとかにしておくと良いです。
Open Consoleのチェックは外しておいた方がイチイチ実行するたびにターミナル出てこなくて楽です。
Programのところにはさっきのシェルスクリプト、Parameters には、右のinsert macroから $FilePath$ を選びましょう。

大体こんな感じ

2014-12-24 0.59.19.png

あとは保存してOK.

実行するには、メニューのToolsからさっきのGroupに入れればOK.
Goの方に入れたいけど出来ないのかな。

2014-12-24 1.01.28.png

Macro化

これでIntelliJからいつでもgoimportsが実行できるようになりました。
しかしまだ、面倒ですね。
出来たら保存のアクション(IntelliJは基本的に自動保存なので、明示的に⌘+Sする必要はないですが)の時に都度実行されて欲しい感じもあります。

なので、この動作をmacroとして設定します。

メニューの EditMacroStart recording macroを選びます。
2014-12-24 1.05.03.png

ここからマクロとして記録されてしまうのでIntelliJの中では余計な動作をしないようにしましょう。

  1. Tools からさっきのgoimportsを実行する
  2. “File から Save allを実行する
  3. 再度 EditMacro から Stop recording macroを選ぶ
  4. 適当な名前をつける。

ここからはもうマクロじゃないので適当に。

これでマクロとして一連の操作が保存されたので、キーボードショートカットして登録すればOK。

Preference(⌘+,)を開いて、IDE SettingsKeymap を開いて、さっき付けたマクロの名前で検索。
あとは自分の分かりやすいショートカット、今回はctrl+sをアサインして終わり。
都度、ctrl+sを押すだけでgoimportsが実行されるようになりました。

よく見たら設定にあった

スクリーンショット 2014-12-24 1.14.56.png

まぁでもこれを応用して、
gofmt
golint https://github.com/golang/lint
goimports https://github.com/bradfitz/goimports

をまとめて実行してくれるようなシェルスクリプトにすれば、結構いい感じになるんじゃないかと。

テスト環境
・Mac OSX 10.9.5
・IntelliJ IDEA CE 13.1.4
・Go 1.3

参考
http://marcesher.com/2014/03/30/intellij-idea-run-goimports-on-file-save/