RubyMineの便利な機能

会員事業部のツヤです。

f:id:tsucook:20150701094138p:plain

クックパッドにもRubyMine愛好家はいますので、社内で共有されたTipsも含め RubyMineの便利な機能を紹介したいと思います。

※ 掲載している画像は実際のサービス・プロジェクトとは一切関係ありません。(blog用です)

Remote Debugging

このために使っていると言っても過言ではないのが Remote Debugging 機能です。

どんなサービスでも複雑な要件で構成されたページは存在するもので、クックパッドも同様です。 歴史を重ねたcontrollerのbefore_actionや入り組んだpartialなどのデバッグは大変です。 binding.prylogger で頑張っていたこともありますがremote debugは優秀です。

1. Gemのインストール

Gemfile に書いてもいいのですが、IDEでDebugしない人には必要ないので別途インストールしています。

gem install ruby-debug-ide
gem install debase

2. RubyMineの設定

  • Run -> Edit Configurations -> [+] -> Ruby Remote debug

f:id:tsucook:20150701094139p:plain

事前に起動させたいサービスは別に登録しておくと、Before launch: Another Configuration に設定できます。 クックパッドでも事前に起動させたいサービスはいつかあるのでBash等で登録してあります。 RubyMineを使用しない場合はforemanで起動させています。

3. デバッグ

デバッグサーバーを起動

f:id:tsucook:20150701094140p:plain

Terminalから実行してもいいですが、Tools -> External Tools に登録しておくと便利です。

デバッグするページにアクセス

表示に関連するデバッグ以外は、Tools -> Test RESTful Web Service を利用すると便利です。

REST Client はヘッダーやパラメーター、cookieを容易に変更できるのでAPIテストに利用していますが、 ブラウザと違いページ以外のリソースにアクセスしないのでデバッグでも活躍します。

f:id:tsucook:20150701094141p:plain

ブレイクポイント

f:id:tsucook:20150701094142p:plain

コールスタック、スコープ内の変数、変数の監視などが表示されます。

コールスタックからは、プロジェクトのファイルでもGem内のファイルでも参照できます。

ブレイクポイントはControllerやModel、Viewに限らず、routes.rb などのconfigやgem内のファイルにも設定できます。

f:id:tsucook:20150701094153p:plain

便利な機能

便利な機能はたくさんありますが、ほんの一部だけ紹介したいと思います。

紹介する機能には一部プラグインが提供しているものもあります。

Search Everywhere

f:id:tsucook:20150701094143p:plain

プロジェクトが大きくなればファイルを探すのも一苦労ですが、Search Everywhere は強力に空気を読んで探してくれます。 頻繁に参照するフォルダやファイルは Favorites に登録しておくといいかもしれません。

デフォルトではダイレクトなショートカットキーは割り当てられていませんが shift 2回でダイアログが表れます。

no new line at end of file

f:id:tsucook:20150701094144p:plain

たまにこんな残念なcommitをしてしまうことがあります。 Ensure line feed at file end on Saveをチェックしておくと保存時ファイル末尾に改行を追加してくれます。

f:id:tsucook:20150701094145p:plain

Ruby Style Guid

f:id:tsucook:20150701094146p:plain

ruby初心者にもありがたいRoboCopの inspection 機能です。IDEは学ぶ機会も与えてくれます。

Ruby Style Guid でコーディングスタイル統一することは可読性を高め、保守性を向上することにつながります。 以前はcommit hookに設定してたりしましたが、コードを書いている最中に分かる方が効率的だと思います。

keymap

f:id:tsucook:20150701094147p:plain

自分は"郷に従え"派なので変更しませんが、vim, emacs など他エディタからの移行や、使い慣れたキーバインドで!と言う方には各キーマップがプリセットされています。

RubyMineは隠れ機能(隠しているのではなく探せないだけ)が豊富です。このキーマップを探ると便利機能が見つかることがあります。ぜひとも探訪して頂きたい設定です。

Tasks & Contexts

  • Tools -> Tasks & Contexts -> Configure Servers

f:id:tsucook:20150701094148p:plain

f:id:tsucook:20150701094149p:plain

チーム開発では何かしらのタスク管理ツールが使われると思いますが、メジャーなToolとは連携ができます。

タスクからブランチを作成したりもできます。 タスクごとにワークスペース(開いているファイルやウインドウ分割など)が保持されるのでタスクをうまく切り換えて運用すると便利です。

Terminal

f:id:tsucook:20150701094150p:plain

iTermでもいいのですが、IDE内で完結することができます。若干のクセ(日本語表示)があるので注意が必要です。 ログの参照やconsoleに使用しています。

PlantUML

f:id:tsucook:20150701094151p:plain

ちょっとしたシーケンス図、クラス図を書きたい。そんときは PlantUML が便利です。

シンプルな文法なので、テキスト編集でさらっと書けてしまうのが特徴です。png, svg形式で保存も出来ます。 社内の共有ツールでもPlantUMLが使用できるので、そのまま共有資料として使用することもあります。

Gfm

f:id:tsucook:20150701094152p:plain

マークダウンをGitHubのフォーマットでプレビューしてくれるので仕上がりがローカルでわかります。 分割してライブプレビューできるのはありがたいです。 Pull RequestやIssueの下書きで利用すると便利です。

普段からメモ帳としてもIDEを使ってしまっています。(ミーティングもIDE)

まとめ

長年JetBrains製品で開発していますが、未だに未開の機能がたくさんあります。

IDEに限った話ではありませんが、道具は上手に使ってこそ生きるのだと思います。これからも上手にIDEとつきあっていきたいと思います。

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/