今年度の 6 月頃から iOS アプリの開発をしております @hofzzy と申します。
業務で SwiftLint を導入したのでその知見を共有します。
Installation
複数人開発において SwiftLint のバージョンを揃えたかったので、CocoaPods を使用してインストールしました。
Homebrew でインストールすることも可能ですが、筆者はその方法を試していないので、今回その説明は割愛させていただきます。
Podfile に SwiftLint を追加する
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 を作成します。筆者は以下のような内容で作成しました。
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 autocorrect と swiftlint の両方を実行する必要があります。