Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた

こんにちは、メルカリアッテの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を採用した経緯は@ttsuruokaatte 開発の技術:Golang と Google App Engineを御覧ください。

デモで紹介された機能

シンボルへのジャンプ

機能 ショートカット
Enter symbol name Cmd + Opt + O

f:id:sonatard:20170317120948g:plain

ファイル構造の表示とジャンプ

機能 ショートカット
File Structure Cmd + F12

もう1度 cmd + F12 を入力するとパッケージ構造を表示します。

f:id:sonatard:20170317121021g:plain

実装しているInterfaceへジャンプ

機能 ショートカット
Super Method Cmd + U

f:id:sonatard:20170317121053g:plain

変更の取り消し

直近の変更を取り消すCmd + zとは異なり、カーソル位置の変更箇所をまとめて取り消します。

カーソルを変更箇所にあわせずに実行するとファイル全体の変更を 取り消すことができます。

機能 ショートカット
Version Control Systems -> Rollback Opt + Cmd + Z

マウスを使って変更した箇所の色がついている部分をクリックしてRollbackを選択することでも実行できます。

f:id:sonatard:20170317121200g:plain

既存コードを括りだしメソッドを作成

機能 ショートカット
Code -> Extract Method… Opt + Cmd + M

マウスを使ってコードを選択 -> 右クリック -> Refactor -> Extract -> Methodでも実行できます。

f:id:sonatard:20170316175256g:plain

ファイル検索

機能 ショートカット
Navigate - > File Shift + Cmd + O

f:id:sonatard:20170317121242g:plain

補完

機能 ショートカット
Basic Completion Ctrl + Space

fmpfmt.Printlnなどの補完ができます。またCtrl + Spaceを押さなくても入力するだけでBasic Completionは動作します。

f:id:sonatard:20170317121309g:plain

Godocの参照

機能 ショートカット
Quick Documentation F1

F1を複数回押していくとウィンドウのサイズが変わります。

補完の最中ではなくても開くことができます。

f:id:sonatard:20170317121337g:plain

パラメータ情報の確認

機能 ショートカット
Parameter Info Cmd + P

メソッドの引数に与えている変数の型情報などを確認することができます。

f:id:sonatard:20170317121358g:plain

最近開いたファイル

機能 ショートカット
Recent Files Cmd + E

f:id:sonatard:20170317121420g:plain

履歴

Local History -> Show History

Gitのログとは別にエディタ独自の履歴管理が可能です。

Revertすることも可能で、GitのようにRevertした履歴も残ります。

f:id:sonatard:20170317121439g:plain

Debug

機能 ショートカット
Debug Ctrl + D

ブレイクポイントの設定、ブレイクポイントの一覧の確認、変数の書き換えなどができます。

Goglandのデバッガはderekparker/delveを利用しているようです。

f:id:sonatard:20170317121555g:plain

Test

関数の横を右クリックしてRun 関数名 with coverageを実行します。

またカバレッジも取得することができます。

f:id:sonatard:20170317121735g:plain

Gitの履歴

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

f:id:sonatard:20170317121810g:plain

関数の返り値をポップアップで表示

機能 ショートカット
Expression type Ctrl + Shift + P

f:id:sonatard:20170317122043g:plain

Interface実装

機能 ショートカット
Implement Interface Ctrl + I

f:id:sonatard:20170317124925g:plain

ソウゾウ社員おすすめ機能

保存時にgo imports or go fmt

ファイル保存時に自動的にgo importsを実行することができます。

設定方法は「Preferences -> Go -> On Save -> go imports」を選択。

f:id:sonatard:20170317125143p:plain

Semantic highlighting

変数ごとに色を変更する。

設定方法は「Preferences -> Editor -> Colors & Fonts Language Defaults -> Semantic highlighting」にチェック。

f:id:sonatard:20170317125433p:plain

設定オフ

f:id:sonatard:20170317133437p:plain

設定オン

f:id:sonatard:20170317133449p:plain

Interfaceを実装しているメソッドへジャンプ

機能 ショートカット
Navigate -> Declaration Cmd + B
Navigate -> Implementation Cmd + Opt + B
Navigate -> Forward Cmd + Opt + →
Navigate -> Back Cmd + Opt + ←

f:id:sonatard:20170317125536g:plain

Live Template

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

forr -> Tab

f:id:sonatard:20170317125623g:plain

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

f:id:sonatard:20170317133625p:plain

Struct Tag の挿入

機能 ショートカット
Insert Live Template Cmd + J or 入力してTab

f:id:sonatard:20170317125715g:plain

構造を解釈した選択範囲の拡大と縮小

機能 ショートカット
Extend Selection Opt + ↑
Shrink Selection Opt + ↓

f:id:sonatard:20170317125955g:plain

リネーム

機能 ショートカット
Rename Shift + F6

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

f:id:sonatard:20170317130037g:plain

Git blameからgit logやGitHubを開く

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

f:id:sonatard:20170317130139g:plain

EveryWhere Search

Goglandはファイル、構造、機能など様々な要素に対してフィルタリングして選択や実行をすることができますが、これらのすべてを対象にフィルタリングする機能がEveryWhere Searchです。

Goglandは多くの機能が存在するため最初はマウスからの操作やEveryWhere Searchを利用し、実行頻度が高いものはショートカットを覚えていくといいと思います。

f:id:sonatard:20170317132502g:plain

当日の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で開発したい」 というみなさんからの応募をお待ちしています!

メルカリ採用情報 - ソフトウェアエンジニア(Backend System)/ Software Engineer (Backend System)

メルカリ採用情報 - ソフトウェアエンジニア(Site Reliability)/ Software Engineer (Site Reliability)

ソウゾウ採用情報 - エンジニア Server Side Engineer