Posted at

SwiftLint の導入

More than 1 year has passed since last update.

今年度の 6 月頃から iOS アプリの開発をしております @hofzzy と申します。

業務で SwiftLint を導入したのでその知見を共有します。


Installation

複数人開発において SwiftLint のバージョンを揃えたかったので、CocoaPods を使用してインストールしました。

Homebrew でインストールすることも可能ですが、筆者はその方法を試していないので、今回その説明は割愛させていただきます。

Podfile に SwiftLint を追加する


Podfile

platform :ios, '10.0'

target 'sample1' do
use_frameworks!

pod 'SwiftLint', '0.23.0'
end


Podfile に SwiftLint を追加したらターミナルで pod install を実行しましょう。以上でインストールは完了です。


Xcode

Xcode でビルドをした際に自動で Lint が走るようにします。

Xcode でプロジェクトファイルを選択し、Build Phase の Run Script に以下のスクリプトを貼りつけましょう。

if which "${PODS_ROOT}/SwiftLint/swiftlint" >/dev/null; then

${PODS_ROOT}/SwiftLint/swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

これでビルド時に Lint が適用され、警告やエラーがあれば Xcode の Issue Navigator に表示されるようになります。


Configuration

デフォルトのルールのまま運用していくには色々不都合があったため、Lint の設定をカスタマイズしています。

ます SwiftLint を導入したプロジェクトのルート直下に .swiftlint.yml を作成します。筆者は以下のような内容で作成しました。


.swiftlint.yml

included:

- MyApp/
excluded:
- Pods/
opt_in_rules:
- closure_spacing
- conditional_returns_on_newline
- empty_count
- operator_usage_whitespace
disabled_rules:
- force_cast
- force_try
line_length: 300
identifier_name:
min_length:
warning: 1

included

ここには Lint の対象とするディレクトリ (ファイル) のパスを記述します。

excluded

ここには Lint の対象から除外するディレクトリ (ファイル) のパスを記述します。筆者は CocoaPods でインストールしたライブラリを Lint の対象から除外するようにしています。

opt_in_rules

デフォルトでは除外されているルールを追加したい場合はここに記述します。

ルールの一覧は SwiftLint の GitHub に記載されています。(https://github.com/realm/SwiftLint/blob/master/Rules.md)

disabled_rules

デフォルトで適用されているルールで無効にしたいものがある場合はここに記述します。

なるべくここには何も書かない方が望ましいのかもしれませんが、筆者は場合によって force cast や force try は使用するので、この二つを警告するルールは無効化しています。

既存ルールの警告レベルの調整

警告レベルを調整したいルール名の後に数値を指定することで設定できます。


  • line_length

line length による警告レベルを調整します。

筆者は Macbook Pro 13-inch のディスプレイで作業することが多いため、導入当初は 140 くらいで運用していたのですが、UIKit のコンポーネントに実装されている delegate メソッドなどはそれを軽々と越えてくるため、いまは 300 くらいで運用しています。


  • identifier_name

変数の文字数に関する警告レベルを調整します。

デフォルトだと min_length: warning: 2 が設定されているので、文字数が 2 文字の変数には警告が出ます。


Auto correct

SwiftLint は autocorrect オプションをつけて実行することで、軽微なエラーを自動で修正してくれます。

Auto correct を実行したい場合は、Run Script のスクリプトを以下のように書きかえます。

if which "${PODS_ROOT}/SwiftLint/swiftlint" >/dev/null; then

${PODS_ROOT}/SwiftLint/swiftlint autocorrect
${PODS_ROOT}/SwiftLint/swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

autocorrect オプションをつけた場合、標準の Lint は実行してくれないため swiftlint autocorrectswiftlint の両方を実行する必要があります。