ReSharper 2023.2 の新機能

ReSharper 2023.2 では C# のサポートが改善され、ローカル関数や raw 文字列の処理と一般的な Entity Framework の問題解決を行うための新しいインスペクションが導入されています。 このリリースには C++ のリファクタリングと C++20 および C++23 の追加機能に対するサポートが導入されています。 ReSharper 2023.2 で新たに導入される機能の中には、ユニットテストの作成と移動操作を簡単に行う機能、予測デバッガーモード、新しい AI Assistant があります。

ダウンロード

無料 30 日間体験版をご利用可能です

主な更新内容

C# のサポート改善

C# のサポート改善

ReSharper 2023.2 では raw 文字列リテラル、ローカル関数の操作をはじめ、一般的な Entity Framework の問題や冗長な null 許容ディレクティブの処理を行う新しいコードインスペクションとクイックフィックスが導入されています。 C# 12 の初期サポートを提供することで、プライマリコンストラクターとオプションパラメーターを設定したラムダ式に対応しました。 また、ReSharper の破棄と破棄可能なリソースのサポートを改善し、新しいインラインおよび行間ヒントも追加しました。

詳細情報

ユニットテストのナビゲーションと作成

ReSharper のユニットテスト処理に大幅な更新が適用され、プロダクションコード用テストの移動操作と作成を行う機能が追加されました。

Generate Code(コードの生成)アクションを呼び出して Unit Test(ユニットテスト)を選択するか、Ctrl+U,C を押すだけでテストを作成することができます。 ReSharper ではテストクラス名を選択可能で、好みのテストフレームワーク(まだ使用されていない場合)で新規プロジェクトを作成することもできます。 テストが作成されたら、Navigate To(移動)アクションを使用するか Ctrl+U,F を押すことで、実装とテストコード間を移動できます。

詳細情報

AI Assistant

AI Assistant 限定アクセス

バージョン 2023.2 の IntelliJ ベース IDE と .NET ツールには、重要な新機能である AI Assistant が導入されています。 初期の AI を搭載した機能セットには統合 AI チャットを提供しており、コンテキストアクションを介して必然的に一部の基本的な IDE ユーザーワークフローに組み込まれています。そのため、AI Assistant は選択されたコードの説明、潜在的な問題の除去、および XML ドキュメントの生成を行うことが可能です。

詳細情報

C# のサポート

raw 文字列のサポート改善

以下のように raw 文字列を扱う新しい C# のインスペクションとコンテキストアクションの追加、入力支援の改善、および新しい整形オプションの追加を行いました。

  • 複数行の逐語的文字列を raw 表記に変換する Use raw string(raw 文字列の使用)インスペクション。
  • 冗長になる引用符とドル記号の一部を除去する Simplify raw string(raw 文字列の単純化)インスペクション。
  • 引用符、補間の波括弧、ドル記号の追加または除去、単一行表記と複数行表記の切り替えを行う多数のコンテキストアクション。
  • raw 文字列の内容を整列またはインデントできるようにするいくつかのコードフォーマッターオプション。
  • EnterDelete、または Backspace キーを使用した時の入力支援の改善。

raw 文字列のサポート改善に関する詳細は、対応するブログ投稿をご覧ください。

一般的な Entity Framework の問題に対応したインスペクション

一般的な Entity Framework の問題に対応したインスペクション

Entity Framework などのオブジェクトリレーショナルマッピング(ORM)を使用してデータベースで作業する際に発生しうる一般的な問題に対応できるよう、いくつかの新しいインスペクション、クイックフィックス、およびコンテキスト認識ナビゲーションのオプションを追加しました。

  • 発生しうる「N+1」問題への対応を支援するため、Possible multiple queries to the database for related entities (N+1 problem)(関連エンティティのデータベースに対する複数クエリの実行可能性(N+1 問題))インスペクションと Possible multiple queries to the database (N+1 problem)(データベースに対する複数クエリの実行可能性(N+1 問題))インスペクション、対応するクイックフィックス、「N+1」問題が発生しうるコード箇所を行き来するためのコンテキスト認識ナビゲーションが提供されています。
  • 「N+1」問題の検出に加えて、Entity Framework を扱う際に役立つもう 1 つのインスペクション Query can return incomplete data for related entities(関連エンティティの不完全なデータを返す可能性があるクエリ)を導入しました。 この問題の調査に役立つクイックフィックスとコード間を移動できるコンテキスト認識ナビゲーションも導入しています。

新しい Entity Framework 関連のインスペクションの詳細は、ブログ投稿をお読みください。

ローカル関数を操作するためのインスペクション

ReSharper 2023.2 ではローカル関数のコードの可読性向上を目的とした 2 つの新しいインスペクションと対応するクイックフィックスが導入されています。

  • メソッドの最後にあるローカル関数の前に明示的な return または continue を配置するよう推奨するもの。
  • メソッドまたはブロックの最後にローカル関数を移動し、明示的な returncontinue、または別の制御フローの移動ステートメントを使用して、実行可能なコードから分離するよう提案するもの。

コードを変更したくない、または変更できない場合に備えて、ReSharper 2023.2 はローカル関数の前に return; または continue; ステートメントを使用して行間にヒントを表示し、コードを変更せずに理解できるようにします。

新しいインスペクションの詳細は、このブログ投稿をご覧ください。

#nullable ディレクティブと NRT アノテーションのインスペクション

#nullable ディレクティブと NRT アノテーションに対応したインスペクション

#nullable ディレクティブと NRT アノテーションに対応したいくつかの新しいインスペクションが使用可能になりました。

  • Redundant nullable directive(冗長な null 許容ディレクティブ)インスペクション。
  • Unused nullable directive(未使用の null 許容ディレクティブ)インスペクション。
  • null 許容参照型(NRT)アノテーションが基本メンバーの JetBrains.Annotations 属性と矛盾している場合に警告するインスペクション。

これらのインスペクションの詳細は、こちらのブログ投稿をご覧ください。

var 宣言からの移動の改善

var 宣言からの移動の改善

他の型をラップするために使用される一般的な型の var から移動する際、すべての移動アクション(Go to…(… に移動)、Find Usages(使用箇所の検索)など)は基本の型を提案するようになりました。 たとえば、ImmutableArray<Person>? 型を持つ変数の var キーワードから Go to declaration(宣言に移動)アクションを使うと、Person への移動を提案します。

詳細は、次のブログ投稿をご覧ください。

プライマリコンストラクター C# 12 プレビュー

2023.2 バージョンでは、C# 12 プレビューの非レコードクラスや構造体のプライマリコンストラクターをサポートするようになりました。 新しいプライマリコンストラクターを使用して初期化を表現できる型を検出し、コードの反復量を大幅に削減するクイックフィックスの適用を提案するインスペクションがいくつか追加されています。

型の初期化をあまり簡単に記述すべきではなく、プライマリコンストラクターを使用して表現できないことがあります。 そのような場合のために、プライマリコンストラクターパラメーターをコンストラクターと通常のフィールドに置換できるコンテキストアクションをいくつか導入しました。

プライマリコンストラクターに対応したこれらの機能とその他の機能については、別のブログ投稿で実際の動きを確認できます。

ラムダのデフォルトパラメーター値をサポート

ラムダのデフォルトパラメーター値をサポート C# 12 プレビュー

C# 12 言語アップデートをサポートする取り組みの一環として、ラムダ式のデフォルトパラメーター値のサポートを導入しています。 この構文の認識に関連する標準的な警告メッセージ一式を提供しているほか、ラムダのデフォルトパラメーター値を処理するために既存のインスペクション The parameter has the same default value(パラメーターに同じデフォルト値があります)を微調整しています。 詳細はこちらをご覧ください。

破棄可能なリソースのサポートを強化

ReSharper 2023.2 では、オブジェクトの破棄を管理しやすくすることを意図した 2 つの新しいコードインスペクションが導入されています。

  • Return of a variable captured by ‘using’ statement(‘using’ ステートメントによりキャプチャされた変数の返却)インスペクションは、返されたオブジェクトが即座に破棄されている場合に警告します。
  • Return of a task produced by ‘using’-captured object(‘using’ がキャプチャしたオブジェクトによって生成されたタスクを返却)インスペクションは、Task(タスク)が using ステートメントによってキャプチャされたオブジェクトによって生成され、即座に返されているシナリオを特定します。

IAsyncDisposable インターフェースをサポートし、リソースを解放する非同期メソッドを生成できるように Generate dispose pattern(破棄パターンの生成)機能も改善しました。

これらの追加機能の詳細は、こちらをご覧ください。

C# の破棄に対するサポートを強化

コード解析に C# の破棄をサポートするのに役立つ多数の新機能が追加されました。

  • 破棄された値の名前と型を Push-to-Hint 機能を使用してすぐに確認できるようになりました。
  • 実際に使用されている名前が _ の変数とパラメーターについて警告する The _ name is typically reserved for local parameters without usages_ の名前が使用箇所のないローカルパラメーターのために予約されています)警告が追加されています。 これらは「破棄された」値のように見えますが、実際にはまったく逆のことを表しています。
  • Use discard assignment(代入の破棄を使用)インスペクションを未使用の変数とパラメーターを破棄に置換するために使用できます。

破棄に対するサポートの強化に関する詳細は、ブログ投稿をご覧ください。

インレイヒント

コードを読みやすくするための新しいインレイヒント

タプルコンポーネント名を使用したインレイヒント

タプルの引数または戻り値の型に値を渡す場合、C# ではコンポーネント名を省略できます。 しかし、名前がなければ、ターゲット型を調べない限りは各コンポーネントの意味を理解するのがより難しくなります。 たとえば、多くのソフトウェア開発者はコンポーネントの意味を理解するためにタプル (nullfalse) が割り当てられている場所を確認する必要があります。

ここでインレイヒントが役立ちます! ReSharper 2023.2 はタプルの名前がコンポーネント式から自明ではない場合にタプルコンポーネント名を使用したインレイヒントを表示し、一目でコードを読んで理解しやすくします。

null とデフォルトのコンポーネントの場合、ReSharper 2023.2 はターゲットコンポーネントに明示的な名前がない場合でもターゲット型についてヒントを表示します。 文字列型とオブジェクト型は通常あまり有益な情報が得られないため、対象外です。

明示的な名前が Deconstruct メソッドまたはソースのタプルコンポーネントのいずれかから分かる分解パターンも、一般的に名前を読みやすくできるケースに挙げられます。 このヒントは、value is ({ }, true, null) のようにパターン自体に一致対象を理解するのに十分なデータが含まれていない場合に、追加のコンテキストを提供するために開発されました。

#pragma warning ディレクティブのサポートを改善

#pragma warning ディレクティブのサポートの改善

Pragma ディレクティブを使うと、コンパイラー警告をその ID ごとに簡単に無効化または復元することができます。 この ID はコンパイラーとの通信に活用できますが、人間の開発者が理解するには困難な場合があります。 総合的な知識がなければ、CS0168CS0618 などの ID が意味するものや注意すべきものがわかりにくいと思われます。

LINQ の情報

LINQ の情報

LINQ クエリには複数の変換や射影が伴い、複雑になりがちです。 複雑な LINQ クエリをデバッグするのに時間がかかり、これは大規模なデータセットの処理が伴う場合などは特に顕著です。 クエリの各ステップで出力を検査しやすくするため、ReSharper がデバッグ中に中間結果をインラインヒントとして表示するようになりました。

エディター情報に中間結果が示されるため、予期しない値や誤った変換が途中で発生していないかを素早く確認できるようになっています。

C++ のサポート

Safe Delete(安全な削除)

Safe Delete(安全な削除)

ReSharper C++ にはソースコードからシンボルを安全に除去できる Safe Delete(安全な削除)リファクタリングが導入されています。 このリファクタリングはクラス、関数、変数、列挙子、名前空間に加えて、概念にも使用できます。

ReSharper C++ ではシンボルを削除する前にそのシンボルの使用箇所を検索してソースコードへの変更をプレビューできるため、意図したとおりに確実にすべてを除去できます。 クラスや名前空間などの複雑なエンティティを削除しようとする場合、ReSharper C++ はそのすべてのメンバーの使用箇所を再帰的に確認します。

C++20 と C++23 の追加機能

C++20 と C++23 の追加機能

このリリースでは、if consteval、C++23 標準ライブラリモジュール、[[no_unique_address]] 属性、および static operator()/operator[] を含む複数の新しい言語機能がサポートされています。

ReSharper C++ 2023.2 の新機能

コードの整形

LINQ の情報

fluent API 呼び出しの整形

ReSharper 2023.2 の C# コードの整形では、チェーンメソッド呼び出しの可読性向上を目的とした 2 つの新しいオプションが導入されています。

1 つ目のコード整形オプションは、最初のメソッド呼び出しの前に改行するかどうかを制御するものです。 2 つ目のオプションは、メソッドとプロパティの呼び出しが混在している場合にプロパティ呼び出しの後に改行するかどうかを決めるものです。

AI Assistant 限定アクセス

AI Assistant は ReSharper にバンドルされていないため、別途インストールする必要があります。 当面の間、AI Assistant 機能を利用するには順番待ちリストに登録する必要があります。

AI Assistant に関する詳細と Toolbox App または dotUltimate インストーラーを使用したインストール方法については、ウェブヘルプをご覧ください。

AI Assistant のチャット機能

AI Assistant のチャット機能

ReSharper 内の AI Assistant はソリューションで使用されているプログラミング言語、フレームワーク、ライブラリ、およびテクノロジーを含む開発環境をデフォルトで認識します。 この認識能力により、AI がクエリに対してより的確で具体的な回答を生成できるようになっています。

Smart chat(スマートチャット)オプションは AI Assistant が特定のファイルとシンボルを参照し、コード箇所または最新の変更を取得し、特定のメソッドの使用箇所を特定できるようにします。 そのため、さらに的確な提案を行えるようになっています。

コンテキストアクション

コンテキストアクション

AI Assistant プラグインがインストールされている場合、ReSharper のコンテキストアクションに多数の AI を搭載した機能のオプションが追加されます。 AI Assistant は以下について支援できます。

  • 選択されたコードの説明
  • 潜在的な問題の特定
  • 実装されていないメソッドのコードの提案
  • XML ドキュメントの生成

予測デバッガー ベータ版 Visual Studio 2022

ReSharper 2023.2 に導入された予測デバッガーモードでは、実際にプログラムを実行しなくても実行によって発生しうるすべての状態を予測できます。このため、以下が可能となっています。

  • 期待される変数の値を表示する。
  • 実行されないプロブラムの部分を視覚的に「ミュート」する。
  • 実行を続けると例外が発生する場合に警告する。

予測デバッガーはプログラムの実行に関する新しいレベルのインサイトを提供します。 また、変更のたびにデバッグプロセスを再起動しなくても、さまざまな値を試してコードをトラブルシューティングすることも可能です。

予測デバッガーは ReSharper | Options(オプション)| Tools(ツール)| Debugger(デバッガー)| Editor Integration(エディター統合)| Predictive debugger(予測デバッガー)| Show predicted values (beta)(予測値の表示(ベータ))で有効にできます。

詳細情報

このデバッガーは現在ベータ版であるため、その能力を最大限に発揮できるようにするするにはユーザーからのフィードバックが不可欠です。 バグが発生した場合は、提案や要望を添えて課題トラッカーにご報告ください。

デコンパイラー

アセンブリの差分

ReSharper 2023.2 では、2 つのアセンブリを詳細に比較する方法を提供しています。 この機能は特定のアセンブリの 2 つのバージョンの違いを精査し、より新しいバージョンに混入している可能性のある潜在的な脆弱性を探す場合に特に便利です。

アセンブリを比較するには、Assembly Explorer(アセンブリエクスプローラー)ツールウィンドウの Compare Two Assemblies(2 つのアセンブリを比較)をクリックします。 単一ファイルアプリケーションと .exe ファイルまたは .dll ファイルの両方を選択して比較できます。

機能の詳細については、こちらをクリックしてください。

パフォーマンス

ReSharper 2023.2 では、IDE のシステムが機能するために必要なデータをキャッシュする方法を見直しました。 この修正の効果は数え切れないほどのパフォーマンステストの実施によって裏付けられており、結果的にソリューションを開くたびに消費されるディスク容量を著しく減らすことができました。 具体的に言えば、ディスク入出力時間が全体的に減り、ソリューションの読み込み時間が短縮されています。

ReSharper の内部コンポーネント構造ロジックのリファクタリングもソリューションの読み込み速度の改善に寄与しました。 詳細については、こちらをクリックしてください。

その他

Dynamic Program Analysis

  • 以前の DPA は一時停止中のデバッグ時間をコード実行時間として計上する場合があり、データベース問題の誤検出が発生していました。 バージョン 2023.2 ではこの問題が修正されています。
  • 以前の DPA は対応するコールスタックにラムダ関数によるメモリ割り当てが含まれている場合に大きなコードブロックをハイライトする可能性がありました。 現在はより細かい単位でハイライトされるようになっています。
ダウンロード

無料 30 日間体験版をご利用可能です