1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Xcode16】内蔵されたswift-formatを使ってpre-commit時に自動フォーマットする

Last updated at Posted at 2025-04-25

背景

2024年9月17日にリリースされたXcode16から内蔵ツールチェーンにswift-formatが同梱されるようになりました。これにより、SPMやHomebrewを用いてインストールしなくてもswift-formatが利用できるようになっています。
XcodeのIDE内においては、^+⇧+Iなどのコマンドによってファイル毎にフォーマットすることは可能ですが、コミット時に自動フォーマットでき、かつチームメンバーの初期設定が不要だと便利そうだったので、その手順をメモします。

ビルド時の自動フォーマットはあまり良くなかった

XcodeのBuild Phasesでビルド時にswift-formatを実行することも可能ですが、ビルド時にファイルが書き換えられると、Undo(⌘+Z)で元に戻すことができないという問題がありました。そのため、ビルド時ではなく、Gitコミット時のタイミングで自動フォーマットを行う構成にしました。

1. Scripts/install-git-hooks.sh を作成

#!/bin/bash

HOOKS_DIR=$(git rev-parse --show-toplevel)/.git/hooks
cp Scripts/hooks/pre-commit "$HOOKS_DIR/pre-commit"
chmod +x "$HOOKS_DIR/pre-commit"
echo "✅ Git hooks installed!"

2. Scripts/hooks/pre-commit に swift-format 実行処理を記述

#!/bin/bash

TARGET_DIR=$(git rev-parse --show-toplevel)

if xcrun --find swift-format >/dev/null; then
  xcrun swift-format format --in-place --recursive "$TARGET_DIR"
else
  echo "⚠️ swift-format が見つかりませんでした。"
  exit 0
fi

if ! git diff --quiet; then
  echo ""
  echo "✨ swift-format によりファイルが修正されました。"
  echo "変更を確認し、もう一度コミットしてください。"
  echo ""
  echo "🔍 修正されたファイル:"
  git diff --stat
  exit 1
fi


3. .swift-formatを設定する(任意)

{
  "maximumBlankLines" : 1,
  "indentConditionalCompilationBlocks" : false,
  "lineLength" : 100,
  "lineBreakBeforeEachGenericRequirement" : true,
  "lineBreakBeforeEachArgument" : true,
  "indentation" : {
    "spaces" : 4
  }
}

この時点でプロジェクトのディレクトリ構造が以下のようになっていればOKです。
 2025-04-25 13.11.18.png

4. install-git-hooks.shをBuild Phasesから実行する

bash "${SRCROOT}/Scripts/install-git-hooks.sh"

これにより、Xcodeビルド時に自動で .git/hooks/pre-commit がセットアップされます。

🎉動作確認

初回の動作確認の前に1回以上ビルドしてください。.git/hooks/pre-commit がセットアップされます。
ここまでの手順で Xcode 等で commit する際にフォーマットがかかり、アラートウィンドウとして表示されるようになります。

 2025-04-25 13.13.20.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?