Visual Studio編です。今回は、コードの「見た目」を整えるコード整形について解説します。

コード整形とは、インデントや空白、改行などを統一して、コードの見た目を揃える技術です。コードの動作は一切変えずに、読みやすさと一貫性を向上させます。

以下のような方に役立つ内容となっています。

  • コードのインデントや空白がバラバラで気になる
  • チーム開発でコードスタイルを統一したい
  • 保存するたびに自動でコードを整形したい
プロ太

コード整形は、コードの「見た目の改善」です。きれいに揃ったコードは読みやすく、バグも見つけやすくなりますよ!

Visual Studioの基本については以下の記事を参考にしてください。

C#入門編 Visual Studio 2022 初心者向けガイド ~基本から応用まで~ Visual Studio編です。今回はプログラミングにおける強力な味方であるVisual Studioについて基本から応用まで解説し...

コード整形とは?

コード整形とは、インデント・空白・改行などのスタイルを統一する作業です。

たとえば、以下のようなコードを見たことはないでしょうか?

class Person
{
  public void Run()
{
        Console.WriteLine("Hello");
  }
}

インデントがバラバラで、ブレース({})の位置も不統一です。動作には問題ありませんが、読みにくいですよね。

コード整形を行うと、このようなスタイルの乱れを自動で修正できます。

プロ美

コードの動きは変わらないけど、見た目がきれいになるんだね!

個人環境でのコード整形

まずは、自分のVisual Studio内で完結するコード整形機能を紹介します。個人開発であれば、この内容だけで十分です。

「Ctrl+K, D」:ドキュメントのフォーマット

最も基本的な整形機能です。インデント・空白・改行を一瞬で整形します。

Visual Studioのコードエディタ上でショートカットキー「Ctrl+K, D(Ctrlを押しながらK、続けてD)」で実行できます。

インデント、空白、改行、ブレース位置が自動で修正されました。

「Ctrl+K, E」:コードクリーンアップ

フォーマットに加えて、usingの整理などのコードスタイル修正も一括で行います。

コードエディタ上でショートカットキー「Ctrl+K, E(Ctrlを押しながらK、続けてE)」で実行できます。以下のコードへ適用してみましょう。

using System.Text.RegularExpressions;
using System.Text.Json;
using System.Globalization; // 未使用

class Program
{
  static void Main()
    {
        string json = JsonSerializer.Serialize(new { message = "Hello" });
      bool isMatch = Regex.IsMatch(json, @"""message""");
      Console.WriteLine($"{json} / match={isMatch}");
    }
}

次のようになります。

さきほどのドキュメントフォーマットに加えて、usingの整理(不要なusingの削除、並べ替え)が行われています。

プロ美

Ctrl+K, D(ドキュメントフォーマット)の上位互換みたいな感じだね!

プロ太

そうですね。普段使いはCtrl+K, E(コードクリーンアップ)がおすすめです。using整理まで一気にやってくれますよ。

保存時に自動でコードクリーンアップを実行

毎回ショートカットを押すのが面倒な場合、保存時(Ctrl+S)に自動でコードクリーンアップを実行できます。以下の手順で設定します。

  1. メニューから「ツール>オプション」を開く
  2. テキスト エディター → コードのクリーンアップ を選択する
  3. 「[プロファイルの保存]で[コードのクリーンアップ]」でプロファイル1を指定
  4. 必要に応じて「コードクリーンアップの構成」でカスタマイズ

※プロファイルはクリーンアップで実行する修正ルールのセットです。1と2の2つがありますが、通常はプロファイル1で問題ありません。

これだけで、保存(Ctrl+S)するたびにコードが自動整形されます。

プロ美

保存するたびに自動で整形されるの便利!

プロ太

これを設定しておくと、意識しなくても常にきれいな状態を保てますね。個人開発ならこの設定だけで十分です!

チーム開発での整形

ここからは、チーム全員でコードスタイルを統一するための方法を紹介します。

個人環境の設定(前章)は自分のVisual Studio内でのみ有効です。チーム開発では、メンバー全員が同じスタイルでコードを書くことが重要になります。

そのために使うのが EditorConfigdotnet format の組み合わせです。

EditorConfig と dotnet format でルールを共有・強制する

EditorConfig(ルール記述)

EditorConfigは、コードスタイルのルールを定義する設定ファイル(.editorconfig)です。以下のように配置します。

MyProject/
├── .editorconfig      ← ここに置く
├── MyProject.sln
└── MyProject/
    └── Program.cs

以下はシンプルな.editorconfigファイルの例です。

# トップレベル EditorConfigであることを示す
# (親ディレクトリの.editorconfigを探索しない)
root = true

[*.cs]
# ── (1): インデントは4スペース ──
indent_style = space
indent_size = 4

# ── (2): 型が明らかな場合は var を使う(違反時は警告) ──
csharp_style_var_when_type_is_apparent = true:warning

# ── (3): file-scoped namespace(違反時は警告) ──
csharp_style_namespace_declarations = file_scoped:warning

この設定配置をしたうえで、次のようなコードを作ってみましょう。

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            List<string> names = new List<string> { "みかん", "りんご" };
        }
    }
}

すると、Visual Studio上で警告がでます。

プロ美

.editorconfigファイルをGitで管理してチームへ共有すれば、全員のVisual Studio環境で、ルール違反時に警告がでるようになるんだね!

プロ太

その通りです!さらに次に紹介するdotnet formatコマンドで、コード全体を一括して修正したり、ルール違反を検出したりもできます。

これらについて詳しくは、EditorConfigの仕組みや、ルールの記述方法についてのMicrosoft Learnの記事も参考にしてください。

文字コード(例:UTF8)、改行コード(例:LF)の指定、ルールを特定のファイル(例:*.cs)だけに適用するといったことも可能です。

dotnet format(コマンドラインでの一括整形)

ターミナル(コマンドプロンプト、PowerShell、またはVisual Studioのターミナル)で実行します。

# 【1】整形が必要な箇所があるかチェックだけ(実際には変更しない)
#  (CI/CDでのチェック用)
dotnet format --verify-no-changes

# 【2】 ソリューション全体を整形
dotnet format

さきほどのコード例を対象として【1】を実行すると以下のように違反があることがわかります。

❯ dotnet format --verify-no-changes
D:\data\projects\00apps\ConsoleApp1\ConsoleApp1\Program.cs(1,11): warning IDE0161: 範囲指定されたファイルが設定された namespace に変換 [D:\data\projects\00apps\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj]
D:\data\projects\00apps\ConsoleApp1\ConsoleApp1\Program.cs(7,13): warning IDE0007: 明示的な型ではなく 'var' を使用します [D:\data\projects\00apps\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj]

【2】を実行すると、以下が適用されて自動整形され、警告が解消されます。

  • (2): 型が明らかな場合は var を使う
  • (3): file-scoped namespace
namespace ConsoleApp1;

class Program
{
    static void Main()
    {
        var names = new List<string> { "みかん", "りんご" };
    }
}
プロ美

【2】はソリューション全体に一括適用できて便利だね!
(でも、【1】は何に使うんだろう?)

プロ太

【1】のチェックは、CI/CD(継続的インテグレーション/デリバリー)において使うと便利です。

チームメンバがコミットしたコードで、ルール違反があるものをリジェクトするといった使い方が可能です。

EditorConfigファイルのルールを保存時に自動適用

EditorConfigファイルのルールを、ファイル保存時に自動適用したいという場合もありますね。

コードクリーンアップの構成において、「使用可能な修正ツール」で「EditorConfigで設定されたすべての警告とエラーを修正」を追加しましょう。

これで、コード保存時にルール違反部分が自動で修正されるようになります。

プロ美

これでルールをチームに共有しつつ、自分のコードへも常に正しいルールを自動適用できるね!

まとめ

本記事では、Visual Studioのコード整形機能について解説しました。

機能の使い分けは以下のようになります。

やりたいこと使う機能
今開いているファイルを整形したいCtrl+K, D(ドキュメントのフォーマット)
using整理等も含めて整形したいCtrl+K, E(コードクリーンアップ)
保存するたびに自動整形したい保存時クリーンアップ(オプションで設定)
チームでスタイルを統一・強制したいEditorConfig + dotnet format

開発スタイル別のおすすめは以下になります。

個人開発の場合:

  • 保存時自動コードクリーンアップを設定すればOK

チーム開発の場合:

  • EditorConfigをGitで共有してルールを統一
  • dotnet formatで一括修正したり、CI/CDでルール違反を検出
  • クリーンアップ構成にEditorConfigの修正を追加して保存時に自動適用

コード整形は「読みやすさ」だけでなく、「Gitの差分を見やすくする」効果もあります。スタイルが統一されていると、本当に変更された部分だけ差分表示され、わかりやすいです。

まずは「Ctrl+K, E(コードクリーンアップ)から、ぜひ使ってみてください。

プロ太

引き続き、C#、Visual Studioについて一緒に学んでいきましょう!