Visual Studio で C/C++ のインクルード クリーンアップを設定する

17.8 Preview 1 以降では、Visual Studioは、次の方法で C および C++ コードの品質を向上させるために#includeファイルをクリーンアップできます。

  • 必要なヘッダー ファイルが別のヘッダー ファイルによって間接的にインクルードされるためにのみ、コンパイルされるコードにヘッダー ファイルを追加することを提案します。
  • 未使用のヘッダー ファイルを削除するオファー。ビルド時間が短縮します。

この記事では、Visual Studio でインクルード クリーンアップを構成する方法について説明します。 インクルード クリーンアップの詳細については、C/C++ インクルード クリーンアップの概要に関する記事を参照してください。

インクルード クリーンアップをオンにする

[クリーンアップを含める] 機能は、既定ではオフになっています。

[ ツール>オプション>テキスト エディター>C/C++>Code クリーンアップ ] を選択し、[クリーンアップ #include 有効にする] を選択してオンにします。

次に、ドロップダウンを使用して、間接ヘッダーを追加したり、未使用のヘッダーを削除したりする機会に関する通知の重大度を構成します。

C/C++ > コード クリーンアップ>テキスト エディターで開いた [ツール] オプション ダイアログ。

**[#include クリーンアップを有効にする] チェック ボックスがオンになっています。 **[使用されていないインクルードの削除の提案レベル]** と **[不足しているインクルードの追加の提案レベル]** のドロップダウンが表示されます。 ドロップダウンの内容 (**リファクタリングのみ**、**候補**、**警告**、**エラー**) が表示されています。 **[Remove unused includes suggestion level]\(未使用の削除には提案レベルが含まれています\) ドロップダウンには同じオプションが用意されていますが、**Dimmed** も追加されます。

これらのオプションは、Include Cleanup 機能が未使用のヘッダーに関して提供する通知の種類を制御します。

薄く表示

Include Cleanup は、コード エディターで未使用のヘッダー ファイルの行を淡色表示し、[ エラー一覧] ウィンドウにメッセージを表示することで、未使用のヘッダーを表示します。 コード エディターで、淡色表示された #include の上にカーソルを置いてクイック アクション メニューを表示し、[ 修正の可能性を表示] を選択するか、電球のドロップダウンをクリックして、未使用のファイルに関連するアクションを表示します。

淡色表示された #include < iostream > 行のスクリーンショット。

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 ステートメントを強調表示する通知をどのように受け取るかを設定します。

[すべての設定] > [言語] > C/C++ > [コード クリーンアップ] > [インクルードのクリーンアップ] で開かれている [ツール オプション] ダイアログのスクリーンショット。

コード エディターで未使用のヘッダーを強調表示する方法、最適化できるヘッダー、推移的に含まれるヘッダーを選択するためのドロップダウンを示すスクリーンショット。

オプションの意味:

淡色

インクルード クリーンアップでは、コード エディターで未使用のヘッダー ファイルの行を淡色表示し、[ エラー一覧] ウィンドウにメッセージとして、未使用のヘッダーが表示されます。 コード エディターで、淡色表示された #include の上にカーソルを置いてクイック アクション メニューを表示し、[ 修正の可能性を表示] を選択するか、電球のドロップダウンをクリックして、未使用のファイルに関連するアクションを表示します。

淡色表示された #include < iostream > 行のスクリーンショット。

'iostream' を使用するコード行がコメント アウトされているため、'#include ' の行は淡色表示されます。そのコード行は 、"charSize = " << charSize; << '// std::cout' です。 この行にはクイック アクション メニューも表示されます。 このファイルでは '#include ' が使用されておらず、**[Show potential fixes]\(潜在的な修正プログラムを表示する\) へのリンクが含まれています。

なし: アクションを実行しません。 [クリーンアップを含める] には、 #includeの上にマウス ポインターを合わせたり、 #include 行にカーソルを置いて Ctrl キーを押しながらピリオドキーを押したりしたときに、クイック アクション メニューを使用してコード エディターで実行できるアクションが引き続き用意されています。

提案、警告、エラー: [クリーンアップを含める] は、[エラー一覧] ウィンドウに [クリーンアップ メッセージを候補、警告、またはエラーとして含める] を表示できます。 いずれかを決定します。 エラー 一覧の次のスクリーンショットでは、未使用のヘッダーを警告と共に表示するように [クリーンアップを含める] が構成されています。 インクルード クリーンアップによる出力が表示されるように、ドロップダウン フィルターで [ビルド + Intellisense] が選択されていることを確認します。

[エラー一覧] ウィンドウのスクリーンショット。

ドロップダウン フィルターは **[Build + IntelliSense]\(ビルド + IntelliSense\) に設定されています。 警告が表示されます。VCIC002 - このファイルでは '#include ' は使用されません。

その他の構成オプション

その他の インクルード クリーンアップ 設定は、[ ツール>オプション>テキスト エディター>C/C++>Code クリーンアップで使用できます。

  • 並べ替えには、並べ替えを必要とするディレクティブ #include フラグが含まれます。 [エラー一覧] ウィンドウに表示されるメッセージの重大度通知レベルを選択します。なし (機能がオフ)、提案警告、またはエラーです。
  • スタイル: ステートメント #include 並べ替える方法を制御します。 かっこの種類を考慮せずに並べ替えるには Ignore を、引用符付きの include ディレクティブを山かっこ付きの include ディレクティブより上に並べ替えるには Quotes を、山かっこ付きの include ディレクティブを引用符付きの include ディレクティブより上に並べ替えるには Angle brackets を選択します。
  • 大文字/小文字を区別: 選択すると、並べ替え時の比較でファイル名の大文字と小文字を区別します。 チェックを外すと、並べ替え時は大文字と小文字が区別されません。

[詳細なフィルター処理]、[編集後に並べ替え]、[含まれる項目の並べ替え]、[優先度の並べ替え]、[スタイル]、[大文字と小文字を区別する] の設定が強調表示されているVisual Studioオプションのスクリーンショット。

追加の インクルード クリーンアップ 設定は、ツール>オプション>すべての設定>言語>C/C++>コード クリーンアップ>インクルード クリーンアップ にあります:

  • 高度なフィルター処理: 選択すると、派生クラス オブジェクトに対してメンバー関数を呼び出したが、その関数が基底クラスで定義されている場合、基底クラス ヘッダーの追加は推奨されません。 このオプションをオンにすると、使用するシンボルが直接参照する型ではなく基底クラスから取得される場合に、ノイズの多い候補を減らすことができます。
  • Include Cleanup のための編集を行った後で #include ディレクティブを並べ替える: 選択すると、組み込みの #include 並べ替え機能が Include Cleanup アクションの後に実行されます。
  • インクルード クリーンアップの編集を行った後、#include ディレクティブの書式を設定します。選択すると、format コマンドはインクルード クリーンアップ アクションの後に実行されます。

[フィルター処理の詳細設定]、[並べ替え]、[書式] の設定が強調表示されている [クリーンアップ オプションを含める] Visual Studioのスクリーンショット。

.editorconfig を使用してインクルード クリーンアップを構成する

[クリーンアップを含める] 機能には、クリーンアップ候補から指定されたインクルードを除外したり、一部のヘッダー ファイルが必要であることを示したりして、ツールで未使用としてマークされないようにするなど、より多くのオプションがあります。 .editorconfig ファイルでこれらのオプションを定義します。 このファイルをプロジェクトに追加して、コードベースで動作するすべてのユーザーに一貫したコーディング スタイルを適用します。 プロジェクトに .editorconfig ファイルを追加する方法の詳細については、「EditorConfig を使用して移植可能なカスタム エディター設定を作成する」を参照してください。

インクルード クリーンアップで使用できる .editorconfig の設定は次のとおりです。

設定
cpp_include_cleanup_add_missing_error_tag_type

推移的なインクルード メッセージの追加のエラー レベルを設定します。
none
suggestion
warning
error
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

未使用のインクルード メッセージを削除するためのエラー レベルを設定します。
none
suggestion
warning
error
dimmed
cpp_include_cleanup_remove_unused_error_tag_type = dimmed
cpp_include_cleanup_replacement_files

インクルード クリーンアップ処理中に file1file2 に置き換えます。 たとえば、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 は赤い波線を示し、エラーを追加します。
none
suggestion
warning
error
cpp_sort_includes_error_tag_type = suggestion
cpp_sort_includes_priority_case_sensitive

true場合、並べ替えの比較ではファイル名を大文字と小文字を区別して比較します。 false の場合、並べ替えでは大文字と小文字を区別しません。
true
false
cpp_sort_includes_priority_case_sensitive = false
cpp_sort_includes_priority_style

並べ替えで括弧のスタイルを考慮するかどうかを指定します。 ignore は括弧を無視して並べ替えます。 quoted は、引用符付きの include を山かっこ付きの include より前に並べ替えます。 angle_brackets は、山かっこ形式の include を引用符形式の include より上に並べ替えます。
ignore
quoted
angle_brackets
cpp_sort_includes_priority_style = quoted

Visual Studio 2026 以降では、次の設定を使用できます。

設定
cpp_include_cleanup_format_after_edits

true の場合、[クリーンアップを含める] アクションの後にフォーマット コマンドを実行します。 #include ディレクティブを並べ替えるように clang-format を設定している場合に便利です。
true
false
cpp_include_cleanup_format_after_edits = true
cpp_include_cleanup_sort_after_edits

true の場合、任意の [Include Cleanup] アクションの後に、組み込みのインクルード並べ替え機能を実行します。 clang-format を使って #include ディレクティブを並べ替えない場合に役立ちます。
true
false
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 を抑制を選択します::

Visual Studio のライトバルブ メニューのスクリーンショット。[ソース内で VCIC002 を抑制]が表示されています。

// VCIC-Excludedコメントは、ファイルの#includeにのみ適用されます。 cpp_include_cleanup_excluded_files.editorconfigを設定すると、.editorconfigによって管理されるすべてのファイルでその除外が適用されます。

関連項目

C/C++ インクルード クリーンアップの概要
クリーンアップ メッセージを含める