ReSharper 2025.1 の新機能

ReSharper 2025.1 は、.NET 10 および C# 14 のプレビュー機能に対する初期サポートを提供します。 このリリースでは一般的な C# のミスを対象とした新しいインスペクションだけでなく、使い心地を改善するいくつかの機能も追加されています。 文字列インターンシステムが全面的に見直され、Razor タグヘルパーおよび Blazor コンポーネントのサポートが再構築されたことで、パフォーマンスが大幅に向上しています。 さらに、このリリースでは Visual Studio での dotMemory 統合が初公開され、CI/CD パイプライン統合を強化する新しい Qodana Team Code Quality プラグインが導入されました。

C# のサポート

.NET 10 プレビューと C# 14 のサポート

ReSharper 2025.1 は、.NET 10 および C# 14 のプレビュー機能に対する初期サポートを提供します。

バインドされていないジェネリック型の nameof

以前は nameof を使用する際にすべての型引数を指定する必要があっため、不必要に冗長なコードになっていました。 C# 14 では型引数を明示的に列挙することなく nameof(List<>) を使用できます。 ReSharper が nameof 式内の冗長なジェネリック型引数を検出し、それらを単純化するクイックフィックスを提供するようになりました。

ファーストクラスの Span<T> 変換

C# 14 では ReadOnlySpan<T>Span<T>、および T[] 間の新しい暗黙的な変換が導入されており、Span ベースのコードがより直感的になっています。 ReSharper はこれらの変換ルールを完全にサポートしており、効率的でモダンな C# コードの作成を支援します。

単純なラムダパラメーターの修飾子

C# 14 では、refoutinscoped などのパラメーター修飾子を明示的なパラメーター型を指定することなくラムダ式で使用できるようになりました。 ReSharper は冗長な型指定を除去するクイックフィックスを提供します。

ReSharper と Rider における C# 言語サポートの改善点については、ブログで詳細を確認できます。

このリリースでは、C# 14 の機能が新たにサポートされているだけでなく、さまざまな C# バージョンにおける一般的なミスや非効率な実装を対象とする新しいインスペクションもいくつか導入されています。

補間を連結に変換する新しいコンテキストアクション

新しいコンテキストアクションを使用すると、文字列補間を連結に戻すことができます。 ReSharper は以前から文字列連結 "Id = " + someId から補間 $"Id = {someId}"string.Format("Id = {0}", someId) への変換をサポートしてきましたが、このアップデートによって逆変換が可能になり、文字列式をより柔軟に構造化できるようになりました。

冗長な重複コード

ReSharper が ifswitch のような条件構文に現れるコード重複パターンをより多く検出するようになり、よりクリーンで保守性の高いコードを実現するリファクタリングを提案するようになりました。

Possibly Mistaken Use of CancellationTokenCancellationToken の誤用の可能性)

ReSharper がメソッドレベルの CancellationToken がローカルトークンの代わりに誤って使用されている状況を検出するようになりました。 誤ったトークンを置き換えるか、CancellationTokenSource.CreateLinkedTokenSource() を使用して複数のトークンをマージするクイックフィックスを提供します。

nameof を使用して列挙型メンバーの名前を参照

列挙型メンバーに対して .ToString() を呼び出すと、実行時に不要なオーバーヘッドが発生する可能性があります。 ReSharper がこのような呼び出しを nameof(SomeEnum.Member) に置換し、パフォーマンスと明瞭さを向上させることを提案するようになりました。

タプルコンポーネント名の提案

ReSharper 2025.1 はコードの可読性と自己文書化性を向上させるため、汎用的なItemN 名の代わりに明示的なタプルコンポーネント名を提案します。

Inexact stream reads(不正確なストリーム読み取り)インスペクション

ReSharper が Stream.Read() メソッドや ReadAsync() メソッドがその戻り値を確認せずに使用されており、それが原因で不完全なデータ読み取りが発生する可能性がある場合に警告を表示するようになりました。 また、そのような使用箇所を .ReadExactly() に置換して正確性を確保することを提案します。

Debug.Assert での変更を警告するインスペクション

Debug.Assert の呼び出しは RELEASE ビルドでは除去されるため、ReSharper は状態を変更し、本番コードで予期しない動作を引き起こす可能性のあるアサーションについて警告します。

C++ のサポート

ReSharper 2025.1 には、C++ のサポートに関するいくつかの改善が行われています。

  • Inline Macro(マクロのインライン化)リファクタリングが導入されました。
  • いくつかの新しい GNU 言語拡張がサポートされるようになりました。
  • 大量のブループリントアセットを含む Unreal Engine プロジェクトでのメモリ使用量が最適化されました。
  • Clang-Tidy 20 がバンドルされるようになり、ARM デバイスでの Clang-Tidy の使用がサポートされるようになりました。
  • GoogleTest のサポートが更新されました。

C++ 関連の更新の詳細については、ReSharper C++ 2025.1 の新機能ページをご覧ください。

コードリファクタリング

Toggle <ImplicitUsings>(<ImplicitUsings> の切り替え)リファクタリング

暗黙的な using を有効化すると、一般的な名前空間が自動的に含まれるため、ボイラープレートが削減されます。 ReSharper がプロジェクト全体で暗黙的な using の有効化状態を簡単に切り替える手段を提供するようになりました。有効化時には冗長かつ明示的な using が除去され、無効化時には必要なものが追加されます。

改良された Transform Parameters(パラメーターの変換)リファクタリング

ReSharper の Transform Parameters(パラメーターの変換)リファクタリングが最新の実装に書き換えられ、値タプル、レコード、および非同期シナリオがサポートされるようになり、コードの柔軟性と保守性が向上しました。

コードの整形

Chop formatting(改行で分割)コンテキストアクション

新しい整形アクションを使用すると、さまざまな C# の構文要素が改行で分割され、コードの可読性と一貫性が向上します。

その他の改善点

  • コメントの整形で、// の後に適切な改行とスペースが確実に追加されるようになりました。 いくつかのチケット([RSRP-225809][RSRP-78312])では、参考になるスクリーンショットを確認できます。
  • メソッド呼び出しで単一のラムダ式引数の前に改行を挿入しないオプションも追加しました。 [RSRP-467905]

ユーザーエクスペリエンス

プッシュヒントの有効化動作とインジケーターの改善

ReSharper のプッシュヒントの動作を改良し、他の Ctrl ベースのショートカットとの競合によって意図せず有効化されないようにしました。 さらに、このモードが有効化されていることを示す視覚的なインジケーターを導入しました。

拡張された型のリストに対するコンテキストハイライト機能

キャレットを基本型の節内にある型名の上に置いた際、ReSharper が基本クラスを拡張している、または特定のインターフェースを実装しているメンバーを視覚的にハイライトするようになりました。

パフォーマンス

メモリ消費

このリリースでは、文字列インターンの仕組みを完全に刷新しました。 IDE はソースコード、構文要素、シンボル名、ファイルパスなどの膨大な数の文字列を処理するため、効率的に文字列を処理することが不可欠です。 新しい文字列インターンシステムでは旧バージョンの約 4 倍の一意の文字列が平均して格納され、消費メモリが約半分に削減され、大規模な .NET プロジェクトでリソースが解放されるようになっています。

Blazor と Razor の改善

Razor タグヘルパーと Blazor コンポーネントのサポートが 2025.1 に向けて完全に再構築されました。 この待望の刷新により、コンポーネントを多用する大規模な ASP.NET ソリューションでの解析時間が 5%~10% 短縮されました。 .cshtml/.razor ファイルを編集する際の再解析イベントが減少し、誤ったエラー報告も大幅に削減されます。

ReSharper のアウトオブプロセス(OOP)に関する最新状況

当社は過去 4 週間にわたって ReSharper の最新のアウトオブプロセス(OOP)実装を社内でテストしていますが、これまでの結果には非常に満足しています。 現在もすべての機能をサポートし、既知の問題を修正する作業を続けてはいるものの、ReSharper を開発ワークフローに欠かせない要素とするための基本機能は順調にまとまりつつあります。

OOP ReSharper の完全な最新状況については、最新のブログ記事をご覧ください

メモリプロファイリング dotUltimate

Visual Studio での dotMemory を使用したスナップショット解析

dotMemory が Microsoft Visual Studio に完全統合されました。 以前は Visual Studio 内からプロファイリングを開始することしかできませんでしたが、結果を解析するにはスタンドアロンの dotMemory アプリケーションに切り替える必要がありました。 このリリースにより、アプリケーションのプロファイリングとメモリスナップショットの解析の両方を IDE を離れることなく行えるようになりました。

コード品質

Qodana Team Code Quality 拡張機能

Qodana は JetBrains のインスペクションを活用することで、チームがチェックや監査を実施したり、お気に入りの CI/CD パイプラインで品質ゲートを確立したりするのを支援するチームコード品質ツールです。 現在は ReSharper のインストーラーを介して Qodana Team Code Quality 拡張機能をダウンロードし、Qodana Cloud またはセルフホストの Qodana プロジェクトを Visual Studio に導入できるようになっています。

コードの問題、バグ、脆弱性を発見し、パイプライン内で直接解析を実行した後、作業中の IDE で問題を確認することで、コンテキストに応じた更新と学習をより適切に行うことができます。 この拡張機能は、ReSharper のインストーラーを使用してスタンドアロンツールとしてダウンロードすることもできます。

ゲーム開発

ReSharper 用 Unity プラグイン

ReSharper 2025.1 には、主要なゲーム開発ワークフローをすべてサポートする Unity プラグインがバンドルされています。 このプラグインは Unity イベント関数と API に対応したコード補完、Unity ドキュメントへのリンクを含むツールチップの概要、よくあるミスを検出するための専用のインスペクションを提供します。 ShaderLab ファイルの構文ハイライト、コード補完、エラー検出をサポートします。 このプラグインは .meta ファイルを自動的に処理し、Unity シーン、プレハブ、アセット内のフィールドおよびメソッドの暗黙的な使用箇所を検出します。

ReSharper C++ は、Unreal Engine 開発に特化したサポートを引き続き提供します。

デコンパイラー

ReSharper 2025.1 では、デコンパイラにいくつかの改良が加えられ、最新の C# 機能のサポートが強化され、コードの可読性が向上しました。 新機能は以下の通りです:

  • required メンバーのサポート。
  • C# 13 で導入された新しい System.Threading.Lock 型のサポートを追加。
  • ref フィールドおよび scoped パラメーター修飾子のサポート。
  • allows ref struct ジェネリックアンチ制約のサポート。
  • ref struct 型に対するパターンベースの using のサポート。
  • 文字列補間のサポート。
  • 可読性を向上させるため、デコンパイルされたコード内の特定の整数定数にコメント付き 16 進数表記が含まれるようになりました。
  • ファイルスコープの名前空間のサポート。

その他の注目すべき改善点

新しい後置テンプレート: .inject

C# 12 のプライマリコンストラクターにより、依存性の注入が単純化されました。 新しい .inject 後置テンプレートを使用すると、プライマリコンストラクターにパラメーターが自動的に導入されて意味のある名前が提案されるため、コンストラクターの依存性の注入がさらに効率化されます。

構造化ログのサポート

ReSharper による構造化ログのサポートが強化され、開発者がログをより効率的に記述・解析できるようになりました。

戻り値での言語インジェクション

ReSharper がメソッドの戻り値に対して言語インジェクション用のアノテーションを使用できるようになりました。これにより、従来のパラメーター、フィールド、プロパティに対するサポートが拡張されました。

複数行 To-do コメントの改善

従来は To-do コメントを複数行にわたって書く場合はインデントが必要でした。 ReSharper 2025.1 ではこの制限がなくなり、複数行の To-do をより簡単に記述・管理できるようになりました。なお、すでに存在するインデントはそのまま維持されます。