こんにちは、メルカリアッテのAPIチームでGoエンジニアをしている@sonatardです。
この記事は弊社ソウゾウの社員である@tenntennが運営しているgolang.tokyo #4のブログ枠として書いています。
golang.tokyo #4では、ゲストスピーカーとしてJetBrains社のSergey Ignatov氏にご登壇いただきGoglandをライブデモ形式で紹介して頂きました。
メルカリアッテではGoogle App Engine for Go (GAE/Go) を全面的に採用しており、サーバサイドエンジニアの中でもGoglandの利用者が増えています。そこでSergey Ignatov氏に紹介して頂いた機能とソウゾウ エンジニアたちが利用しているお気に入りの機能をまとめてご紹介したいと思います。
ソウゾウがGAE/Goを採用した経緯は@ttsuruokaのatte 開発の技術:Golang と Google App Engineを御覧ください。
デモで紹介された機能
シンボルへのジャンプ
| 機能 | ショートカット |
|---|---|
| Enter symbol name | Cmd + Opt + O |

ファイル構造の表示とジャンプ
| 機能 | ショートカット |
|---|---|
| File Structure | Cmd + F12 |
もう1度 cmd + F12 を入力するとパッケージ構造を表示します。

実装しているInterfaceへジャンプ
| 機能 | ショートカット |
|---|---|
| Super Method | Cmd + U |

変更の取り消し
直近の変更を取り消すCmd + zとは異なり、カーソル位置の変更箇所をまとめて取り消します。
カーソルを変更箇所にあわせずに実行するとファイル全体の変更を
取り消すことができます。
| 機能 | ショートカット |
|---|---|
| Version Control Systems -> Rollback | Opt + Cmd + Z |
マウスを使って変更した箇所の色がついている部分をクリックしてRollbackを選択することでも実行できます。

既存コードを括りだしメソッドを作成
| 機能 | ショートカット |
|---|---|
| Code -> Extract Method… | Opt + Cmd + M |
マウスを使ってコードを選択 -> 右クリック -> Refactor -> Extract -> Methodでも実行できます。

ファイル検索
| 機能 | ショートカット |
|---|---|
| Navigate – > File | Shift + Cmd + O |

補完
| 機能 | ショートカット |
|---|---|
| Basic Completion | Ctrl + Space |
fmp→fmt.Printlnなどの補完ができます。またCtrl + Spaceを押さなくても入力するだけでBasic Completionは動作します。

Godocの参照
| 機能 | ショートカット |
|---|---|
| Quick Documentation | F1 |
F1を複数回押していくとウィンドウのサイズが変わります。
補完の最中ではなくても開くことができます。

パラメータ情報の確認
| 機能 | ショートカット |
|---|---|
| Parameter Info | Cmd + P |
メソッドの引数に与えている変数の型情報などを確認することができます。

最近開いたファイル
| 機能 | ショートカット |
|---|---|
| Recent Files | Cmd + E |

履歴
Local History -> Show History
Gitのログとは別にエディタ独自の履歴管理が可能です。
Revertすることも可能で、GitのようにRevertした履歴も残ります。

Debug
| 機能 | ショートカット |
|---|---|
| Debug | Ctrl + D |
ブレイクポイントの設定、ブレイクポイントの一覧の確認、変数の書き換えなどができます。
Goglandのデバッガはderekparker/delveを利用しているようです。

Test
関数の横を右クリックしてRun 関数名 with coverageを実行します。
またカバレッジも取得することができます。

Gitの履歴
ファイルごとのgit logを参照。グラフの閲覧やGitHubを開くこともできます。

関数の返り値をポップアップで表示
| 機能 | ショートカット |
|---|---|
| Expression type | Ctrl + Shift + P |

Interface実装
| 機能 | ショートカット |
|---|---|
| Implement Interface | Ctrl + I |

ソウゾウ社員おすすめ機能
保存時にgo imports or go fmt
ファイル保存時に自動的にgo importsを実行することができます。
設定方法は「Preferences -> Go -> On Save -> go imports」を選択。

Semantic highlighting
変数ごとに色を変更する。
設定方法は「Preferences -> Editor -> Colors & Fonts Language Defaults -> Semantic highlighting」にチェック。

設定オフ

設定オン

Interfaceを実装しているメソッドへジャンプ
| 機能 | ショートカット |
|---|---|
| Navigate -> Declaration | Cmd + B |
| Navigate -> Implementation | Cmd + Opt + B |
| Navigate -> Forward | Cmd + Opt + → |
| Navigate -> Back | Cmd + Opt + ← |

Live Template
登録されているテンプレート一覧をTab補完することで挿入できます。
forr -> Tab

テンプレート一覧は、「Preferences -> Editor -> Live Templates -> Go」から確認できます。

Struct Tag の挿入
| 機能 | ショートカット |
|---|---|
| Insert Live Template | Cmd + J or 入力してTab |

構造を解釈した選択範囲の拡大と縮小
| 機能 | ショートカット |
|---|---|
| Extend Selection | Opt + ↑ |
| Shrink Selection | Opt + ↓ |

リネーム
| 機能 | ショートカット |
|---|---|
| Rename | Shift + F6 |
もう1度Shift+F6を押すとダイアログが表示されるので「Search in coments and strings」にチェックを入れることで、コメントやテキストもリネームすることができます。

Git blameからgit logやGitHubを開く
コードの左側の各行にGit blameの結果を表示することができます。
またそこからgit logやGitHubを開くことができます。

EveryWhere Search
Goglandはファイル、構造、機能など様々な要素に対してフィルタリングして選択や実行をすることができますが、これらのすべてを対象にフィルタリングする機能がEveryWhere Searchです。
Goglandは多くの機能が存在するため最初はマウスからの操作やEveryWhere Searchを利用し、実行頻度が高いものはショートカットを覚えていくといいと思います。

当日のQ&A
Q. GoglandにIntelliJ IDEAのRubyやPythonプラグインをインストールすることはできますか? 普段IntelliJ IDEAを使っていてGoやPythonやRubyを書いているので、GoglandとIntelliJのアプリを切り替えたくありません。
Ans. RubyやPythonプラグインはIntelliJ IDEA向けのものです。またGoglandのベースのバージョンは、今のIntelliJ IDEAのリリースバージョンより新しいものなので互換性がありません。
筆者補足
2017/3/21にGoglandの機能を切り出したGo Pluginがリリースされました。またIntelliJ IDEAもバージョンアップしています。これによりIntelliJ IDEAだけでRuby, Python, Goを書くことが可能になりました。
Q. IntelliJ IDEA + (旧)Go PluginとGoglandの違いはなんですか?
Ans. Goglandにしかない機能があります。例えばGoglandではInterfaceを実装しているstructの一覧表示やgo test、デバッガなどを使うことができます。
筆者補足
先述の通りGo Pluginがリリースされました。動作確認してみたところInterfaceまわりの機能、go test、デバッガなどにも対応しているため違いはなくなったようです。
Q. 正式リリースはいつですか?
Ans. 2017年末を予定しています。
筆者補足
現在はEarly Access Programであり無料で利用することができます。
Q. GAE/Goのデバッグをサポートする予定はありますか?
Ans. どれくらい欲しい人がいるかによります。欲しい機能がある場合はissue trackerがあるのでそちらへお願いします。
筆者補足
GAE/Goに関するissueはGO-1897 GAE support for delveになります。JetBrainsでは解決できない課題が残っており対応はもう少し先になりそうです。
Q. ライブデモで画面下にGoglandで入力したショートカットを表示していましたが、どのように実現していますか?
Ans. Presentation Assistant Pluginを使っています。発表やペアプロで使うと相手が何を入力しているのかわかるので大変便利です。
まとめ
GoglandにはIntelliJ IDEAで実績のある様々な便利な機能やプラグインに加えてGo特有の機能も搭載されており、標準で大変便利に利用することができます。これからGoを始めようという方で、エディターに悩んでいる方は1度利用してみていかがでしょうか?
利用しているエディタとのキーバインドの差異で悩まれている場合には、VimmerはIdeaVimプラグインのインストール、EmacsユーザはキーバインドをEmacsに変更するなどをお試しください。
ちなみにGoをEmacsで書いていた私は、何故かIdeaVimプラグインをインストールして使っています。
さいごに
メルカリでは多くのチームがGoを採用しています。「Goで開発したい」 というみなさんからの応募をお待ちしています!



