17.8 Preview 1 以降では、Visual Studioは、次の方法で C および C++ コードの品質を向上させるために#includeファイルをクリーンアップできます。
- 必要なヘッダー ファイルが別のヘッダー ファイルによって間接的にインクルードされるためにのみ、コンパイルされるコードにヘッダー ファイルを追加することを提案します。
- 未使用のヘッダー ファイルを削除するオファー。ビルド時間が短縮します。
この記事では、Visual Studio でインクルード クリーンアップを構成する方法について説明します。 インクルード クリーンアップの詳細については、C/C++ インクルード クリーンアップの概要に関する記事を参照してください。
インクルード クリーンアップをオンにする
[クリーンアップを含める] 機能は、既定ではオフになっています。
[ ツール>オプション>テキスト エディター>C/C++>Code クリーンアップ ] を選択し、[クリーンアップ #include 有効にする] を選択してオンにします。
次に、ドロップダウンを使用して、間接ヘッダーを追加したり、未使用のヘッダーを削除したりする機会に関する通知の重大度を構成します。
**[#include クリーンアップを有効にする] チェック ボックスがオンになっています。 **[使用されていないインクルードの削除の提案レベル]** と **[不足しているインクルードの追加の提案レベル]** のドロップダウンが表示されます。 ドロップダウンの内容 (**リファクタリングのみ**、**候補**、**警告**、**エラー**) が表示されています。 **[Remove unused includes suggestion level]\(未使用の削除には提案レベルが含まれています\) ドロップダウンには同じオプションが用意されていますが、**Dimmed** も追加されます。
これらのオプションは、Include Cleanup 機能が未使用のヘッダーに関して提供する通知の種類を制御します。
薄く表示
Include Cleanup は、コード エディターで未使用のヘッダー ファイルの行を淡色表示し、[ エラー一覧] ウィンドウにメッセージを表示することで、未使用のヘッダーを表示します。 コード エディターで、淡色表示された #include の上にカーソルを置いてクイック アクション メニューを表示し、[ 修正の可能性を表示] を選択するか、電球のドロップダウンをクリックして、未使用のファイルに関連するアクションを表示します。
iostream を使用するコード行がコメント アウトされているため、#include < iostream > の行が淡色表示されています。そのコード行は // std::cout << "charSize = " << charSize; です。この行にクイック アクション メニューも表示されます。 #include < iostream > がこのファイルで使用されていないことが示され、[考えられる修正内容の表示] へのリンクが含まれています。
リファクタリングのみ: [クリーンアップを含める] には、 #includeの上にマウス ポインターを合わせたり、 #include 行にカーソルを置いて Ctrl キーを押しながらピリオドキーを押したりしたときに、コード エディターのクイック アクション メニューで実行できるアクションが用意されています。
#include iostream の上にカーソルを置くと、このファイルで #include iostream が使用されていないテキストに電球が表示されます。
提案、警告、エラー: [クリーンアップを含める] は、[ エラー一覧 ] ウィンドウに [クリーンアップ メッセージを候補、警告、またはエラーとして含める] を表示できます。 いずれかを決定します。 エラー 一覧の次のスクリーンショットでは、未使用のヘッダーを警告と共に表示するように [クリーンアップを含める] が構成されています。 インクルード クリーンアップによる出力が表示されるように、ドロップダウン フィルターで [ビルド + Intellisense] が選択されていることを確認します。
ドロップダウン フィルターは **[Build + IntelliSense]\(ビルド + IntelliSense\) に設定されています。 警告が表示されます。VCIC002 - このファイルでは '#include
Tools>Options>All Settings>Languages>C/C++>Code cleanup>Include cleanup を選択して有効にします。 ドロップダウンを使用して、未使用の #include ステートメント、最適化できる #include ステートメント(必要な推移的インクルードを直接追加した後に削除できるもの)、および推移的にインクルードされているが不足している #include ステートメントを強調表示する通知をどのように受け取るかを設定します。
コード エディターで未使用のヘッダーを強調表示する方法、最適化できるヘッダー、推移的に含まれるヘッダーを選択するためのドロップダウンを示すスクリーンショット。
オプションの意味:
淡色
インクルード クリーンアップでは、コード エディターで未使用のヘッダー ファイルの行を淡色表示し、[ エラー一覧] ウィンドウにメッセージとして、未使用のヘッダーが表示されます。 コード エディターで、淡色表示された #include の上にカーソルを置いてクイック アクション メニューを表示し、[ 修正の可能性を表示] を選択するか、電球のドロップダウンをクリックして、未使用のファイルに関連するアクションを表示します。
'iostream' を使用するコード行がコメント アウトされているため、'#include
なし: アクションを実行しません。 [クリーンアップを含める] には、 #includeの上にマウス ポインターを合わせたり、 #include 行にカーソルを置いて Ctrl キーを押しながらピリオドキーを押したりしたときに、クイック アクション メニューを使用してコード エディターで実行できるアクションが引き続き用意されています。
提案、警告、エラー: [クリーンアップを含める] は、[エラー一覧] ウィンドウに [クリーンアップ メッセージを候補、警告、またはエラーとして含める] を表示できます。 いずれかを決定します。 エラー 一覧の次のスクリーンショットでは、未使用のヘッダーを警告と共に表示するように [クリーンアップを含める] が構成されています。 インクルード クリーンアップによる出力が表示されるように、ドロップダウン フィルターで [ビルド + Intellisense] が選択されていることを確認します。
ドロップダウン フィルターは **[Build + IntelliSense]\(ビルド + IntelliSense\) に設定されています。 警告が表示されます。VCIC002 - このファイルでは '#include
その他の構成オプション
その他の インクルード クリーンアップ 設定は、[ ツール>オプション>テキスト エディター>C/C++>Code クリーンアップで使用できます。
-
並べ替えには、並べ替えを必要とするディレクティブ
#includeフラグが含まれます。 [エラー一覧] ウィンドウに表示されるメッセージの重大度通知レベルを選択します。なし (機能がオフ)、提案、警告、またはエラーです。 -
スタイル: ステートメント
#include並べ替える方法を制御します。 かっこの種類を考慮せずに並べ替えるには Ignore を、引用符付きの include ディレクティブを山かっこ付きの include ディレクティブより上に並べ替えるには Quotes を、山かっこ付きの include ディレクティブを引用符付きの include ディレクティブより上に並べ替えるには Angle brackets を選択します。 - 大文字/小文字を区別: 選択すると、並べ替え時の比較でファイル名の大文字と小文字を区別します。 チェックを外すと、並べ替え時は大文字と小文字が区別されません。
追加の インクルード クリーンアップ 設定は、ツール>オプション>すべての設定>言語>C/C++>コード クリーンアップ>インクルード クリーンアップ にあります:
- 高度なフィルター処理: 選択すると、派生クラス オブジェクトに対してメンバー関数を呼び出したが、その関数が基底クラスで定義されている場合、基底クラス ヘッダーの追加は推奨されません。 このオプションをオンにすると、使用するシンボルが直接参照する型ではなく基底クラスから取得される場合に、ノイズの多い候補を減らすことができます。
- Include Cleanup のための編集を行った後で #include ディレクティブを並べ替える: 選択すると、組み込みの #include 並べ替え機能が Include Cleanup アクションの後に実行されます。
- インクルード クリーンアップの編集を行った後、#include ディレクティブの書式を設定します。選択すると、format コマンドはインクルード クリーンアップ アクションの後に実行されます。
.editorconfig を使用してインクルード クリーンアップを構成する
[クリーンアップを含める] 機能には、クリーンアップ候補から指定されたインクルードを除外したり、一部のヘッダー ファイルが必要であることを示したりして、ツールで未使用としてマークされないようにするなど、より多くのオプションがあります。
.editorconfig ファイルでこれらのオプションを定義します。 このファイルをプロジェクトに追加して、コードベースで動作するすべてのユーザーに一貫したコーディング スタイルを適用します。 プロジェクトに .editorconfig ファイルを追加する方法の詳細については、「EditorConfig を使用して移植可能なカスタム エディター設定を作成する」を参照してください。
インクルード クリーンアップで使用できる .editorconfig の設定は次のとおりです。
| 設定 | 値 | 例 |
|---|---|---|
cpp_include_cleanup_add_missing_error_tag_type
推移的なインクルード メッセージの追加のエラー レベルを設定します。 |
nonesuggestionwarningerror |
cpp_include_cleanup_add_missing_error_tag_type = suggestion |
cpp_include_cleanup_alternate_files
間接インクルードのメッセージを非表示にします。 たとえば、 #include <windows.h> していて、その間接的にインクルードされるヘッダー winerror.h または minwindef.h の内容だけを使用している場合、ツールはそれらを追加するよう提案しません。 |
file1:file2[:file3...][,file4:file5...] |
cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h
または cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h,umbrella.h:internal.h |
cpp_include_cleanup_excluded_files
指定したファイルをインクルード クリーンアップ メッセージから除外します。 ヘッダーに関連する提案が表示されることはありません。追加する場合でも、未使用である場合でも同様です。 |
filename | cpp_include_cleanup_excluded_files = vcruntime.h, vcruntime_string.h |
cpp_include_cleanup_remove_unused_error_tag_type
未使用のインクルード メッセージを削除するためのエラー レベルを設定します。 |
nonesuggestionwarningerrordimmed |
cpp_include_cleanup_remove_unused_error_tag_type = dimmed |
cpp_include_cleanup_replacement_files
インクルード クリーンアップ処理中に file1 を file2 に置き換えます。 たとえば、 cstdio よりも stdio.h を使いたい場合があるかもしれません。
#include <cstdio> と #include <stdio.h> の両方を含むファイルがあり、この設定で stdio.h のコンテンツのみを使用する場合は、処理中に stdio.h の使用が cstdio に置き換えられたため、インクルード クリーンアップによって stdio.h を削除するように指示されます。 どちらのコンテンツも使用しない場合は、インクルード クリーンアップのときに両方を削除するように指示されます。 |
file1:file2 | cpp_include_cleanup_replacement_files = stdio.h:cstdio,stdint.h:cstdint |
cpp_include_cleanup_required_files
file1 の使用に file2 が必要であることを指定します。 たとえば、 atlwin.h を使用する場合は、その altbase.h も含める必要があることを指定します。 |
file1:file2 | cpp_include_cleanup_required_files = atlwin.h:altbase.h, atlcom.h:altbase.h |
cpp_sort_includes_error_tag_type
sort-includes メッセージのエラー レベルを設定します。 none 機能をオフにします。
suggestion は ... の波線を表示し、エラー一覧にメッセージを追加します。
warning は緑色の波線を示し、警告を追加します。
error は赤い波線を示し、エラーを追加します。 |
nonesuggestionwarningerror |
cpp_sort_includes_error_tag_type = suggestion |
cpp_sort_includes_priority_case_sensitive
true場合、並べ替えの比較ではファイル名を大文字と小文字を区別して比較します。
false の場合、並べ替えでは大文字と小文字を区別しません。 |
truefalse |
cpp_sort_includes_priority_case_sensitive = false |
cpp_sort_includes_priority_style
並べ替えで括弧のスタイルを考慮するかどうかを指定します。 ignore は括弧を無視して並べ替えます。
quoted は、引用符付きの include を山かっこ付きの include より前に並べ替えます。
angle_brackets は、山かっこ形式の include を引用符形式の include より上に並べ替えます。 |
ignorequotedangle_brackets |
cpp_sort_includes_priority_style = quoted |
Visual Studio 2026 以降では、次の設定を使用できます。
| 設定 | 値 | 例 |
|---|---|---|
cpp_include_cleanup_format_after_edits
true の場合、[クリーンアップを含める] アクションの後にフォーマット コマンドを実行します。
#include ディレクティブを並べ替えるように clang-format を設定している場合に便利です。 |
truefalse |
cpp_include_cleanup_format_after_edits = true |
cpp_include_cleanup_sort_after_edits
true の場合、任意の [Include Cleanup] アクションの後に、組み込みのインクルード並べ替え機能を実行します。 clang-format を使って #include ディレクティブを並べ替えない場合に役立ちます。 |
truefalse |
cpp_include_cleanup_sort_after_edits = true |
コードを使用して未使用のインクルード メッセージを抑制する
Visual Studio 2026 以降では、同じ行にコメントを追加することで、単一の#include ディレクティブに対するクリーンアップ メッセージの// VCIC-Excludedを抑制できます。 Include Cleanup ツールでは、未使用と思われる場合でも、そのインクルードを削除することは推奨されません。 マーカーの後に省略可能な理由テキストを指定して、今後の読者がインクルードが存在する理由を把握できるようにします。
#include "Header2.h" // VCIC-Excluded: needed for the ATL macros used below
電球メニューを使用して、 // VCIC-Excluded コメントを #include ディレクティブに追加することもできます。 既定ではオフになっているため、ツール>オプション>すべての設定>言語>C/C++>コード クリーンアップ>インクルードのクリーンアップ で [インクルードのクリーンアップ] がオンになっていることを確認してください。 次に、#include 行にカーソルを合わせ、その他の修正>ソースで VCIC002 を抑制を選択します::
// VCIC-Excludedコメントは、ファイルの#includeにのみ適用されます。
cpp_include_cleanup_excluded_filesで.editorconfigを設定すると、.editorconfigによって管理されるすべてのファイルでその除外が適用されます。