JetBrains Rider 2024.1 ヘルプ

C++ のリファクタリング

リファクタリングを実行する

  1. シンボルにキャレットを置き、リファクタリングするコードフラグメントを選択するか、ツールウィンドウ内の項目を選択します。

  2. 以下のいずれか 1 つを実行します:

    • メインメニューからリファクタリングを選択し、目的のリファクタリングを選択します。このメニューで使用できるリファクタリングのリストは、現在のコンテキストによって異なります。JetBrains Rider がコンテキストのリファクタリングを提案できない場合、メニュー全体が無効になります。

    • メインメニューからリファクタリング | リファクタリングを選択するか、Ctrl+Alt+Shift+T を押して、適用可能なリファクタリングのリストを表示し、そのうちの 1 つを選択します。選択項目のコンテキストメニューでリファクタリングを選択することもできます。

    • 特定のリファクタリングに割り当てられたデフォルトのキーボードショートカット(Windows、Linux/(macOs)を使用するか、お気に入りのリファクタリングコマンドにカスタムショートカットを割り当てます。

  3. 選択したリファクタリングにユーザー入力が必要な場合は、リファクタリングウィザードが開きます。ウィザードのダイアログはモーダルではないため、ウィザードが開いている間にコードを編集できます。

  4. リファクタリング操作によってコードの競合 (名前の重複、可視性の競合など) が発生する場合、ウィザードはリファクタリングを適用する前の最後のステップで競合のリストを表示します。一部の競合については、ウィザードがクイックフィックスを提案することもできます。詳細については、リファクタリングの競合を解決するを参照してください。

  5. リファクタリングが完了した直後に、他のファイルを含め、どこでも行うすべての変更が単一の操作として登録されます。元に戻すアクション Ctrl+Z を使用して、これらすべての変更を 1 回のキーストロークでロールバックできます。

一部のリファクタリングは、エディターでコードを変更した直後に使用できます。詳細については、インプレースリファクタリングを参照してください。

シグネチャーの変更

シグネチャーの変更リファクタリングでは、関数のシグネチャーに対して 1 つ以上の異なる変更を加えることができます。関数のすべての用途、実装、オーバーライドはそれに応じて更新されます。

専用のショートカット Ctrl+F6 を使用してこのリファクタリングを呼び出すこともできます。

Changing signature of a C++ function

スコープ付き列挙型に変換

スコープ付き列挙型に変換リファクタリングは、C スタイルの列挙宣言を C++11 スコープの列挙に変換できます。これを呼び出すには、キャレットを列挙子に置き、リファクタリングメニューからスコープ付き列挙型に変換を選択するか、メインメニューからリファクタリング | 変換 | スコープなし列挙型からスコープ付き列挙型へを選択します。

JetBrains Rider: Convert to Scoped Enum

メソッドの抽出

このリファクタリングにより、選択したコードフラグメントに基づいて新しいメソッドを作成できます。JetBrains Rider は、選択されたステートメントを分析し、メソッドパラメーターに変換できる変数、またはその戻り値を表す変数を検出します。

専用のショートカット Ctrl+Alt+M を使用してこのリファクタリングを呼び出すこともできます。

別の方法の判別式を計算するロジックを抽出するとします。

Extract method in C++: Selecting expression

メソッドの抽出ダイアログでは、メソッドの引数を選択し、戻り値を選択して結果のメソッドをプレビューできます。

Extract method in C++: Specifying method details

次へをクリックするとすぐに、新しいメソッドが作成され、選択された式がメソッド呼び出しに置き換えられます。

Extract method in C++: Extracted method

フィールドの導入

このリファクタリングでは、選択した式に基づいて新しいフィールドを作成し、式またはコンストラクターで初期化し、現在の型の式の出現を新しく導入されたフィールドへの参照に置き換えることができます。

専用のショートカット Ctrl+Alt+F を使用してこのリファクタリングを呼び出すこともできます。

以下の例では、このリファクタリングを使用して、同じ文字列の 2 つの出現箇所を新しいプライベートフィールドに置き換え、既存のコンストラクターから初期化します。

#include <exception> #include <iostream> class ErrorHandler { ErrorHandler() { } public: void logError(std::exception& e) { auto errorLogFIle = fopen("log.txt", "w"); fprintf(errorLogFIle, "Something has failed: %s", e.what()); fclose(errorLogFIle); } void printError(std::exception& e) { printf("Something has failed: %s", e.what()); } private: };
#include <exception> #include <iostream> class ErrorHandler { ErrorHandler(): error_message("Something has failed: %s") {} public: void logError(std::exception&; e) { auto errorLogFIle = fopen("log.txt", "w"); fprintf(errorLogFIle, error_message, e.what()); fclose(errorLogFIle); } void printError(std::exception& e) { printf(error_message, e.what()); } private: const char* error_message; };

ネームスペースエイリアスの紹介

このリファクタリングは、名前空間使用箇所の名前空間エイリアスを作成し、現在のドキュメントで現在選択されている使用箇所またはすべての使用箇所をエイリアスで置き換えるのに役立ちます。選択した使用箇所に応じて、名前空間エイリアスは使用箇所に最も近い可能な範囲で宣言されます。

このリファクタリングを呼び出すには、名前空間の使用箇所と Ctrl+Alt+Shift+T にキャレットを置くか、メインメニューからリファクタリング | リファクタリング ... を選択し、リファクタリングポップアップでネームスペースエイリアスを導入するを選択します。ドキュメント内に名前空間の使用箇所が複数ある場合は、現在の使用箇所を置き換えるか、すべての使用箇所を置き換えるかを選択できます。

以下の例では、このリファクタリングを使用して、SpaceOne::SpaceTwo 名前空間の名前空間エイリアスを追加します。

namespace SpaceOne { namespace SpaceTwo { int ten = 10; inline void foo() { // do something } } } inline int test() { SpaceOne::SpaceTwo::foo(); return SpaceOne::SpaceTwo::ten; }
namespace SpaceOne { namespace SpaceTwo { int ten = 10; inline void foo() { // do something } } } inline int test() { namespace s_two_alias = SpaceOne::SpaceTwo; s_two_alias::foo(); return s_two_alias::ten; }

typedef の導入 / インライン

typedef の導入リファクタリングを使用すると、選択したデータ型の typedef をすばやく作成し、選択したデータ型とオプションで現在のファイル内のこのデータ型のすべてを新しく作成した typedef で置き換えることができます。

Typedef のインライン化リファクタリングは正反対です。選択した typedef を削除し、そのすべての用途を宣言されたデータ型に置き換えます。

JetBrains Rider: Introduce/Inline typedef refactoring in C++

typedef の導入リファクタリングで typedef の代わりに型エイリアスを使用する場合は、JetBrains Rider 設定 Ctrl+Alt+S言語 & フレームワーク | C++ | コードスタイルページで対応するチェックボックスを選択します。詳細については、Microsoft Docs のエイリアスと typedef(C++)を参照してください。

Enum を使用して紹介する

C++20 using enum 構文を使用すると、ターゲット列挙からすべての列挙子を追加できます。その結果、メンバー列挙子を使用するときに、列挙名の繰り返しを省略できます。

Enum を使用して紹介するリファクタリングは、using enum ステートメントの追加に役立ちます。このリファクタリングを呼び出すには、キャレットを列挙子に置き、Ctrl+Alt+Shift+T を押すか、メインメニューからリファクタリング | リファクタリング ... を選択し、リファクタリングポップアップで Enum を使用して紹介するを選択します。ドキュメント内に列挙型の使用箇所が複数ある場合は、現在の使用箇所を置き換えるか、すべての使用箇所を置き換えるかを選択できます。

JetBrains Rider: Introduce Using Enum

変数の導入

このリファクタリングでは、選択した式に基づいて新しいローカル変数を作成し、式で初期化し、最後にメソッド内の式のすべてを新しく導入した変数への参照に置き換えることができます。

専用のショートカット Ctrl+Alt+V を使用してこのリファクタリングを呼び出すこともできます。

JetBrains Rider: Introduce Variable

変数のインライン化

このリファクタリングでは、コード内の変数のすべてをその初期化子で置き換えることができます。リファクタリングは、初期化後に変数値が変更されない場合にのみ適用される必要があることに注意してください。

専用のショートカット Ctrl+Alt+N を使用してこのリファクタリングを呼び出すこともできます。

関数のインライン化

このリファクタリングにより、関数呼び出しを関数の本体に置き換えることができます。JetBrains Rider は、必要な変換を実行し、すべての名前の競合を処理し、結果のコードを再フォーマットするか、メソッドをインライン化するのが得策ではない理由を説明する短いポップアップメッセージを表示します。

専用のショートカット Ctrl+Alt+N を使用してこのリファクタリングを呼び出すこともできます。

Inline Function

名前変更

C++ では、最も時間のかかるリファクタリングの 1 つがサポートされています。シンボルの名前を変更すると、手動で変更しようとすると、多くの問題が発生する可能性があります。名前変更リファクタリング(専用の Shift+F6 ショートカットでも利用可能)を呼び出すと、すべてのチェックが JetBrains Rider によって行われます。競合が存在しない場合はすべての変更がスムーズに実行されるか、必要な適切な変更のみが行われるように手動で解決できる競合のリストが表示されます。

JetBrains Rider: Rename

このリファクタリングを使用してクラスの名前を変更すると、JetBrains Rider は対応するファイル(ソースとヘッダー)の名前を自動的に変更します。

ソリューションエクスプローラーのファイルでこのリファクタリングを呼び出すこともできます。ファイルに新しい名前を指定するとすぐに、JetBrains Rider はインクルード内のすべての使用箇所を更新します。

関連ページ:

コンテキストアクション

コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変更、null をチェックするコードの生成、'foreach' の 'for' への変換などの小さな変更を素早く導入できます。JetBrains Rider は、サポートされているすべての言語で数百のコンテキストアクションを提供します。完全なリストは、JetBrains Rider 設定のページお...

キーボードショートカット: キーマップの比較 (Windows)

定義済みのすべてのキーマップの中から、次のいずれかを選択する可能性が高くなります。Visual Studio 2022 — このキーマップは、ReSharper を使用せずにプレーンな Visual Studio を使用した経験のある Windows ユーザーに推奨されます。IntelliJ/IntelliJ (macOS) — このキーマップは、IntelliJ IDEA または JetBrains IntelliJ プラットフォームベースの IDE のいくつかの経験があり、そこで IntelliJ...

キーボードショートカットをカスタマイズする

JetBrains Rider にはいくつかの事前定義されたキーマップが含まれており、頻繁に使用するショートカットをカスタマイズできます。キーマップ構成を表示するには、設定 / 環境設定ダイアログを開き、キーマップを選択します。定義済みのすべてのキーマップの中から、次のいずれかを選択する可能性が高くなります。Visual Studio 2022 — このキーマップは、ReSharper を使用せずにプレーンな Visual Studio を使用した経験のある Windows ユーザーに推奨されま...

リファクタリングの競合を解決する

すべての JetBrains Rider のリファクタリングはソリューション全体に適用されるため、多くのファイルが影響を受ける可能性があり、一部の変更は既存のコードと競合する可能性があります。競合が発生した場合、JetBrains Rider はそれらを検出し、リファクタリングウィザードの最後のページに競合リストを表示します。例: 安全な削除リファクタリングをメソッドに適用するときに表示されるいくつかの競合を次に示します。競合には 2 つの型があります。コンパイルを中断することなく削除できる使用箇...

インプレースリファクタリング

一部のリファクタリングは、コマンドを呼び出さずに適用できます。エディターでコードを変更するだけで十分です。変更がコードをリファクタリングするためのインテンションである可能性があることを JetBrains Rider が検出すると、変更されたコードの周囲に灰色の境界線が表示され、対応するアクションインジケーターが左側に表示されます。このアクションを使用して、ソリューション全体にリファクタリングを適用できます。以下のリファクタリングがその場で利用可能です: 名前変更:エディターで宣言の権利を変更し...

リファクタリング

このコマンドは、現在のコンテキストで利用可能なすべての JetBrains Rider のリファクタリングのショートカットです。ほとんどの場所からこのコマンドを呼び出すことができます: エディターでのシンボルの宣言または使用について、エディターでの選択について、ソリューションエクスプローラーの現在のアイテムまたは選択。状況に応じて利用可能なものをチェックして適用するリファクタリングエディターのシンボルにキャレットを配置するか、構造ツールウィンドウでシンボルを選択します。を押します。リファクタリング...