iOS開発初心者、SwiftLintとSwiftFormatを導入する
概要
初めまして。Web Developer1年目ですが現在業務でSwift UI
を使った小規模iOSアプリを1人で新規開発しています。これが初めてのiOS開発です。
ある程度アプリが仕様通りに動く様になってきて余裕が出てきたので、少しずつ環境やソースコードを整えるべく、まずは第一弾としてSwiftLint
やSwiftFormat
を導入しました。
SwiftLintの導入
今回はHomebrewでインストールします。
本来であればMintやSwiftPMを使ってプロジェクト毎に依存関係として明示して管理すべきですが...
brew install swiftlint
GitHub: realm/SwiftLint: A tool to enforce Swift style and conventions.
SwiftFormatの導入
SwiftLintと同様に、Homebrewでインストールします。
brew install swiftformat
GitHub: nicklockwood/SwiftFormat: A command-line tool and Xcode Extension for formatting Swift code
gitのpre-commitに設定する
Gitのローカルリポジトリ直下に.git/hooks/pre-commit
と言うファイルを作成します。
.git/hooks/pre-commit
の内容はこちらを参考にしました。
私はzsh
ユーザーなので1行目のシェバンは#!/bin/bash
ではなく#!/bin/zsh
になっています。
#!/bin/zsh
if which swiftlint >/dev/null; then
swiftlint autocorrect --format
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
git diff --diff-filter=d --staged --name-only | grep -e '\(.*\).swift$' | while read line; do
swiftformat "${line}";
git add "$line";
done
XcodeのBuild Phasesに設定する
Build PhasesにはSwiftLint
だけ走らせる様にスクリプトを書きます。
SwiftFormatのREADME.mdにはこの様な記述がありました。
このスクリプトを追加すると、作業中にソースファイルが上書きされ、元に戻す履歴がクリアされるという厄介な副作用が発生します。スクリプトをメインターゲットではなくテストターゲットに追加して、アプリをビルドするたびではなく、単体テストを実行するときにのみスクリプトが呼び出されるようにすることをお勧めします。
またこの様なIssueも立っており、一度SwiftFormat
を走らせると、ソースファイルに対してUndo操作ができなくなる様です。
Losing file history and can't "undo" and changes · Issue #264 · nicklockwood/SwiftFormat
if which swiftlint >/dev/null; then
swiftlint autocorrect --format
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
Discussion