16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftLint の導入

Posted at

今年度の 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
rub_script.png

これでビルド時に 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 の両方を実行する必要があります。

16
14
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
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?