Mac
Xcode
iOS
Swift
SwiftLint

Swiftの静的解析ツール「SwiftLint」のセットアップ方法

「SwiftLint」とは?

Swift用の静的解析ツールです。
1行あたりの文字数やコロンの両側のスペースの有無など、非常に細かくチェックしてくれるのが特徴です。

環境

  • OS:macOS High Sierra 10.13.1
  • Xcode:9.1 (9B55)
  • Swift:4.0.2
  • SwiftLint:0.24.0

セットアップ

インストール

Homebrewからインストールするのが最も簡単です。

$ brew install swiftlint

ソースコードをビルドしてインストールすることもできます。
私の環境だとHomebrewからのインストールがうまくいかなかったため、こちらの方法でインストールしました。

$ git clone https://github.com/realm/SwiftLint.git
$ cd SwiftLint/
$ git submodule update --init --recursive; make install

ビルド時に静的解析を行うようにする

Xcodeで対象のプロジェクトファイルを開く>TARGETS
→対象のターゲットを選択>[Build Phases]タブ
→左上にある[+]をクリック>New Run Script Phase
Run Scriptに以下のスクリプトを記述すると、ビルド時にSwiftLintが実行されるようになります。

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

スクリーンショット 2018-12-01 19.08.22.png

ルールの詳細設定

プロジェクトのルートディレクトリに .swiftlint.yml を作成し、その中にルールの詳細を記述します。
設定の書き方は公式ページに詳しく載っています。

参考になるかわかりませんが、私の設定ファイルも公開します。(随時更新)

.swiftlint.yml
# 無効にするルール
disabled_rules:
  - trailing_whitespace

# デフォルト無効で有効にするルール
opt_in_rules:
  - conditional_returns_on_newline
  - force_unwrapping
  - empty_count
#  - missing_docs
  - operator_usage_whitespace

# 対象のファイル・フォルダ
# デフォルトからフォルダ名を変更していない場合、プロジェクト名と同名のフォルダを指定すればいい
included:
  - {プロジェクト名}

# 対象外のファイル・フォルダ
# CocoaPodsでインストールしたライブラリは対象外とする
excluded:
  - Pods
  • trailing_whitespace
    行末に無駄なスペースがあると警告を出すルールです。
    無効にしないと非常に多くの警告が出ます。
    ∵Xcodeで空白行を設ける際にインデントのためのスペースが入り、それも対象となるため
  • force_unwrapping
    強制アンラップ( ! )を禁止するため有効にします。
  • missing_docs
    有効にしたいのですが、Swift 4.1.0未満は適用できないのでコメントアウトしています。
    https://github.com/realm/SwiftLint/blob/master/Rules.md#missing-docs

静的解析

ここまで設定したら、ビルドするたびに静的解析が行われます。
めちゃくちゃたくさんの警告とエラーが出ると思うので、コードを修正するか、ルールを緩和するかしましょう!

注意

included: で指定したフォルダが存在しない場合、以下のビルドエラーが発生します。

Command /bin/sh failed with exit code 1

参考リンク