🟤

Flutter コードを綺麗に整形する

2024/04/27に公開

Flutterを使った開発ではDartがメインで使用される。
このDartで書かれたソースコードを綺麗に整形する話。

dart format コマンドを使う

dart format コマンドは、Dart プログラミング言語で書かれたコードを整形するためのツール。
このコマンドを使用すると、コードのインデントやスペーシングを整えることができ、統一感のある読みやすいコードスタイルを維持することが可能。

具体的には、以下のようにコマンドラインから dart format コマンドを実行することで、指定したディレクトリやファイル内のDartコードを自動的に整形する。

$ dart format [options] <files or directories>

options には様々なオプションを指定できる(例: 出力形式の選択、特定のファイルを除外するなど)。
特に options の指定がない場合はデフォルトとして writeオプションが適用される。

<files or directories> の部分には、整形したいファイルやディレクトリのパスを指定する。

サンプル

すべてのファイルを整形するとき

$ dart format .

実行すると、すべてのファイルが整形される。


整形の余地のあるファイルを知りたいだけのとき(整形は実行しない)

$ dart format -o none .

結果は以下のように出力され、この場合はlib/main.dartに整形の余地がある状態。

Changed lib/main.dart
Formatted 100 files (1 changed) in 0.37 seconds.

特定のファイルやディレクトリを対象外にしたいとき

$ dart format $(find . -name "*.dart" -not -path "./generated/*")

dart formatコマンドで特定のファイルやディレクトリを除外する直接的な方法はないが、シェルコマンドを使用して対象外のファイルを動的に選択($(...)の部分)することで実現可能。

上記サンプルでは、プロジェクト内のすべてのdartファイルを対象とする一方で、generatedディレクトリ配下のファイルは対象外としている。

自動生成されたファイルに整形が当たってほしくないケースは珍しくない(自動生成コードは編集したくない)ため、上記サンプルのような指定はよくあるパターン。


--set-exit-if-changed フラグ

$ dart format --set-exit-if-changed ./lib

--set-exit-if-changedフラグを使用すると、フォーマット後のコードが元のコードと異なる場合(整形があった場合)にexit code 1を返す。
これは、CI/CDパイプラインや自動化されたスクリプトでエラー判定とするために役立つ。


参考

https://dart.dev/tools/dart-format
https://dart.dev/effective-dart/style#formatting

Discussion