Viewにもブレークポイントが張れる

遠藤大介氏(以下、遠藤):これはたまに、驚かれるんだけど。ControllerやModelにブレークポイントが張れるのは、当たり前じゃん。そんなのができなかったら、とりあえずIDEとしてどうよっていう話だから。

なんだけど、RubyMineはぶっ飛んでいて、Viewにもブレークポイントを張れるの。

植木宏氏(以下、植木):Viewに? Viewにブレークポイント?

遠藤:「どういうこと?」って思うじゃん。

植木:(笑)。

遠藤:ERBファイルってあるじゃん。ERBファイルって、「ここまで来た時、どうなってんのかな? なんか表示おかしいんだけど」とか、たまに、ちょっといやらしいバグを引くと、「なんかよくわかんねぇけどフォームが崩れる」とかあるじゃん。

なんと、ERBやHamlも1行ごとにブレークポイントを仕掛けられて、まったく同じ感じでできるんだよ。

(スライドを示して)だからここが、「_app_views_polls_new_html_erb……」になっているでしょう? その下はちゃんと、全部ActionViewとかになっていて、だから、すごくやっかいなバグを引いた時とかにしか使わないけど、Viewにも普通に何事もなくブレークポイントを張れるの。ヤバない?

植木:いやあ、これは知らなかった。

遠藤:知らないでしょう。意外とみんな、Viewにはそもそも張れないと思っているの。

植木:そういうところには張れないと思っていた。

遠藤:なんだけど、JetBrainsのヤバいところは、「えっ、Controllerにも張れるんだったら、Viewもコードなんだから張れるじゃん」的なノリで、そういうのを仕込んでくるの。しかもそれを、「当たり前にできますけど?」みたいな顔で普通に実装されているから、意外とみんな気づかないのよ。

植木:確かに。

遠藤:っていうヤバさがあって、このDebuggerはね、どれだけ命を救われたかわからない。

植木:これはHamlでも利くんですか?

遠藤:利く。ぜんぜん関係ない。ヤバいでしょ。

植木:シームレスだ。

遠藤:そうなのよ。

植木:すごい。

Diff&Mergeがクソほど優秀

遠藤:やろ? で、次よ。コードを書いていると、なんだかんだ、Commitする時とかコンフリクトした時とか、DiffとMergeをどうにかする時あるじゃん。このDiffとMergeするのが、またクソほど優秀なのよ。

植木:これを失敗するとけっこうやっかいですよね。

遠藤:そう。Commitしようと思った時とかに、とりあえず、「何が変更されたのかな?」って、Diffを見にいくじゃん。

(スライドを示して)JetBrainsのIDEのDiffは、昔からこんな感じの画面で出て、左で変化のChangesetが出ていて、青が更新されたやつで緑が新規作成なんだけど、それが全体的にこのエディターの中でも全部表現されていて、例えば一番上の「addressable」は今回新しく増えたのね。なので、緑色でここに差し込まれたようなグラフィカルになっているの。

で、今度69行目の下に、こういう右矢印みたいなのがしれっとついているじゃん。これは何だと思う?

植木:えっ、何だろう? 何だ?

遠藤:これは押すと、左のやつを右に反映できるの。

植木:そこでキャンセルするみたいな。取り消すということですか。

遠藤:そう。だから例えば、上のやつはここのtzinfoの下に何もないじゃん。右に行くと、あるじゃん。Diff見て、「あっ、ヤベっ、これ要らんコードだったわ」とかたまにあるじゃん。実験用で追加したコードだったわとか。

という時に、ここの矢印をペチッて押すと、左のないやつが右にペッて反映されるの。

植木:やめておく、みたいな。

遠藤:そう、変更されているところも全部、基本そうで。これだと緑が追加されていて、青が更新されている行で、さらにその中でこの色が変わっているところが変更されている範囲だけど、これとかも、「あっ、これは変更全部要らねぇわ」とかいったら、これをバンと押したら全部そのまま反映されたりとか。

植木:サクサクいく。これは便利ですね。

遠藤:そう。この画面の中でDiff取ってMergeするのが、メチャクチャ便利。なんだったら、上にいろいろなツールがついているんだけど、コンフリクトした時とか……あっ、コンフリクトの画面、撮っておけばよかったな。

コンフリクトすると、Mergeが問題なくできる箇所と、人間がMergeしなくちゃいけないところが入り乱れていくじゃん。ほかには、左が元で、右がその先だった時に、右のやつを1回出したいけど、左のやつ全部いかれると困るからみたいな感じのやつをどうMergeするかとか、いろいろ考えるじゃん。

植木:ありますね。

遠藤:そういう時に、「とりあえず問題ないやつ、全部Merge」というのがボタン一発でできるの。それから1件1件、本当にコンフリクトしていてヤバいところだけ比較していけて。もうね、このJetBrainsのこれだけでも使う価値あると思ったけど、マジで……。

植木:すごい。これはちなみに右側のチェックボックスは、どういう働きがある?

遠藤:これがね、確か外したりできたはず。こことほぼ同じような意味合いとかで、確かいけたはず。

植木:なるほど。

遠藤:という感じで、Diffはこの1ページしかないんだけど、だいぶ便利。マジクソ便利。

関連コードへの移動がメチャクチャ優秀

遠藤:次が3つ目で、何入れるかすげぇ悩んだんだけど、関連コードへの移動がメチャクチャ優秀で。(私は)もともとJava使いだったから、関連コードに飛ぶのは当たり前だったのよ。静的型付けで事前にコンパイルする言語だから、飛べないことなんてほぼないと思っていたの。

植木:そうですね。

遠藤:なんだけど、RubyとかLL(※Lightweight Language)とか、動的にいろいろやる言語は、そもそもコードで定義なかったりするじゃん。

植木:あります。そうですよね。はい。

遠藤:(スライドを示して)そう。かつ、ライブラリだと、そもそも「.new」とかしても、どこかわからないとか、行けないとか。

だけど、ActiveRecordのnewとかも「ActiveRecordのクラスメソッドの中にいるnewさんですね」って普通に出てくるの。

植木:すばらしい(笑)。

遠藤:ポチッと押したらフレームワークに飛べたりするんだよ。そのnewの定義がフレームワーク側にあるから。

植木:なるほど。そこの実装コードにも直接ジャンプできちゃうということですね。

遠藤:そう。Macの場合は、commandを押しながらここのnewとかに合わせてペッと押したら、これが出てくるから、シュッて飛べる。もちろんキーボードショートカットでも行けるんだけど。

こういうところの、コードの静的解析や動的な部分に対してのケアが、だいぶぶっ壊れていて、かつ、これは俺の中でだいぶ衝撃的というか、ようそこまでやるわってやつなんだけど。このshowとかnewのところに、ここにアイコンあるの、気づく?

植木:ありますね。

遠藤:で、createはないんだよね。なんと、これを押すじゃん。Viewに飛べるんだよ。

植木:おっと(笑)。

遠藤:(笑)。だから、new用のERBとかHamlの、ここをポチッと押したらシュッと移動できるの。なんだったらnewとかHamlからControllerにも戻ってこられるの。

植木:相互に行き来できると。

遠藤:そう。View側に、「Controller戻る?」みたいなアイコンがこういうところに表示されていて、ポチッと押したらこっちに戻ってこられたりするの。だから、Railsみたいな、ViewとController側のメソッドが1対1で紐付いていて、けっこう相互に移動したくなるじゃん。

植木:行き来しますよね。

遠藤:そうそうそう。みたいな時に、エディター上から、とりあえず「なんか、アイコン出てるな」みたいなやつをポチッと押すと移動できるのがめちゃクソ便利で。

植木:すごっ。いちいちファイル検索している身からすると。

遠藤:そうそう。普通するじゃん。

植木:これは、もうワンアクションですね(笑)。

遠藤:そうそう。とりあえず、new.html.erbとか検索するじゃん。

植木:そうですね。そうです。絞りたくなる。

遠藤:もちろんそっちの検索もクソほど便利なんだけど、基本的にRubyMineがそういうのを認識してくれているので、それでパッと飛べちゃう。

植木:ヤバい。

遠藤:ヤバくない? 便利すぎやろ? せやろ?

植木:(笑)。

RubyMineの何がいいか?

遠藤:そろそろ締めにいこうと思うんだけど、ほかにもいっぱい推しの機能があるんだけど、「RubyMineの何がいいか?」って話で。

最初に、無料でもがんばって、「VS Code」とかでプラグイン入れたらできるよっていう話があったんだけど、そういうやつが全部デフォルトでそもそもあるのが一番の価値で。

しかもそれがメチャクチャ高度に統合されているのね。もちろん言うても、ちょっとかゆいところに手が届かないからプラグインを入れよう、みたいなやつはどうしてもやはり出てくるし、そういうのは、職人だからこだわったほうがいいと思うんだけど。

とはいえ、デフォルトで今見せたような化け物みたいなDebuggerとか、Diffのツールとか、Viewの間を移動するとか、コード分析でそこに飛ぶとか、ほかにもDBの中を見ていくとか、いっぱいそういう機能があるんだけど、そういうのが全部ついているんだよ。

いや、もうこれは、そのすべてがオールインワンでまとまっているのがメチャクチャ価値だなと思って。しかも、この人たちはそれをずっとメンテしてくれているの。

植木:いやぁ、そうですよね。安定して使えるのが一番強いですよね。

遠藤:そう、そうなのよ。だから、これでタイトルに戻るんだけど、RubyMineはデフォルトにしてメチャクチャ揃っているから。もうね、マジでデフォルトにして至高な感じなの。

植木:(笑)。

遠藤:これは俺の個人的なイメージなんだけど、すごく研ぎ澄まされた日本刀のような美しさがあるなと思っていて。職人なので道具にはもちろんこだわりたいんだけど、その時に、ツールっていろいろなパターンがあると思うんだよ。

自分で組み立てて楽しむパターンももちろん正しいし、すでに研ぎ澄まされた日本刀みたいな道具を使うのも正しい。ただ、いろいろな正しさがある中で、俺はこの研ぎ澄まされている美しさがあふれ出るこのJetBrains製のIDEがメチャクチャ好きで。というところで、この美しさがいいなと思って、ずっと使っているっていう。

それこそが、このJetBrainsが作るIDEの魅力。過去に何度もVS Codeにもチャレンジしたし、何だったら、Atomが出た時はAtomに行ったし。

植木:(笑)。

遠藤:VS Codeが出た時はVS Codeに行ったし、次のが出たら次のを全部試すんだけど。8割はいけるのよ。でも、残りの2割が、かゆいところに手が届かなくて、いつも戻ってくるの。

JetBrains製のIDEの唯一の弱点は、重いんだよ、ちょっと。やはりJavaのVMの上で動いているから、ちょっと遅いの。なので、そこはMacのパワーを盛るっていう逃げ方をしている(笑)。

植木:(笑)。

遠藤:身も蓋もないんだけど。

植木:でも、言ったら、そこだけですよね。

遠藤:どうにかしてでも、JetBrains製のIDEが使いたいと思っていて。

植木:重いというのは確かにありますけど、そこさえクリアすればデフォルトで、もうメチャクチャ斬れる日本刀が手に入ると。

遠藤:メチャクチャ斬れるものが手に入る。だったらポチればいいじゃんという。というわけで、ひたすら好きなところを語るというような感じでございました。

植木:まだまだ氷山の一角な感じがしていますけれども……。

遠藤:まだ一角。これで……もともとプレゼン作ったのは2時間コースになっていて、がんばって削ったのよ(笑)。

植木:(笑)。むしろよくここまで削っていただいたなという感じ。この枠に収まる。この後もまだ引き続きどんどん聞きたいことはあると思いますので、質問もいろいろあるとは思いますが、ちょっと時間がちょっと押しましたので(笑)。

遠藤:すみません。押しました。読んではいたけど、そうですよね(笑)。

植木:遠藤さん、どうも発表ありがとうございました。

遠藤:ありがとうございました。