かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

C# の複数ファイルの一括フォーマットツール

今日、Visual Studio 2019 Preview 3 のリリースノートを読んでたら dotnet-format ツールが紛れてました。

github.com

一括で .editorconfig の適用してくれるとか。ありがたい。

試してみよう

ということでインストールしてみます。.NET Core の最新版が入ってれば以下のコマンドで OK

dotnet tool install -g dotnet-format --version 3.0.0-beta4-19105-10

2019/02/15 現在のプレビュー版のバージョンなので、実際に試すときは GitHub のページ見てバージョン等確認してください。

こんなメッセージが出れば成功です

You can invoke the tool using the following command: dotnet-format
Tool 'dotnet-format' (version '3.0.0-beta4-19105-10') was successfully installed.

ということで適当に dotnet new console とかしてぐちゃぐちゃなフォーマットのファイルを用意します。

f:id:okazuki:20190215092450p:plain

f:id:okazuki:20190215092530p:plain

.editorconfig は roslyn のリポジトリーからとってきました。

roslyn/.editorconfig at master · dotnet/roslyn · GitHub

準備ができたのでコマンドをたたきます。

dotnet-format -v diag

オプションは無くていいのですが詳細メッセージ出してもらうためにつけてます。

$ dotnet-format -v diag
  ワークスペース 'D:\Repos\DotnetFormatTest\DotnetFormatTest.csproj' でコード ファイルを書式設定します。
  ワークスペースを読み込んでいます。
  ワークスペース 2343 ミリ秒で読み込まれます。
  プロジェクト 'DotnetFormatTest' でコード ファイルを書式設
定しています。
  コード ファイル 'Person.cs' をフォーマットしています。
  コード ファイル 'Program.cs' をフォーマットしています。
  Formatted 0 of 2 files in 1752ms.
  フォーマットが完了しました。

てっきり英語のメッセージが出るかと思ってたら日本語が出てびっくり。

ファイルもこんな感じになってました。

f:id:okazuki:20190215093144p:plain

f:id:okazuki:20190215093222p:plain

Person クラスのほうが .editorconfig とかで指定できてないようなところどうなるかな?って思ったのですが、そこについては普通にノータッチっぽいですね。いいと思う。

余談ですが .editorconfig にエンコーディング指定もあったので EUC-JP で保存したのちに dotnet-format してみましたが、そこはまだっぽいですね。EUC-JP のままでした。(予定があるのかとかはチェックしてない)

まとめ

プロジェクト単位やソリューション単位で .editorconfig でフォーマットしてくれるの欲しかったのでちょうどよかったです。 先日、そこまで膨大な数じゃないけど 1 ソリューションのコードフォーマットする機会があったのですが調べる時間もめんどうで手動で 1 ファイルずつ心を込めてやったのですが、その時に欲しかった。