Riderの新機能

Rider 2020.3 では新たに .NET 5、C# 9、F# 5 の機能をサポートしています。 また、デバッガーの Immediate Window(イミディエイトウィンドウ)と Private Source Link(プライベートソースリンク)、Project Dependency Diagrams(プロジェクト依存関係ダイアグラム)、Push-to-Hint(押下でヒント)、Avalonia UI フレームワークの言語サポートなどの新機能を導入しています。 Unity 開発者向けに Burst 解析とシェーダーのサポートが更新されています。 また、ついにタブをドラッグアンドドロップしてエディターを自由自在に分割できるようになりました。

ダウンロード

無料30日間体験版

.NET 5 と C# のサポート

今回は初めて .NET 5 をサポートした Rider をリリースしました。 サポート対象は、ソースジェネレーター、C# 9 の機能、新しい NuGet 関連の機能、新しいターゲットフレームワーク(net5.0-windows および net5.0)です。 また、.NET 5 アプリケーションの作成、ビルド、実行、デバッグ、プロファイリング、カバーに対応しています。

ソースジェネレーターはほぼ間違いなく C# コンパイラーの機能の中でも最も話題性の高いものです。 それも頷けます。なぜなら、コンパイル処理中に新しいコードを作成して即座に使用できる機能は非常に魅力的ですし、さまざまなシチュエーションで役に立つ可能性があるからです。

では、Rider はどのような機能を提供するのでしょうか? Rider はリファクタリング実行中に可能な限り生成されたファイルを考慮し、コードエディター機能と生成されたコードへの移動を支援する機能を提供します。

部分メソッドに out パラメーター、void でない戻り値の型、あらゆるタイプのアクセシビリティを含め、それらをソースジェネレーターで処理しやすくすることができます。 ソースジェネレーターは部分メソッドの定義宣言を使用し、生成されたコードの動作をカスタマイズできます。

また、素晴らしいことに init 専用のプロパティが追加されました。 このプロパティは、オブジェクトの初期化中にのみセットできます。 その結果、プロパティを可変プロパティとして公開することなくオブジェクト初期化子を使用できるようになりました。

Rider は init 専用プロパティを認識し、コード補完、生成補完の実行、任意の場所でのプロパティ変更の解析、気が変わった場合にそのプロパティを変更可能にするクイックフィックスの提供を行う際に考慮に入れます。

init を適用するのに最適なのは、新しい record 型です。 この不変性を実現するのに役立つ値セマンティクスを持つ参照型ですが、今回はオブジェクト全体が対象です。 繰り返しますが、Rider は優先する宣言スタイルを選択するためのクイックフィックスから基本的な補完に至るまで、この言語の最新機能に対応しています。

位置指定レコードには、コンパイラーが生成した Deconstruct() メソッドが含まれています。 Rider はこのようなオブジェクトですべての分解機能をサポートしています。 変数を導入する際には、単一の変数か分解宣言のいずれかを選択できるポップアップが表示されます。 関数が record オブジェクトのプロパティにアクセスする際にも同じ選択肢が表示されます。

重要事項から説明しますが、ローカル関数に属性(およびローカル関数のパラメーターと型パラメーター)を付けられるようになりました。 この新機能は、Rider のクイックフィックスでサポートされています。例えば、メソッドに [NotNull] または [CanBeNull] のアノテーションをそれぞれ ! または ? を押して付けられる便利な機能があります。

C#9 には最上位レベルのプログラムを記述できる便利な機能もあります。 もうプログラムのクラスと格闘する必要はありません。エントリポイントのコードを using ディレクティブの直後に配置できます。 最上位レベルステートメントの処理を支援する機能もあります。 最上位レベルステートメントには 2 つのルールがあります。1 つは型または名前空間の前に配置すること、もう 1 つはプロジェクト内の 1 つのファイルのみに最上位レベルコードを記述できるということです。 どちらのルールも、コードの再配置やコピーペーストを行う際には破られがちです。 Rider は、最上位レベルのコードを最上位または別のファイルに移動してこの問題に対処するクイックフィックスを提供しています。

最上位レベルのコードもコードであるため、対応するリファクタリング機能もあります。具体的には、Extract local variable(ローカル変数の抽出)と Extract method(メソッドの抽出)です。

詳細については、「ReSharper および Rider での C# 9 最上位レベルステートメント」をご覧ください。

C# 9 のターゲット型の new 式を使用すると、型を文脈から判断できる場合に new キーワードの後の型を省略できます。 Rider はこの機能を完全にサポートしています。例えば、コンストラクターの使用箇所を検索する機能や優先する構文スタイルを構成する機能があります。 後者は、作成した型が明らかな場合は new() 構文を使用し、その他の場合には明示的な型指定を要求できる機能です。

なお、コード内のすべての new() が制御不可能になった場合は Rider の新しい型名のヒントが役に立ちます。

共変の戻り値を使用すると、基本クラスのメソッドの場合と同様にオーバーライドメンバーで同じ型を返す必要はなくなります。 より具体的な型を返すのに回避策を実装する必要はありません。

新しい言語バージョンでは、パターンマッチングが引き続き進化しています。 マッチ式で関係式(<> など)と論理パターン(notorand)を使用できるようになったため、冗長な従来の switch 構文の多くを削除できます。 Rider はパターンを解析し、希望するスタイルに書き換えるのを支援します。

さらに、ラムダの破棄パラメーターが導入された時には対応するクイックフィックスを追加するのが望ましいと考えました。

以上が主な言語のハイライトです。 Rider 2020.3 では、同言語に対するより小規模な改善もサポートされています。 サポート対象には、ターゲットにより型指定された条件式、静的なラムダ、foreach、関数ポインター型、ネイティブ整数型の拡張 GetEnumerator メソッドなどが含まれています。

デバッガー

Immediate ウィンドウ

コード支援を行う新しい Immediate ウィンドウを導入しています。 このウィンドウではプログラムがブレークポイントで停止した場合に合成変数を作成し、デバッガーを再起動することなくコードを実験することができます。

デバッグセッションを開始する際、イミディエイトウィンドウが右下、デバッガーペイン内のウォッチ変数の下に表示されます。 このウィンドウは、アプリケーションが一時停止状態の場合のみ入力を受け付けます。一般的にはブレークポイントに到達した場合です。

完全なコード補完機能を自由に使用し、有効な C# コードを入力できます。

新しい合成変数を定義できます。 Rider は合成変数のコレクションの下にある変数ウィンドウで、これらの値を追跡します。 他の変数と同様に、これらの変数にはインスペクションの実行、ピン留め、変更を行うことができます。

使用可能なオブジェクトを引数として使用し、使用可能なオブジェクトのメンバー関数や現在のコンテキストで使用できる静的関数を呼び出すこともできます。 関数の実行パスにあるブレークポイントは、通常の呼び出しであるかのように実行を一時停止します。 呼び出しには関数の評価から始まるスタックの一部が含まれており、それを Frames パネルで調査できます。

ステートメントを変数に代入せずに実行できます。 Rider は、$result プレースホルダーの下に run ステートメントからの最後の戻り値を記録します。 イミディエイトウィンドウはすべてのステートメントの履歴を記録します。

詳細については、「イミディエイトウィンドウ – Rider でデバッグ中にコードを操作する」をご覧ください。

新しいアクション

デバッグが開始されていない時に新しいデバッガーアクションを使用できるようになりました。

確認したいメソッドやコードの位置に移動する場合、デバッグを開始して複数のステップを踏む必要はなくなりました。 Start Debugging and Run to Here(デバッグを開始してここまで実行)か Start Debugging and Run to Here Non-Stop(デバッグを開始してここまでノンストップで実行)を使用すると、Rider がすべてのブレークポイントをスキップして目的の場所まで案内します。

アプリケーションのデバッグを開始し、最初の段階で実行を停止したい場合は、アプリケーションのエントリポイントに到達した時点で Start Debugging and Step Over(デバッグの開始とステップオーバー)アクションか Start Debugging and Step Into(デバッグの開始とステップイン)アクションを使用してください。

これらのアクションは、メインメニューの Run | Debugging Actions にあります。

前述のアクションは .NET のプロジェクト構成か .NET の static メソッドにのみ使用できます。

プライベートソースリンク

「プライベートソースリンク」という用語をよくご存じの方に朗報です。Rider 2020.3 は、デバッガーと組み込みのデコンパイラーの両方でプライベートソースサーバーを完全にサポートしています。 Rider は GitHub / GitHub Enterprise / BitBucket / Azure DevOps(旧 VSTS)上のソースをサポートします。

Rider は将来的なアクセスを楽にするため、認証情報を保存できます。

デバッガーに関するその他の更新

  • out パラメーターと ref パラメーターを持つ、またはパラメーターリストで out 変数を宣言するメソッドの評価を実装しました。
  • IEnumerable シーケンスの列挙を大幅に高速化しました。
  • 表現が非常に長いオブジェクトに対して ‘View’ リンクが正しく表示されるようになりました。
  • 長い文字列の値をコピーする際に切り捨てが発生しなくなり、その評価が最適化されました。

プロジェクト依存関係ダイアグラム

新しいアーキテクチャツールはソリューション内のプロジェクト依存関係を可視化し、そのアーキテクチャを調査するのに役立ちます。

ダイアグラムの調査

プロジェクト依存関係ダイアグラムを Tools | Architecture | Show Project Diagram または Solution Explorer のコンテキストメニューから開くことができます。 この機能はソリューションの構造に従い、ソリューション内の最上位レベルのアイテムを最初に表示します。 表示対象にするプロジェクトまたはソリューションフォルダーの選択、縮尺の変更、グリッドの有効化(必要に応じてグリッドに合わせることも可能)、特定プロジェクトへの注釈メモの追加を行うことができます。

ナビゲーション

Windows では Ctrl+F、macOS では Cmd+F を使用して注力したいプロジェクトを検索できます。
Show Neighbors of Selected Nodes(選択したノードの近隣を表示)ツールバーボタンを使用すると、プロジェクト依存関係ダイアグラムを選択したノードとその直接の依存関係、そのプロジェクトに依存するプロジェクトに絞り込むことができます。

サイズの大きなプロジェクト依存関係ダイアグラムの場合は、File Structure(ファイル構造)ツールウィンドウ(View | Tool Windows | Structure)を開き、高レベルな概要を使用してダイアログを自由自在に移動できます。

プロジェクトの結合解析

ダイアグラムの解析と更新を実行するには、ツールバーの Enable Coupling Analysis(結合解析の有効化)をクリックします。 リンクの太さ、色、スタイルはプロジェクトの結合の強さによって変化します。 リンクの上にマウスを移動すると、Rider が正確な使用箇所の数を含むツールチップを表示します。 そのリンクをクリックすると、依存コードに関する情報が収集されて独立したツールウィンドウに表示されます。

プロジェクト依存関係ダイアグラムでは、Show Transitive Dependencies(推移的な依存関係の表示)も実行できます。 その場合、直接的および間接的なプロジェクト依存関係の両方が表示されます。

スナップショットの保存と比較

プロジェクト依存関係ダイアグラムのスナップショットをツールバーから保存し、それを現在のソリューションと比較することができます。 過去に保存したスナップショットを読み込んで検査するには、Tools | Architecture | Compare With Saved... メニューを使用します。 Rider ダイアグラム間の差分をハイライトします。

詳細については、「Rider 2020.3 にプロジェクト依存関係ダイアグラムが実装されました」をご覧ください。

ダイアグラムのエクスポート

ツールバーからダイアグラムを画像としてエクスポートし、ドキュメントに挿入できます。

ゲーム開発

Unity

Rider 2020.3 では Unity のサポートが大幅に強化されています。Burst 解析、シェーダーのサポート、ユニットテストが更新されているほか、若干の有益な修正が加えられています。

Unity の [MenuItem] 属性が付いたメソッドの横にあるアイコンをクリックすると、Rider が IDE から直接メソッドを呼び出すように Unity に指示します。

Rider の高度なシェーダーのサポートが更新され、コード解析の際に shader_feature や target などの pragma の定義シンボルが自動的に使用されます。 ステータスバーには、新しいコンテキストピッカーが追加されています。このコンテキストピッカーは、シェーダーがインクルードされていた場所で定義されているシンボルに基づいてシェーダーを解析します。

Burst コンテキスト解析を改善しました。新しい Code Vision インジケーターと、不適切な SharedStatic の使用箇所に対応した新しい警告を実装しました。 Alt+Enter メニューを使用して [BurstDiscard] 属性をすばやく追加することもできます。

新しいコンテキストアクションを使用すると、Update などのパフォーマンス的に重要なメソッドをより管理しやすくなります。 あるメソッドを呼び出し頻度が高いものとして扱うことや、高コストなメソッドとしてハイライトするのをやめるように Rider に指示できます。また、任意のメソッドから新しいパフォーマンスコンテキストを開始することもできます。

ユニットテストにも新たにいくつかの重要な更新が加えられています。例えば、[Explicit] 属性のサポートやパラメーター化テスト機能があります。 また、1 回のテスト実行で Edit モードのテストと Play モードのテストの両方を実行できます。

Unity ログビューアツールウィンドウに UI に関するいくつかの有益な改善が加えられています。代表的な改善には、ゲームを最後に Play モードに切り替えた最後の時間や、ゲームの AppDomain が最後に再ロードされた時間に基づいて絞り込む機能があります。

また、当然ながら多数の問題を解消しています。例えば、Unity エディターに接続されていない場合に「refreshing solution」(ソリューションを再読み込みしています)メッセージが延々と表示され続ける問題を解消し、冗長なイベントメッセージを除去するための新しいクイックフィックスを提供しています。 また、プレイヤープロジェクトで不適切な C# 言語の候補が表示される問題を解消しました。 詳細については、変更ログをご覧ください。

Rider for Unreal Engine 早期プレビュー

Rider for Unreal Engine はまだパブリックプレビューの段階にあり、2021 年に Rider の構成要素としてリリースされる予定です。 一般リリースまではこのプレビューを無料で評価することができます。

Rider for Unreal Engine は UnrealHeaderTool とのシームレスな連携機能を提供し、より多くの Unreal Engine 固有のコードの問題をエディター内で直接捕捉できるようにします。 Unreal Engine プロジェクトで作業する際には編集中のファイルに対して UnrealHeaderTool が自動的に実行され、他のインスペクションと同様にエラーや警告が表示されます。

UnrealHeaderTool との連携動作のデモを見る

制御フロー解析の全機能が HLSL シェーダーファイルに対応しました。 その結果、到達不能コード、未初期化の変数、冗長な制御フロージャンプや条件分岐などについて警告が表示されるようになりました。 メインの Rider では、バージョン 2020.3 で同じ解析機能を Unity シェーダーに対して使用できます。

Unreal Log にフィルターを追加しました。これにより、Rider for Unreal Engine で Verbosity(詳細度)と Category(カテゴリ)で絞り込んだり、タイムスタンプの表示をオンオフしたりできるようになりました。 Unreal ログパネル内のメッセージが多すぎる場合に UI がフリーズする問題を解決しました。

UnrealLink/RiderLink プラグインは、JetBrains Rider と Epic Games 社の Unreal Editor との高度な連携を可能にします。 このプラグインが JetBrains Marketplace で提供されるようになり、製品ビルドとは別個にアップデートできるようになりました。

F# のサポート

F# 5 の機能

新しい文字列補間構文のサポートを開始しました。 文字列に $ 記号を付けて補間し、文字列リテラルの中にプレースホルダーを入れられるようになりました。 プレースホルダー用の「型指定された補間」構文(%s%d)もサポートされています。

このリリースでは、F# のほぼすべてのシンボルをシンボル名に変換するのに役立つ nameof キーワードのサポートを開始しました。

最後に付け加えますが、open type(オープン型)の宣言もサポートされています。 オープン型の宣言を使用すると、任意の型を "オープン" してその型の中に格納されている静的な内容をインポートできます。

その他の機能と改善点

型とインターフェースの実装に不足しているオーバーライドを生成できるようになりました。この機能はクイックフィックスとコンテキストアクションの両方を含みます。 このアイデアを提供し、初期実装を行った Matt 氏に感謝します。

コードの可読性を向上させるため、構文ハイライトに対応した新しいツールチップを搭載しました。 この機能を見事に実装した Saul 氏に感謝します。

let バインドの型にアノテーションを付ける新しいコンテキストアクションが実装されました。 改めて Matt 氏に心から感謝します。

ReSharper のバックエンドが提供するアナライザーの重大度を調整できる機能を追加しました。 大部分の警告やエラーは、引き続き FCS によって生成されます。

以下の新しいアナライザーとクイックフィックスが追加されています。

  • 組み込みの関数アナライザーを使用してラムダを単純化、または置換できます。
  • Redundant applications(冗長アプリケーション)アナライザーは、例えば無視する対象がない場合に冗長な Ignore の呼び出しを除去します。
  • コードスタイルを改善する Redundant patterns(冗長パターン)アナライザー。
  • 名前空間をモジュールに変換するクイックフィックス。

入力支援:

  • メソッド呼び出しでの Enter の動作を改善しました。
  • 新しい “Surround with Quotes”(引用符で囲む)をサポートしています。

モジュールまたは型の名前に一致するようにファイル名を変更するアクションが実装されました。

デバッガーが非同期ワークフローのローカル変数をより適切に追跡できるようになりました。

UI/UX の改善

新しいウェルカム画面

ウェルカム画面を再設計し、より分かりやすくモダンなデザインにしました。 以前とまったく同じ機能を備えていますが、より適切に整理されています。 引き続きプロジェクトの管理、Rider の新機能を学習するためのチュートリアルの起動、新規ソリューションの作成、既存ソリューションのオープン、VCS からのソリューションの取得を行うことができます。

Solution Explorer での検索

「本物の」検索機能が Solution Explorer ビューに搭載されました。 ファイル、フォルダー、プロジェクト、参照、アナライザー、インポート、パッケージなど、ソリューションツリー内の全ノード(折りたたまれたノードも含む)を参照し、検索クエリに一致する出現箇所をすべて提示します。 これらの出現箇所は、キーボードショートカットかツールバーのアイコンを使用して一つずつ調べることができます。 検索フィールドを開くには、Ctrl+F ショートカットかツールバーの虫眼鏡アイコンを使用します。

タブのドラッグアンドドロップ

プロジェクトで作業中に複数のタブを開きたい場合にファイルタブをドラッグアンドドロップし、エディターを上下または左右に分割できるようになりました。

右に分割して開く

ファイルを開いたときにエディターを上下に分割する Open in Right Split(右に分割して開く)アクション(View | Open in Right Split または Shift+Enter)を導入しました。 このアクションは Explorer ビューや、Recent Files / Search Everywhere / Navbar のような他のナビゲーションポップアップからファイル選択時に呼び出せます。

ピン留めしたタブ

ピン留めしたタブには、新しいピンアイコンが表示されます。 そのアイコンをクリックすると、ファイルのピン留めが解除されます。 また、タブを他のピン留めした、あるいはピン留め解除したファイルにドラッグアンドドロップしてピン留めやピン留め解除を行うことができます。 多くのタブを開きがちな方は、すべてのピン留めしたタブを 1 つの行に格納することができます。 そのためには Preferences / Settings | Editor | General | Editor Tabs に移動し、Show pinned tabs in a separate row(ピン留めしたタブを別の行に表示する)チェックボックスにチェックを入れてください。

ツールチップの構文ハイライト

ツールチップの内容を読みやすく、理解しやすくするため、構文ハイライトを実装しました。

プレビュータブ

ワンクリックでファイルをプレビュータブで開けるようになりました。 ファイルをプレビュータブで開くと、ファイル名が斜体で表示されます。 このファイルの編集を開始すると、プレビューが中断されて通常のファイル編集画面に移行します。 この機能を有効にするには、Project ビューの歯車アイコンをクリックし、Enable Preview Tab(プレビュータブを有効化)を選択します。

Touch Bar の Build アクション

macOS ユーザー向けに Build アクションを Touch Bar for に追加しました。

バージョン管理

Rider から変更を直接ステージングできるようになりました。 ファイルを Commit ビューの新しい Staged ノードに追加するには、+ アイコンをクリックします。 また、ガターや Diff ビューでも変更をステージングできます。 この機能を有効にするには、Preferences/Settings | Version Control | Git に移動して Enable staging area(ステージングエリアを有効化)チェックボックスにチェックを入れてください。 詳細については、このブログ記事を参照してください。