Rider 2022.3 は C# 11 の最新機能を含め、.NET 7 SDK のサポートを提供しています。 このバージョンでは、起動時間やリモート開発機能を通じて Rider を WSL 2(Windows Subsystem for Linux 2)上で実行する機能を中心に大幅なパフォーマンス改善が行われています。 また、マルチモニター環境を配慮したツールウィンドウのドッキング機能など、UX/UI 面でも若干の重要な変更が行われています。 さらに、今回のリリースでは Unity および Unreal エディターとの統合がより緊密になっています。
Rider の起動を高速化し、ソリューションを開いて作業に着手するまでの時間を短縮するために若干の変更を加えました。
Rider のパフォーマンス改善に関する詳細は、こちらをご覧ください。
Rider が IDE のリモート開発機能を介して WSL 2(Windows Subsystem for Linux 2)をサポートするようになりました。 これにより、WSL 2 インスタンス上の Rider を使用してソリューションやソースを参照できるだけでなく、アプリをまるでローカルに保存されているかのようにビルド、デバッグ、実行できます。
Rider のウェルカム画面から簡単なセットアップ手順を直接開始できます。 リモート開発機能を通じて UI が提供されるため、WSLg は不要です。また、ローカルの RmoteDev クライアントが自動的にインストールされます。 詳細な情報については、リモート開発のドキュメントを参照してください。
多数のご要望をいただいていた、ツールウィンドウをフローティングエディタータブにドッキングするオプションがついに完成しました! 作業スペースの整理とマルチモニター環境での Rider の操作を楽にするため、ツールウィンドウをメインウィンドウの外にドラッグしてフローティングエディタータブにドッキングするオプションを実装しました。
Search Everywhere(どこでも検索)の結果リストを作成するアルゴリズムを微調整してその動作を予想しやすくし、検索対象の要素をより正確に選択できるようにしました。 クエリの入力を開始すると、最初に表示される検索結果が IDE によって固定されます。また、旧バージョンとは異なり、他の候補が見つかっても検索結果の並び替えが行われなくなっています。
SSH 経由でプロセスにアタッチする場合などに使い勝手を改善する目的で、新しい Attach to process(プロセスにアタッチ)ダイアログを追加しました。 正しいプロセスの検索と選択をより迅速に行い、IDE が選択されたデバッガーを記憶できるようにすることが狙いです。
貼り付けアクション(⌘V / Ctrl+V)の動作を改良することで、編集の利便性を高めました。 コードが選択されていない状態で行のコピー(⌘C / Ctrl+C)または切り取り(⌘X / Ctrl+X)を行った場合、貼り付けアクションでは従来バージョンのようにキャレットの位置ではなく、現在行の上にクリップボードの内容が追加されます。
オブジェクトの「スマートな貼り付け」を可能にする Edit(編集)| Paste Special: JSON as Classes(特殊な貼り付け: JSON をクラスとして貼り付け) アクションが導入されました。 たとえば、このアクションを使って JSON をコピーして貼り付けると、その JSON に基づいて C# のクラスが自動生成されます。
Preferences/Settings(環境設定/設定)| Appearance & Behavior(外観と動作)| New UI Preview(新しい UI のプレビュー)で IntelliJ をベースとする IDE 用の新しい UI に切り替えてみてください。 私たちは IDE の複雑で分かりにくい表示を減らし、作業に集中しやすくすることを目指して新しい UI の開発に継続的に取り組んでいます。
また、Rider の UX と UI に次のような最適化を少しずつ継続的に行うことで、その関連性と利便性を高めるようにしています。
File | New(ファイル | 新規)が実際に行う動作を把握しやすくするため、その名前を File | New Solution(ファイル | 新規ソリューション)に変更しました。
Rider 2022.3 は以下の機能を含む .NET 7 SDK のサポートを正式に提供しています。
ref フィールド、scoped キーワードを含む C# 11 の新機能。
UTF-8 リテラルの基本的なサポートを追加しました。 コード解析がリテラルに対して System.Text.Encoding.UTF8.GetBytes() メソッドや適切な UTF8 シンボルを含むバイト配列ではなく、u8 接尾辞の使用を提案するようになりました。 また、UTF-8 リテラルに対応したコンパイラーの警告やエラー一式も追加されています。
file ローカル型の基本的なサポートには、新しい構文の認識、型の file アクセス修飾子、コンパイラーの警告とエラー、およびこれらに対応するクイックフィックス(ネストしたクラスに file 修飾子が指定されている場合に使う Move class to outer scope(クラスを外部スコープに移動)など)が含まれています。 一般的な型を file 型に変換するための便利なコンテキストアクションもあります。
Rider が通常の文字列や逐語的文字列をそれぞれの生文字列に変換できるようになりました。 これにより、文字列に対応した既存機能の多くが生文字列にも使えるようになりました。
このリリースでは、コレクションの対応する各項目のチェックに(従来のようにコレクション長をチェックした後にインデクサーアクセス式を実行する代わりに)C# 11 の新しいリストパターン構文を使用することを提案するようにしました。
C# 11 からはインターフェースの static メンバーに対して abstract 修飾子と virtual 修飾子を使えるようになったほか、これらのメンバーをそのインターフェースに制約される型パラメーターを持つジェネリックのコードで使用できるようになっています。 Rider がポリモーフィック static メンバーを通常のポリモーフィックメンバーと同じように処理するように更新されました。
override キーワードの後に表示されるコード補完候補にインターフェースのメンバーも含まれるようになったため、abstract メンバーや virtual static メンバーを簡単に実装できるようになりました。
>>>)演算子 C# 開発者が符号付きデータ型に対して符号なし右シフトの実行を記述しなければならない非効率なコードパターンを Rider が認識し、C# 11 の符号なし右シフト(>>>)演算子の使用を代わりに提案するようになりました。
文字 Span を解析する際は、MemoryExtensions.SequenceEqual メソッドを多用しているかと思います。 C# 11 には、このようなチェックの短縮表現が導入されています。 文字 Span と文字列リテラルのパターンマッチングを is 式または switch 式を使用して行えるようになりました。
Rider が if ステートメントを多用する代わりに is 式かswitch 式を使用するように提案するようになりました。
ref フィールドおよび scoped キーワード
C# 11 からは、ref 構造体の内側で refフィールドを宣言できるようになりました。 Rider はこの新しい構文規則をサポートしており、対応するコンパイラーのエラーと警告をすべて提供しています。また、コード補完では ref キーワードを表示し、対象のフィールドをコンストラクターの中で初期化できるようになっています。
Rider は、by-ref または ref struct 引数とローカル変数に対して使用できる新しい scoped キーワードも認識します。 サポートの内容には、新しい構文を正しく解析する、コード補完で scoped キーワードを表示する、メソッドのオーバーライドを生成するときに scoped キーワードを維持するという機能が含まれています。 また、scoped 修飾子の互換性チェック、オーバーライド、インターフェースの実装、デリゲート変換で一致していない scoped パラメーターを修正するクイックフィックスを提供します。
C# 11 と .NET 7 では、言語の ref の安全性規則が変更されています。 この変更は、ref フィールドの導入によってマネージドコードにおける ref の安全性を提供するため、by-ref および ref struct 変数に対してどのような処理を実行できるかを決定するといったものです。 Rider はこの変更を認識しており、C# 11 または .NET 7 に移行する際にこの変更に対応できるよう、プロジェクト内で新しい scoped キーワードを使った更新およびアノテーションが必要な箇所を発見しやすくします。
このビルドでは、言語インジェクションが多くの点で改善されています。
[StringSyntax](.NET 7)および [LanguageInjection](JetBrains.Annotations)属性を使用する言語インジェクションに対するサポートと、// lang=<language_name> 言語インジェクションの指示コメントに対するサポートを追加しました。
言語インジェクションはこれまで SQL にしか使用できませんしたが、どの言語の文字列補間と文字列連結にも使用できるようになりました。 構文エラーは、任意の式を使用した文字列補間や文字列連結では抑止されることに注意してください。 C# 11 の生文字列内での言語インジェクションもサポートされています。
インデントと実際の値を区別するインデントガイドが生文字列に表示されるようになりました。
C# および Razor ファイル内にある暗黙的な名前空間インポートについて通知する新しいガターマークアイコンが追加されました。
対応する行で Alt+Enter を押すと、すべての暗黙的なインポートを含むリストと対応する global using ディレクティブがあるソースファイルに関する情報が表示されます。 Rider で特定のインポートされた名前空間を選択すると、その名前空間の宣言箇所に移動できます。.csproj プロジェクトファイルの <Using Include="Some.NameSpace" /> タグにも移動可能です。
_Imports.razor からのグローバルインポートが表示されるほか、対応するインポート定義に移動することもできます。
開発プロセスの合理化と高速化を促すため、C# のコード補完オプションに機械学習による要素の並べ替え機能を導入しています。
この機能の使い勝手を向上させるため、Settings/Preferences(設定/環境設定)| Editor(エディター)| General(一般)| Code Completion(コード補完)| Machine Learning-assisted Completion(機械学習を使ったコード補完)で有効にできるオプションを 2 つ用意しました。
.NET 7 に 2 つの数値型 Int128 と UInt128 が追加されたことを受け、コード補完の書式指定子の候補を更新しました。
また、これまでサポートされていなかった .NET 6 の DateOnly および TimeOnly 日付/時刻型と .NET 5 で導入された Half 半精度浮動小数点数値型をサポートするようにしました。
リファクタリングを実行した後、パターンマッチング式が自明な再帰パターンになってしまう場合があります。 このような場合に再帰パターン構文を使用する意味はまったくないと思われるため、Rider ではパターンマッチングの元のセマンティクスを維持したままパターンをより単純な式に書き換えるアクションを提供しています。
呼び出しの後に入力しても、意味のある候補がまったく表示されない場合があります。 これは、void を返すメソッドが呼び出されたため、呼び出しの結果が値を返さなかった場合に発生することがあります。 これは通常、IDE を何度か操作しなければ気付かないものです(メソッドの宣言を再確認したり、呼び出しにカーソルを合わせたりする)。 このリリースでは、呼び出しの結果となる型に関するフィードバックを即座に得られるよう、この種の void を返す呼び出しに対して void のヒント項目を導入しました。 この void 項目を受け入れると、呼び出しの後にセミコロンがない場合にセミコロンが追加されます。
Rider 2022.3 では Blazor Server アプリのホットリロード機能を導入しています。 Blazor Server アプリを実行中にそのアプリのソースコードを変更すると、Rider から実行中のアプリを再起動せずにその変更を適用するかどうかの確認を求められます。 テキストエディターの上部に表示される「Sources are modified(ソースが変更されています)」という黄色い通知バーに注目してください。 変更を受け入れるアプリがその場で更新され、更新後のアプリで作業を続行できます。
コミュニティから寄せられた多数の要望に応えて、IIS サーバー上で古い ASP.NET アプリケーションの実行とデバッグを行うための新しい IIS Application(IIS アプリケーション)実行構成を追加しました。 また、ASP.NET Core アプリケーション用の launchSettings.json ファイルに含まれる IIS コマンド名もサポートするようにしました。
Endpoints(エンドポイント)のサポートと Endpoints Viewer(エンドポイントビューアー)の改善は継続的に行われています。 ビューアーが ASP.NET Core 7 の Minimal API ルートグループの各エンドポイントを正しく認識し、収集するようになりました。 つまり、すでに利用可能であった機能に加え、MapGroup() API を使って宣言されたエンドポイントに対して、スマートなコード補完を検索、ナビゲート、使用することができます。
.NET User Secrets(.NET ユーザーのシークレット)が ASP.NET プロジェクト用に追加されました。
Rider がソリューション(.sln)によって参照される JavaScript および TypeScript ウェブプロジェクト(.esproj)用の npm 実行構成を自動生成するようになりました。
Code Vision のインレイヒントが JavaScript と TypeScript でも機能するようになりました。 このヒントにより、コード内にある各種のクラス、メソッド、型エイリアス、およびインターフェースの使用箇所が追跡しやすくなります。
IDE がステートメントのブロックを @supports 条件に関連付ける @supports @ルールを理解するようになりました。 このビルドには、ビューポートユニット、範囲メディアクエリ、コンテナクエリ、@layer(カスケードレイヤー)、および色変更関数のサポートも含まれています。
Angular テンプレートで型の絞り込みをサポートしました。これにより、さらに正確な型情報が提供され、コード補完候補が改善されるようになります。
また、Rider がより適切な検索結果を提供できるよう、グローバル検索から .angular キャッシュフォルダーを除外するようになりました。
Rider の Unity サポートには新機能の追加、既存機能の改善、およびその他若干の修正を含む重要な更新が行われています。
Unity の新しい Input System パッケージのサポートを開始しました。 Rider が入力用のイベントハンドラーとして使用されているメソッドを認識し、未使用のメソッドとして表示しなくなりました。 Find Usages(使用箇所の検索)もこのようなメソッドに対応しており、コードまたは .inputactions ファイル内の使用箇所を表示できます。
ゲームのリソースを実行時に読み込めると非常に便利なため、Resources.Load メソッドで正しいパスを使用していることを Rider で確認できるようにしました。 入力を開始するとコード補完が表示され、不明なリソースがあれば警告付きでハイライトされます。
Rider では数回のリリースにわたってタグ名の補完機能と検証機能を提供してきましたが、バージョン 2022.3 では GameObject.FindWithTag グループのメソッドに対するサポートを新たに提供しています。 入力中にコード補完が機能し、プロジェクトに存在しないタグを使用しようとした場合には警告が表示されます。
Unity プロジェクトでは、メタファイルがファイルやフォルダーと常に同期していることが非常に重要です。 Rider 2022.3 では、空のフォルダー用のメタファイルをソースコントロールにコミットしようとすると警告が表示されます。 Unity エディターが開いている状態で未保存のシーンやアセットがあった場合は Rider が警告を表示するため、コミットする際に変更を見落とすことがないのも便利です。
もちろん、より小規模な改善や修正もたくさん行われています。 非常に大きなプロジェクトの読み込みにかかる時間を短縮し、読み取り専用パッケージファイルの編集を試みた際の通知を追加し、Find Usages(使用箇所の検索)をネストしたプレハブやイベントハンドラーの配列に含まれるメソッドに対して使用できるように改善しました。
DOTS のサポートに関して、Rider が IBaker または IAspect を実装するクラスを未使用としないようになりました。
シリアル化されたフィールドの命名インスペクションを無効にして普通のフィールドとして扱えるほか、オンラインドキュメントへのリンクが適切な場所を参照するようになりました。
また、この場をお借りして Nintendo Switch のプレイヤーをデバッグするための修正をご提供いただいた Unity 社に感謝いたします。
Rider は Rename(名前の変更)リファクタリングで Unreal のクラスやプロパティの名前を変更する際に CoreRedirects を追加するオプションをすでに提供しています。 この機能が以下の場合にも対応しました。
UFUNCTION() の名前の変更 USTRUCT() の名前変更 UENUM の名前の変更 上記の場合に Rename(名前の変更)リファクタリングを実行すると、Rider が CoreRedirects の追加を提案するようになりました。
その提案を受け入れると、対応する .ini ファイルが自動的に更新されます。
不用意な名前の変更でゲームが動作しなくなる可能性がかなり低くなります!
Rider 2022.3 ではブループリント専用の Code Vision メトリクスが導入されています。 BlueprintCallable 関数を使用しているブループリントの数を素早くチェックして、Code Vision のコンテキストメニューからすべての使用箇所のリストを取得できるようになっています。
Generate GUID(GUID の生成)ツールが Unreal Engine の GUID 形式に対応するようになりました。 GUID の生成を素早く実行したい場合にメニューから Tools(ツール)| Generate GUID...(GUID の生成)を選択すると、推奨される 16 進数形式があらかじめ選択された状態になります。
補完時の自動インポート機能を使えば、かなりの時間短縮になります。 しかし、間違った #include ディレクティブが追加されてしまうと、問題の検出が困難になる場合があります。 この機能の改良に努め、自動インポートを実行する際にシステムヘッダーの不要なエンティティが提案されないようにしました。 システムヘッダーはデフォルトでは提案されませんが、提案してほしい場合は Settings/Preferences(設定/環境設定)| Languages & Frameworks(言語 & フレームワーク)| C++ | Unreal Engine で有効にできます。
UnrealBuildTool ログの表示を改善しました。 プロジェクト構成に関する警告やエラーを見逃すことのないよう、ログパネルにタイムスタンプを表示し、UnrealBuildTool を前回実行したときのログを残すようにしました。
.uproject のサポート Unreal Engineをベースにしたプロジェクトでは、Riderは両方に対応しています。.slnおよび.uprojectプロジェクト。 ネイティブ .uproject モデルをより高精度かつ快適に扱えるようにするため、そのサポートを次のように継続的に強化しています。
.project で指定されている追加ソースの場所(具体的には AdditionalRootDirectories と AdditionalPluginDirectories)を考慮します。 .Build.cs ファイルを複数個持つモジュールのサポートを開始しました。 .uproject プロジェクトモデルを使用する際に .uplugin ファイルと .uproject ファイルで補完機能とインスペクションが使えるようになりました。 .uproject モデルを使用する際に C++ プログラム用の実行構成が自動生成されるようになりました。 Unreal Engine プロジェクト用に Attach to Unreal Editor(Unreal エディターにアタッチ)アクションを導入しました。 Unreal Engine プロセスに素早くアタッチできるようになり、正しいプロセスを手動で探す必要がなくなりました。 現時点では、UnrealLink が接続されているのと同じプロセスにしかアタッチできません。そのため、Unreal エディターで実行中のプロジェクトと Rider で作業中のプロジェクトが一致している必要があります。 今後のリリースに向けてこのワークフローの改善に取り組んでいます。
Rider 2022.3 を Windows および Linux ARM64 で実行できるようになりました。 .NET アプリケーションの実行とデバッグ、ユニットテストの実行など、基本的な開発ワークフローのすべてがサポートされています。 当社では Rider を ARM64 プロセッサでスムーズに動作させるための継続的な開発とテストを実施していますが、以下の制限がある点にご注意ください。
Windows に加えて、Linux および macOS 版の JetBrains Rider でも dotMemory を使用できるようになりました。 Run(実行)ウィジェットと Run(実行)| Switch profiler configuration(プロファイラー構成の切り替え)メニューには、Memory (sampled allocations)(メモリ(サンプリングした割り当て)) Memory (full allocations)(メモリ(全割り当て))という 2 つの新しいプロファイリングモードが追加されています。 これらのモードの詳しい相違点については、dotMemory のヘルプをご覧ください。
Run(実行)メニューから実行中のプロセスにプロファイラーをアタッチして、Timeline Graph(タイムライングラフ)がリアルタイムに展開する様子を確認できます。 Memory Allocations(メモリ割り当て)ビューを開く間隔を選択します。これは dotMemory Standalone と同じで、 特定期間の割り当てられたオブジェクトと割り当て呼び出しツリーを解析できます。
残念ながら、メモリスナップショットの収集はこのバージョンでも未対応です。
Dynamic Program Analysis(DPA)には、データベースの使用に関連する以下のような問題を検出できる新しいインスペクションが導入されています。
この新しいインスペクションは、Entity Framework Core および SQL サーバー用の .NET データプロバイダーを使用するすべてのアプリケーションで使用できます。
コードエディターと Unit Test Coverage(ユニットテストカバレッジ)ウィンドウの dotCover コンテキストメニューに Show Covering Tests(カバーしているテストの表示)アクションを追加しました。 このアクションを実行すると、すべてのカバーしているテストを一か所にまとめたポップアップが表示されます。 このポップアップを使って新しいカバレッジセッションを作成することもできます。
dotCover が JetBrains Rider で継続的なテストを実行するために必要なアセンブリとシンボルファイルのみをコピーするようになりました。 これによって、作業ディレクトリ全体をコピーする必要がなくなったため、大規模なプロジェクトを中心に dotCover のパフォーマンスが全体的に改善されます。 必要に応じて、dotCover の設定からシャドウコピーファイルのフィルターを調整できます。
従来は Unity テストのカバレッジを解析する場合、カバレッジのサポートを有効にしたまま Unity を再起動する必要がありました。 このリリースからは Unity の再起動が不要となり、テストカバレッジも初期状態でサポートされています。
Central Package Management(別名 Directory.Packages.props ファイル)はアクティブな開発段階にある .NET 技術スタックの機能であり、その改善によってソリューションの管理がさらに容易になることが見込まれています。 Rider に CPM が追加されたことで、開発者は依存関係をより細かく管理できるようになるはずです。
Central Package Management の詳細やヒント、注意事項などは、こちらのブログ記事をお読みください。
ソリューションでオープンソースの NuGet パッケージを使用している場合、プロジェクトがセキュリティの脆弱性にさらされる危険があります。 この危険を緩和するため、Rider に脆弱性のある依存関係を検出する機能を導入することにしました。 NuGet パッケージの使用に関連する脆弱な依存関係が存在する場合、IDE がポップアップ通知で警告を表示します。脆弱性の内容については、Problems(問題)ビューの Security(セキュリティ)セクションで調査できます。 ソリューションに含まれるパッケージに関連する脆弱な依存関係の情報は、NuGet Package Management ウィンドウで特定のパッケージを選択して確認することもできます。
NuGet ツールウィンドウにある Packages(パッケージ)リスト内でのスクロール機能も改善しています。
Rider 2022.3 では F# 7 のサポートを提供しているほか、軽微な問題に対するさまざまな修正を行い、使い心地を改善する機能をいくつか導入しています。
コメント内で < を入力すると、ドキュメントテンプレートが追加されるようになりました。 また、構文ハイライトやコード補完を駆使してドキュメントコメントを楽々と編集できるようになっています。
新しいコード補完ルールによって record 式の入力が簡単になりました。これは、推論される record 型のフィールドが強調されるようになったほか、すでに使用されているフィールドが非表示となり、提案が表示されない各種のケースが修正されたことによるものです。
Update parameter name(パラメーター名の更新)および Update record field(レコードフィールドの更新)という 2 つのクイックフィックスを追加しました。これらはコードを変更する際にシグネチャーファイルを更新し、使いやすくするものです。 Florian Verdonckに感謝の意を表します。これらを実装してくれました!
上記は F# に加えた改善のごく一部です。 2022.3リリースに含まれるF#機能の完全なリストはこちらで見つけることができます。
Rider 2022.3 に導入されたデータベース操作関連の新機能について、その一部を以下にまとめています。
Rider の IL Viewer ツールウィンドウで、コードをさまざまなレベルの C# 言語コンストラクトにデコンパイルできるようになりました。 最新の言語機能を使用して特定の構文コンストラクトを単純化する high-level と、それらの構文コンストラクトがどのように脱糖されるかを知りたい場合に使用する low-level の 2 つの C# レベルを使用できます。
Rider 2022.3 ではコードハイライトと波線が全面的に改修されています。 Rider では Microsoft Roslyn のコードスタイル解析機能の内部ロジックとの違いに起因する競合により、ハイライトが重複して表示される、同じハイライトが別々の場所に適用される、または破線が二重になるといった問題が発生していました。 このような問題の大部分の原因となっていたロジックの違いが解消されました。ごくまれにエラーが発生することはありますが、競合の解決策が明確に表示されるようになっています。
また、Rider が Roslyn Analyzers によって生成されるインスペクションのクイックドキュメントツールチップに Roslyn Analyzer ID と URL Reference を表示するようになりました。
Rider の整形エンジンを使う代わりに clang-format バイナリを直接実行するオプションを追加しました。これにより、業界標準のフォーマッターとの完全互換性だけでなく、高いパフォーマンスとより広範な整形オプションを実現しています。 バンドルおよび外部 clang-format のオプションは、Settings(設定)| Editor(エディター)| Code Style(コードスタイル)| C++ から Clang-format オプションを選択すると切り替えられます。
Allow property evaluations and other implicit function calls(プロパティの評価とその他の暗黙的な関数呼び出しを許可する)オプションが無効な場合のデバッガーのパフォーマンスを大幅に改善しました。 .NET、.NET Framework、および .NET Core プロジェクトでは、副作用のないモードで評価できる式の数が大幅に増えています。
ユニットテストエクスプローラーのツリーを「遅延」読み込みに対応させることで、動作の高速化とメモリ負荷の軽減を図りました。 従来はすべてのノードが自動的にユニットテストのツリーと同時に作成されていたため、ツリービューでユニットツリーを参照する際に遅延が生じ、メモリ消費量が非常に多くなっていました。 今後はツリー内の展開された要素に属するノードのみが作成されるようになるため、パフォーマンスが大幅に向上します。
32 ビット版の MSBuild のメモリ不足を検出し、64 ビット版の Visual Studio に切り替えられるようになりました。 Solution Wide Analysis(ソリューション全体解析)と Find usages(使用箇所の検索)コマンドがリファクタリングされています。 社内テストでは、それぞれの動作が従来の 20~40% ほど高速化されていることを確認しています。