C# IDE Rider の魅力
久しぶりの記事投稿となります。エンジニアの常山です。
今日は私が愛用している IDE(統合開発環境) の JetBrains Rider について紹介させていただきます。
Windows で C# .NET を開発する際は Visual Studio 一択だと思われがちですが、Rider も皆様の一つの選択肢になればと思います。
Riderとは?
Rider を一言で言い表すならば C# に特化したプロフェッショナル向けのコーディングエディターです。Javaなどをよく書く方はご存じかもしれませんが JetBrains が提供する IntelliJ という Java の IDE があり、Rider もその派生にあたります。
導入の経緯
私はBoostDraft入社前からRiderを愛用していました。
Riderを使い始めるまでは JetBrains製のVisual StudioアドインであるReSharper(R#)というエディター拡張を使っていました。R#はVisualStudioにインテグレートされていてCode提案やコードのクオリティをチェックをしてくれるアドインです。詳細な機能についてはRiderと同じ部分が多いので後程本文のRiderの機能紹介の部分で説明させていただきます。
もともとこのReSharperに惚れ込んで使っていたのですが、当時250を超えるC# project を一つのソリューションファイルで扱っていたことがあり、何か操作をするたびにVisual Studioが数秒~数十秒固まるといった事が日常茶飯事で、非常にフラストレーションが溜まっていました。その時にJetBrainsが独自にIDEを作っているという事を知ってトライアルをしてみたのがきっかけです。RiderはR#のコアとなる機能を標準で使えるようになっている夢のようなIDEです。
図:プロジェクト数が250を超えるソリューションでは頻繁にVisualStudioがフリーズが発生。
Riderの導入によってこのパフォーマンスの問題は大きく改善されていて、Visual Studioでは上記のような巨大プロジェクトを扱っているとインテリセンス(コード自動補完機能)が動かなかったり、Gitのブランチ変更→再読み込みでフリーズみたいなことが多々あったのですが、Riderでは初回起動時こそ時間はかかるものの起動後はフリーズなどが無くストレスフリーです。
Rider の魅力紹介
Rider には非常に多くの強力な機能があるのですが、全部紹介もしきれないですし正直使わない機能も多々あります。個人的な主義なのですが無理に全部の機能を網羅しなくてもいいと思っていて使える部分だけ活用する派なので、今日はその中でも選りすぐりの3つの機能を紹介させていただきます。
Code suggestion
Riderを使う一番の理由が強力なCode Suggestionです。
これは簡単に説明するとイケてないコードをいい感じにしてくれる機能です。
簡単なもので形式的な警告の修正などはもちろん、より複雑なコードの修正提案をしてくれる素晴らしい機能です。
基本的には提案してくれるものの多くは形式面の修正である変数の名付けや不要なusingの削除は当たり前で、更に踏み込んだ修正として、ロジックの不整合な部分等、特にレビューで見つけ辛かったりする部分を指摘してくれることもありとても重宝しています。
具体例を紹介しますと、変数をマルチスレッドから触る可能性がある場合変数をlockしないと不整合が起こる可能性があったりしますが、Riderを使っていると一方でlockしている変数があった場合、他方で lock スコープが無いだけで警告が出てくれます。これによりコードをリポジトリに pushするまえに潜在的なエラーかつ問題が発生した場合解決しづらい部分を機械的に修正できます。
また、冗長な foreach文をLinq変換してくれたりもします。
特にC#の経験が浅かったりして標準ライブラリを把握してなかったりすると組み込み機能として利用できる処理を再発明してしまったりすることが結構ありがちだったりします。
C#では強力なLinqと呼ばれるメソッドチェインで処理を記述できる構文があるのですが、まずは 冗長なforeachを自分で先に書いてから後できれいなLinqに変換するみたいなこともできます。
次の例では 冗長な分岐 foreachを where句に変換したり、同じく冗長な合計を算出するforeachを自動的にSumに置き換えています。
特にC#に明るくないけど他のプログラミング言語は得意というような人はまずは基本的な処理系で書いてみてRiderによりモダンな記述に修正してもらうといった使い方もできます。
Code suggestionは便利な機能であり、以下の様な付随的なメリットもあります。
最新のC#構文が勝手にインプットできる
付随的なメリットとしてC#は日々進化して新しい構文が使えるようになったりしているのですが、情報をキャッチアップするのは意外と大変だったりします。
もし最新のC#の構文や新しい使い方を知らなくてもRiderを使っているとCode Suggestionで、冗長な書き方をしているC#のコードをよりモダンな記述変換を提案してくれたりするので、コードを書いているだけで新しいC#構文のインプットを行う事ができます。
一定のコードクオリティが担保される
Riderでは多くの警告検知やよりモダンな構文のヒントが自動で有効になっており、これらを全部修正/適用するだけでコードのクオリテイが大幅に上がります。
Rider上のスクロールバーの問題のあるコードがオーバーレイされているので、それらをすべて修正することである程度クオリティが担保されたコードとみなすことができます。
RiderでBoostDraftの一部のRider未適用のソースを表示した図がこちらです。
この例ではいくつかのオレンジ色のバーである修正ポイントが画面右側に点在しているのが分かると思います。これが同ファイルのソースコード内に存在する問題がある部分です。
また、画面中央の下線が引かれている部分は useDefaultIfFailの値によらず default の場合でも 結果は常に nullだからこの判定は冗長で必要無いですよという警告を出してくれています。
すべての警告が除去されると以下の様にスクロールバーのトップにチェックマークがつきコードの品質がある程度担保されているということがRiderによって保証されます。
勿論Riderが全ての潜在的な問題を100%列挙してくれるわけでは無いので完全に信用しないでください。ある程度のクオリティのボーダーラインとして用いる事が重要です。
他にもここでは紹介しきれないくらいの Code Suggestionがありますが、気になる方はぜひRiderをトライアル(30日無料)で試してみて自分のC#プロジェクト開いてみてください。恐らく多くの警告が検知されるはずです。
Find in files
2つ目の魅力紹介は Find in files という機能です。Rider のCtrl+Shift+Fの検索ではあらゆるものをリアルタイムに横断検索できます。
Ctrl + T のシンボル検索もあるのですが、僕自身はテキスト検索が便利すぎてあまり使っていません。
テキスト検索で一番大事な事は個人的には入力してからの応答性だと思っています。例えば標準のVisualStudioのソリューション全体検索などではテキスト入力後に数秒~数十秒検索時間がかかるのですが、Riderでは即時応答しますし、テキストをリアルタイムで反映させてくれるので全くストレスがありません。
さらに検索結果のプレビューも非常に優秀でファイルを開かずとも、ファイルの全コンテンツをプレビューウィンドウで確認することができます。もちろんファイルを開く事もできますが、基本的にプレビューウィンドウがエディターも兼ねているのでちょっとした修正であれば、プレビューウィンドウ上で完結されます。もちろん、プレビューウィンドウ上で 前述の Code Suggestion も動きます。
イメージしやすくするために対象のクラスの代入を検索してコードをプレビューウィンドウから挿入するGIFアニメーションを撮影してみました。
ただ、これは使ってみないと良さがわからないので一度触ってみることを強くお勧めします。
dotTrace
JetBrainsにはdotTraceという優れたプロファイラ製品があります。dotTraceでは測定する区間を指定したタイムラインのプロファイル、呼び出しが過剰になっているかどうかを示す呼び出しのホットスポットを調べたりすることができるのです。製品単体としても非常に優秀で便利なのですが、RiderではdotTraceが標準でインテグレートされていて、Rider上のUIでプロファイル機能を簡単に利用できます。Riderからプロファイル実行、及びプロファイル結果の表示を閲覧することができます。実行中のプロセスにアタッチする手順も簡単なのでBoostDraftでもWordにアタッチしてアドイン部分のパフォーマンスを簡単に測定できるので重宝しています。
BoostDraft での利用事例
実際にBoostDraftではRiderを2名のエンジニアが利用しています。文化としてコードエディターを強制はしていないので各々が慣れしたんだエディターで開発をすることができます。Riderはまだそこまで普及していませんが、dotTraceのプロファイラの性能はかなり評価されていて、Riderは使っていないけどdotTrace だけ使ってパフォーマンスのボトルネックを調べるといった活用事例もあります。
さいごに
Rider は非常に強力なツールですが、私はチームのすべての人にRiderを使ってほしいとは思いません。それぞれのエンジニアは自分の使いやすいツール、好きなツールを使うのがベストだと思っていて、BoostDraftという会社もそれを尊重してくれます。
私自身2020年頃からRiderを使い始めましたが、そのための学習コストは大きかったですし、それも全員に強いる必要も無いと思ってます。ただ、もしRiderの魅力に共感いただいた方は使ってみてもらえればと思います。
BoostDraft では C# エンジニアを随時募集しております。C#を仕事で使いたい方、自分の好きなIDEで仕事がしたい方、ぜひ、下記のページからご応募ください!
執筆者: 常山 勇希 (Lead Software Engineer)
SNS: LinkedIn | Github
経歴: 大阪生まれ. もともとゲームクリエイターを目指していたが, 学習の過程でプログラミングそのものの面白さに気付く. 学生時代には独学で3Dグラフィックスを中心に学び, シリコンスタジオ株式会社でゲームエンジンや3Dグラフィックスを活かしたソフトウェア開発に従事. その後, 自身の活躍領域を広げるためにYahoo!(現: LINEヤフー株式会社)を経て, BoostDraftにジョイン. 現在はリードエンジニアとして, アドインのUIチームおよび新プロダクト開発チームを統括している.
Discussion