iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

日本人のための SwiftFormat【概要編】

SwiftFormatとは?

SwiftFormat は MacOS または Linux で Swift コードを再フォーマットするためにコマンドラインツールです。

なぜ使うのか?

プロジェクトをチームで行う際にコーディングスタイルを統一することで、コードの見やすさや・追いやす さが向上しますが、これらを認識のあっていないチームで行うとコードのフォーマットの違いを指摘・修正 を手動でオペレーションすることにコストがかかります。これらの作業を SwiftFormat で自動化するこ とで開発者はコードの動作に集中できるようになります。

どうやって使うのか?

現在は下記の4通りの方法があるみたいです。

  1. コマンドラインツールとして手動で実行するか他のツールチェインの一部として使用する

  2. Source Editor Extension として Xcode の [Editor] > [SwiftFormat] メニューから呼び出す

  3. Xcode プロジェクトのビルドフェーズ(Run Script?)として、Cmd-R or Cmd-Bを押すたびに 実行されるようにする

  4. Git のプリコミットフックとして、チェックインする前に変更したファイルで実行するようにする

【実装編】では 3.の RunScript での実装 + CocoaPods での導入を検討しているのでそれらについて少し触れます。

Xcode ビルドフェーズで導入する

今回はチームで共有する際に最もシンプルで簡単な Xcode ビルドフェーズ で導入したいと思います。もし他の方法で実現したい場合は 公式のレポジトリ を確認してください。

※ このスクリプトを追加すると、作業中のソースファイルが上書きされます。 スクリプトをメインターゲットではなくテストターゲットに追加すると、ユニットテストを実行する時にのみ 呼び出され、アプリをビルドするたびに呼び出されないようにすることができるようになるみたいです。

または、通常のビルドの一部として lintモード で SwiftFormat を実行し、手動でフォーマットパスを実行するか、頻度の低いビルドターゲット(テストなど) の一部として実行することを検討した方がいいみたいです。

  • SwiftFormat Lint モード
    • SwiftFormat はリンターではなくフォーマッターとして設計されているため、どこが問題なのかを伝えるのではなくて、コードを実際に修正するように設計されている。実際にコードを変更することが望ましくない状況でコードがフォーマットされていることを確認したい時の場合に lintモードが役立つ
    • SiwftFormat をリンターとして実行する時に、--lint コマンドラインオプションを使用できる

CocoaPods での導入

  1. SwiftFormat CLI を Podfile に追加する

次の行を Podfile に追加して pod install で SwiftFormat のバイナリをプロジェクトディレク トリに追加する。下記の実行によってビルド済みのコマンドラインアプリのみがインストールされて、SwiftFormat の Framework のソースコードはインストールされなくなります。

  pod 'SwiftFormat/CLI'
  1. アプリのターゲットにビルドフェーズを追加する

  2. ファイルリストでプロジェクトをクリックし、TARGETSを選択して、Build Phasesタプをクリック する。

  3. 新しい 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 を参照してください。次回はこの一覧に関する記事を書きたいと思います。

参照

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com