日本人のための SwiftFormat【概要編】
SwiftFormatとは?
SwiftFormat は MacOS または Linux で Swift コードを再フォーマットするためにコマンドラインツールです。
なぜ使うのか?
プロジェクトをチームで行う際にコーディングスタイルを統一することで、コードの見やすさや・追いやす さが向上しますが、これらを認識のあっていないチームで行うとコードのフォーマットの違いを指摘・修正 を手動でオペレーションすることにコストがかかります。これらの作業を SwiftFormat で自動化するこ とで開発者はコードの動作に集中できるようになります。
どうやって使うのか?
現在は下記の4通りの方法があるみたいです。
コマンドラインツールとして手動で実行するか他のツールチェインの一部として使用する
Source Editor Extension として Xcode の [Editor] > [SwiftFormat] メニューから呼び出す
Xcode プロジェクトのビルドフェーズ(Run Script?)として、
Cmd-R
orCmd-B
を押すたびに 実行されるようにするGit のプリコミットフックとして、チェックインする前に変更したファイルで実行するようにする
【実装編】では 3.
の RunScript での実装 + CocoaPods での導入を検討しているのでそれらについて少し触れます。
Xcode ビルドフェーズで導入する
今回はチームで共有する際に最もシンプルで簡単な Xcode ビルドフェーズ
で導入したいと思います。もし他の方法で実現したい場合は 公式のレポジトリ を確認してください。
※ このスクリプトを追加すると、作業中のソースファイルが上書きされます。 スクリプトをメインターゲットではなくテストターゲットに追加すると、ユニットテストを実行する時にのみ 呼び出され、アプリをビルドするたびに呼び出されないようにすることができるようになるみたいです。
または、通常のビルドの一部として lintモード で SwiftFormat を実行し、手動でフォーマットパスを実行するか、頻度の低いビルドターゲット(テストなど) の一部として実行することを検討した方がいいみたいです。
- SwiftFormat Lint モード
- SwiftFormat はリンターではなくフォーマッターとして設計されているため、どこが問題なのかを伝えるのではなくて、コードを実際に修正するように設計されている。実際にコードを変更することが望ましくない状況でコードがフォーマットされていることを確認したい時の場合に
lint
モードが役立つ - SiwftFormat をリンターとして実行する時に、
--lint
コマンドラインオプションを使用できる
- SwiftFormat はリンターではなくフォーマッターとして設計されているため、どこが問題なのかを伝えるのではなくて、コードを実際に修正するように設計されている。実際にコードを変更することが望ましくない状況でコードがフォーマットされていることを確認したい時の場合に
CocoaPods での導入
- SwiftFormat CLI を Podfile に追加する
次の行を Podfile に追加して pod install
で SwiftFormat のバイナリをプロジェクトディレク
トリに追加する。下記の実行によってビルド済みのコマンドラインアプリのみがインストールされて、SwiftFormat
の Framework のソースコードはインストールされなくなります。
pod 'SwiftFormat/CLI'
アプリのターゲットにビルドフェーズを追加する
ファイルリストでプロジェクトをクリックし、
TARGETS
を選択して、Build Phases
タプをクリック する。- 新しい
Run Script
を作り下記のコードをペーストする。
"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat" "$SRCROOT"
SwiftFormat の設定
SwiftFormat の設定は下記の2つに分かれています。
- Options
- オプションはルールの動作を制御する設定
- Rules
- ルールはコードに変更を適用する SwiftFormat ライブラリの関数
Options
SwiftFormat で使用可能なオプションは、--options
コマンドライン引数を設定して実行すると確認
することができます。(各オプションのデフォルト値は、ここに表示される)
オプションを追加する方法は下記の2つ。
特定のオプションが複数のルールに影響を与える場合がある。--ruleinfo [rule_name]
のようにコマンド
を使用して影響するオプションの詳細を確認するか、Rules.mdを参照して確認する必要もありそうです。
Rules
SwiftFormat には50を超えるルールが含まれていて、新しいルールが随時追加されています。それらの 使用方法については Rules.md を参照してください。次回はこの一覧に関する記事を書きたいと思います。
参照