ReSharper 2026.1 Help

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

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

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

  2. 次のいずれかを実行します。

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

    • エディター、 ファイル構造ウィンドウ、またはその他の ReSharper ウィンドウで、変換したい項目を右クリックし、コンテキストメニューから リファクタリング を選択して、必要なリファクタリングを選びます。

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

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

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

    リファクタリングアクションをロールバックするために、ウィザードにはオプション 元に戻すを有効にするには、変更のあるすべてのファイルを編集用に開く が用意されています。 このオプションを選択すると、ReSharper は変更されたファイルをすべて新しいエディタータブで開き、リファクタリングのロールバックを有効化できます。 この場合、変更を自分で保存する必要があります。 このオプションが選択されていない場合、 ReSharper は変更された ファイルを開かずに自動的に保存します。

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

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

シグネチャーの変更

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

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

C++ 関数のシグネチャーを変更する

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

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

ReSharper: Convert to Scoped Enum

メソッドの抽出

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

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

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

C++ での抽出方法: 表現を選択する

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

C++ での抽出方法: メソッド詳細の指定

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

C++ での抽出方法: 抽出されたメソッド

フィールドの導入

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

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

以下の例では、このリファクタリングを使用して、同じ文字列の 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; };

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

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

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

以下の例では、このリファクタリングを使用して、 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 を削除して、すべての使用箇所を宣言されたデータ型に置き換えます。

ReSharper: Introduce/Inline typedef refactoring in C++

typedef の導入 リファクタリングで typedef の代わりに型エイリアスを使いたい場合は、ReSharper オプション Alt+R、O コード編集 | C++ | コードスタイル ページで対応するチェックボックスを選択してください。 詳細については、 Microsoft ドキュメントのエイリアスと typedef (C++) を参照してください。

Enum を使用して紹介する

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

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

ReSharper: Introduce Using Enum

変数の導入

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

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

ReSharper: Introduce Variable

変数のインライン化

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

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

Inline Function

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

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

Inline Function

Inline Macro

このリファクタリングを使用すると、コード内のマクロの使用箇所をすべて置換できます。 また、マクロ本体とマクロ引数における潜在的な使用箇所も報告され、手動で確認する必要があります。

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

Inline Macro

名前変更

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

ReSharper: 名前変更

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

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

2026 年 6 月 12 日