こんにちは、hachi8833です。今回はRubyMineの簡単な紹介に続いてRubyMineにIntelliJのGoプラグインを導入した話を書きます。
RubyMineについて
RubyMine、いいですよね。Ruby on RailsのIDE(統合開発環境)として非常に有名です。
少々メモリとCPUパワーは使いますが、強力なインデックス化機能だけでもお金を払う価値があると思います。
BPSのWebチームでは、部長のmorimorihogeさんを始めとしてRubyMineの愛用者が何人もいます。
強力なインデックス化機能
JetBrains製品全般に言えることですが、関連するライブラリを自動検索してインデックス化する機能が信じられないくらい強力です。
最初に起動してライブラリのパスを指定すると(場合によってはそれすら不要で)、必要なライブラリの内容を検出してくれます。最初は少々時間がかかりますが、インデックス化の優先順位を下げることもできます(図)。
後はコードのクラスやメソッドにカーソルを置いてNavigate > Declaration (Macのショートカットはコマンド+B、以下同文)を実行すれば、ただちに関連ライブラリが表示されます。ジャンプ先が複数ある場合は図のように選択肢が表示されます。Navigate > Back(コマンド+[)を実行すれば即元に戻ります。
繰り返しますが、RubyMineの全自動インデックス化機能だけでもお金払う価値あると思います。
私もSublime時代はコードジャンプのためにctagsとかを導入してみたりしましたが、正直かったるいの一言でした。
リソースがこれだけ豊富になった時代に、何で人間様がインデックス作れと指示しなきゃならんのかと。あれこれ設定しなければいけないのも時間を無駄にした感。
Rubyの場合メタプログラミングが強力すぎて、一発で正確なライブラリを開けるとは限らないのですが、これはRubyMineのせいではありませんね。
Railsでコマンド+Bするとときどき中身が空のスタブメソッドにたどり着くことがありますが、型が確定していないときだと予測が外れることがあるので、YARD記法に則って書くことで型が確定して正確にジャンプできるようになります。
迷ったら即Shiftキー2連打
RubyMineは、迷ったときはShiftキーを2連打すれば、メソッドでもクラスでもヘルプでも設定でもまとめてインクリメンタル検索して実行できます。いきなり使いこなそうとすると苦痛なので、当面Shiftキー2連発でどうにかするぐらいのつもりで始めるのがよいでしょう。
しかも設定画面ではありとあらゆる設定項目をインクリメンタルにフィルタできるので、迷うことはありません。
機能の名前を覚えるのがポイント
Shiftキー2連打で欲しい機能を探すには、機能の名前を覚えておく必要があります。機能は山ほどあるので、印刷して横に置いて少しずつ覚えるぐらいがよいでしょう。
RubyMineでGo言語やElixirを!
プラグインでできちゃうんです
ここからが本題です。JetBrains製品のプラグインは、多くの製品でそのまま使えます。そしてその中にはGo言語やElixirのプラグインもしっかりあるのです。
RubyMineの強力な全自動インデックス化機能は、Go言語やElixirでもそのまま使えるのです。もちろんRubyとGoが混じったりなんかしません。きちんと別腹になります。
Go言語は最近やっとベンダリング(vendoring)機能が少し使えるようになったので、$GOPATHのパッケージの他に、プロジェクトローカルのvendorディレクトリにもパッケージを置くことができます。RubyMineのGoプラグインは、どちらもしっかりインデックス化し、vendorにパッケージがあればそっちにジャンプしてくれます。
頼みもしないのにここまでやってくれるとは…キャラメルでもいかが?
IntelliJ + Goプラグインに打ちのめされる
私も最初はGo言語をSublimeで書いてましたが、JetBrainsのIntelliJ無料版にGoプラグインをインストールしてみたところ、RubyMineと同じ全自動インデックスがシャッキリポンと使えて感激したのでした。
しかしここでひとつ困ったことがありました。
行きがかり上、私のプロジェクトにはElectronとJavaScriptのコードが居候しています。ところがIntelliJの無料版では絶妙にJavaScriptをシンタックスハイライトしてくれないのです。うろおぼえですが、たしかインデックス化もJavaScriptではスルーされました。
これはJetBrainsの販売戦略であり、IntelliJでJavaScriptをシンタックスハイライトしたかったら有料版にする必要があります。
んーまたひとつIDEを増やすのか。ただでさえでかいのに。
RubyMineでやればIDEを増やさなくてよい
そう思ってふとRubyMineにGoプラグインをインストールしてみたのです。これが大成功でした。
- RubyMineだけ買えば済む
- 有償版なのでJavaScriptの制限がない
- RubyMineの機能がそっくりそのまま使える
- キーバインドをあっちのIDEやこっちのIDEで設定して回らなくて済む
- RailsやGo言語のインデックス情報が混じったりしない
- プロジェクトタブにGopherくんのアイコンが小さいながらもしっかり表示される
少々設定をカスタマイズするだけで、保存時やGitコミット時などにgo fmt
などを自動で走らせることも簡単にできます(参考記事)。参考記事ではFile Watchersプラグインを使ってますが、他の方法でも可能です。
go test
やgo build
などもRubyMineの[Run]のインターフェイスで統一的に設定できます。
☆4000近くは伊達ではありませんね。
まとめ
RubyMineの言語追加プラグインは本当に便利です。プラグインによっては対応しなかったり出来が落ちることがあったりするのかもしれませんが、今のところ不自由していません。
添え物的で恐縮ですが、Elixirプラグインもさっと試した限りでは快調です。
IDEやエディタは好みで選ぶものであって強要するものではありませんが、RubyMineを既に使っているのであればぜひGoプラグインもどうぞ。