RubyMineのコードジャンプ機能は本当にすごい！！困ったときはCommand+Bを押すべし！


## はじめに

昨日のRubyMineアドベントカレンダーは @LuckOfWise さんの「[僕がRubyMineを使い始めたたった１つの理由](http://qiita.com/LuckOfWise/items/c961a046d40a20436932)」でした。

この記事の中では「Command + クリック」でコードジャンプする方法が紹介されていましたが、僕はいつも「Command + B」を使っています。
見た感じ、どちらも同じ機能っぽいです。

このコードジャンプ機能、本当に強力で超便利です。
個人的には「RubyMineを使うと確実に生産性が高くなる理由」のトップ3に入ると思います。

今回の記事はこのコードジャンプ機能をもう少し詳しく紹介します。

## 自分で定義した変数やメソッドにジャンプ！

`fruit_params`って何でしょう？とりあえずカーソルを置いてCommand + B！

![Screen Shot 2014-12-10 at 4.18.30.png](https://qiita-image-store.s3.amazonaws.com/0/7465/f94ef3df-fad3-f9a3-3aa1-78ff0ea7a7c5.png "Screen Shot 2014-12-10 at 4.18.30.png")

お、メソッドだった！

![Screen Shot 2014-12-10 at 4.19.14.png](https://qiita-image-store.s3.amazonaws.com/0/7465/b3278392-177d-ffb3-54c8-f70d0a07ed19.png "Screen Shot 2014-12-10 at 4.19.14.png")

## Viewの中からジャンプ！

ViewからControllerへジャンプすることもできます。
`@fruits`ってどこで定義したんだったっけ－？Command + B！

![Screen Shot 2014-12-10 at 4.20.30.png](https://qiita-image-store.s3.amazonaws.com/0/7465/fd8ef762-85e2-7c5a-1409-ca44ef9db662.png "Screen Shot 2014-12-10 at 4.20.30.png")

そうか、Controllerの中で定義してた！

![Screen Shot 2014-12-10 at 4.20.40.png](https://qiita-image-store.s3.amazonaws.com/0/7465/6fddd670-3413-3c73-4d6d-4fd0fbc11c9a.png "Screen Shot 2014-12-10 at 4.20.40.png")

## gemのメソッドにジャンプ！

gemを使うととっても便利なんですが、たくさん使いすぎるとどのgemがどのメソッドを提供しているのかわからなくなってきます。
そんなときでもRubyMineがあれば簡単に定義元にジャンプすることができます。

たとえば、この`require`ってだれがどこで定義してるの？？Command + B！

![Screen Shot 2014-12-10 at 4.26.58.png](https://qiita-image-store.s3.amazonaws.com/0/7465/de9687af-d47d-f1da-2536-8e06cea8c134.png "Screen Shot 2014-12-10 at 4.26.58.png")

お、こんなところにあった！

![Screen Shot 2014-12-10 at 4.27.16.png](https://qiita-image-store.s3.amazonaws.com/0/7465/a872a874-0b42-c7d1-7979-98f16bef0b83.png "Screen Shot 2014-12-10 at 4.27.16.png")

ふむふむ、strong_parametersの中だったのか。

![Screen Shot 2014-12-10 at 4.27.37.png](https://qiita-image-store.s3.amazonaws.com/0/7465/52eb8241-a682-fcda-6689-d1d89ee3f7c0.png "Screen Shot 2014-12-10 at 4.27.37.png")

### ソースツリーの中でファイルの場所を確認することもできます

Projectペインの設定でAutoscroll from Sourceというオプションがあります。
これを付けると今開いているファイルに応じてソースツリーを開いてくれます。

というわけでこのオプションを付けておくと、

![Screen Shot 2014-12-10 at 4.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/7465/739231c7-22aa-940c-dad7-392506e687ee.png "Screen Shot 2014-12-10 at 4.27.55.png")

ソースツリーの中でファイルの場所を確認することができます。
「ここにあるのか」ということが視覚的にわかって便利です。

![Screen Shot 2014-12-10 at 4.28.21.png](https://qiita-image-store.s3.amazonaws.com/0/7465/78a0525d-debb-b5b3-a6cd-3b49f5f008dd.png "Screen Shot 2014-12-10 at 4.28.21.png")

## Partial viewにも飛んじゃいます。

ViewをDRYにしようと思うと、partialがよく登場します。
DRYになるのはいいんですが、partialばっかりになるとpartial viewを行ったり来たりするのが大変です。

そんなときにもCommand + B！
"form" viewを探してみましょう。

![Screen Shot 2014-12-10 at 4.44.59.png](https://qiita-image-store.s3.amazonaws.com/0/7465/67108c4e-60cd-88f3-7fcd-3284d9280319.png "Screen Shot 2014-12-10 at 4.44.59.png")

はい、見つかりました！

![Screen Shot 2014-12-10 at 4.45.26.png](https://qiita-image-store.s3.amazonaws.com/0/7465/b2bbac80-0052-5209-b55f-2d4094da2903.png "Screen Shot 2014-12-10 at 4.45.26.png")

### さっき開いてたファイルに戻りたい？

ジャンプ前のファイルに戻りたいときは Command + [ です。
Command + ] はその反対で1つ先のファイルへ進みます。


## Rubyだけじゃない！JSやCoffeeScriptでもジャンプできちゃいます

こちらはCoffeeScriptのコードです。
`sortable` ってなんだ？こんなjQueryプラグインいつ入れたっけ？
そーれ、Command + B！

![Screen Shot 2014-12-10 at 4.35.38.png](https://qiita-image-store.s3.amazonaws.com/0/7465/722742e6-a911-f576-aade-87dada11f1ec.png "Screen Shot 2014-12-10 at 4.35.38.png")

はい、`sortable`の定義元はこちらです！

![Screen Shot 2014-12-10 at 4.36.17.png](https://qiita-image-store.s3.amazonaws.com/0/7465/add98eb1-4a9f-6bd9-0e24-2356d5235008.png "Screen Shot 2014-12-10 at 4.36.17.png")

### 複数の候補が表示される場合もあります

絶対にコレ！と決めきれない場合はRubyMineが候補を表示してくれます。
たとえばさっきの `sortable` では jquery-ui-railsとcapybaraが候補に表示されました。
テストコードではないので、ここはjquery-ui-railsでしょうね。

![Screen Shot 2014-12-10 at 4.35.57.png](https://qiita-image-store.s3.amazonaws.com/0/7465/6c16756c-ec58-f1c2-a4c2-241d6c73a9a4.png "Screen Shot 2014-12-10 at 4.35.57.png")

## sassでもいいんですよ？

"bootstrap"ってどこにあるの？教えて、RubyMine！
Command + B！！

![Screen Shot 2014-12-10 at 4.41.32.png](https://qiita-image-store.s3.amazonaws.com/0/7465/b35f65bb-cdd2-89fd-9fd9-046991d9a250.png "Screen Shot 2014-12-10 at 4.41.32.png")

「はい、こちらです。」（RubyMine氏）

![Screen Shot 2014-12-10 at 4.41.48.png](https://qiita-image-store.s3.amazonaws.com/0/7465/37249862-62b4-1d94-9c07-6468e6871e77.png "Screen Shot 2014-12-10 at 4.41.48.png")

## さらにCucumberのstep definitionにまでジャンプしてくれるなんて！！

Cucumberは非プログラマにとっては読みやすいテストツールですが、そのぶんプログラマにはちょっと負担の高いツールだったりします。

うまく動かないテストをデバッグするときはstep definitionの定義元を探すのに四苦八苦したりすることもあると思います。
でも大丈夫。RubyMineがあればそんなときでも定義元にジャンプできます。

というわけでやってみましょう。
Cucumberのシナリオを開いて、カーソルを移動して、Command + B！

![Screen Shot 2014-12-10 at 5.02.47.png](https://qiita-image-store.s3.amazonaws.com/0/7465/8022e30f-85bc-5ef7-0767-f7088afeff6c.png "Screen Shot 2014-12-10 at 5.02.47.png")

おー、こんなところにあったのね！

![Screen Shot 2014-12-10 at 5.07.38.png](https://qiita-image-store.s3.amazonaws.com/0/7465/92c49442-bcbf-34ed-44fb-d8a4ae5dc10d.png "Screen Shot 2014-12-10 at 5.07.38.png")

## たまにジャンプできない場合もあります

Rubyは動的型付言語なので、静的なコード解析で必ず定義元が見つかるとは限りません。
定義元を推測できない場合、「できません」とお断りされる場合があります

![Screen Shot 2014-12-10 at 5.19.36.png](https://qiita-image-store.s3.amazonaws.com/0/7465/cd7d592f-e833-e0e7-988d-3403bd7b10bf.png "Screen Shot 2014-12-10 at 5.19.36.png")

とはいえ、十分実用的なレベルでジャンプしてくれるので、百発百中でなくとも僕は満足しています。

## まとめ：Command + Bを使えばデバッグやコードリーディングの作業効率が飛躍的に高まります！

というわけで今回はRubyMineのコードジャンプ機能を紹介しました。

ご覧の通り、RubyMineはありとあらゆるコードにジャンプしてくれます。
コードを見てその正体がわからなかったときは、とりあえず「Command + B」しましょう。
そうすればRubyMineが定義元へ案内してくれます。

普通に開発するときはもちろん、うまく動かないコードをデバッグしたり、gemのコードリーディングをしたりするときも本当に便利です。
先日公開した「[RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い](http://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)」という記事を書くときにもRubyMineは大活躍しています。
あっちこっちでCommand + Bして「おー、このメソッドはこんなところで定義されていたのか！！」という発見を繰り返してました。

もしかすると、他のテキストエディタでも頑張れば同じようなことができるのかもしれません。
しかし、やり方を調べたり、プラグインをインストールしたりする手間は絶対に発生します。

一方、RubyMineならインストールするだけですぐに高機能なコードジャンプが使えるようになります。
確かにRubyMineは有料のIDEです。
しかし[年間1万～2.5万の出費（ライセンスによる）](http://samuraism.com/products/jetbrains/rubymine)で日々の開発がこれだけ効率化されるのであれば、十分な費用対効果が得られるはずです。

「Rubyって楽しいんだけど、どこでクラスやメソッドが定義されてるのかわかりにくいんだよな～」と思っている方はぜひRubyMineの導入を検討してみてください！

[Ruby on Rails IDE :: JetBrains RubyMine](https://www.jetbrains.com/ruby/)
![Screen Shot 2014-12-10 at 14.36.12.png](https://qiita-image-store.s3.amazonaws.com/0/7465/7d95e229-833d-c1e1-e96c-c9d92628c5e7.png)

### あわせて読みたい

[メインの開発ツールをVimからRubyMineに変更した理由](http://qiita.com/jnchito/items/cb05bb14d89095e5cc0b)
RubyMineアドベントカレンダーの1日目の記事です。
なぜVimからRubyMineに乗り換えたのか、という理由を書いてみました。

[Rubyでメソッドの定義場所を見つける方法](http://qiita.com/jnchito/items/fc8a61b421d026a23ffe)
RubyMineを使っていない頃はこんなふうにメソッドの定義場所を探していました。
ごめんなさい、この時代に戻るのはもう無理です。。。