SwiftLintを導入する
環境構築SwiftLint
を導入して、プロジェクトのコードを綺麗に統一されたものにしましょう。コードの品質を保つためには必須になります。
SwiftLint とは
SwiftLint
は Swift のスタイルと規則をつけるための静的解析ツールです。規約はGitHub Swift Style Guideをベースとしています。
realm/SwiftLint: A tool to enforce Swift style and conventions.
Mint での導入
今回は Mint
を使った SwiftLint
の導入方法を紹介します。その他の方法についてはREADME.mdをご確認ください。
Mintは Swift製のコマンドラインツールのインストールや実行を管理するツールです。
Mint の導入
Mint の導入は
// Mint のインストール
$ brew install mint
// バージョン確認
$ mint version
で行うことができます。
プロジェクトのルートに Mintfile
を作成します。
cd プロジェクト名
touch Mintfile
.
├─ プロジェクト名.xcodeproj
├─ プロジェクト名
└─ Mintfile
-
インストール
Mintfile
に以下を追記します。realm/SwiftLint@0.44.0
Mintfile
のある場所でmint bootstrap
を行います。mint bootstrap
mint list
でインストールされたことを確認します。mint list
-
Run Script を追加する
Xcode でプロジェクトを開き、
TARGETS
>BuildPhases
を開き、+ボタンよりNew Run Script Phase
を選択します。(図1)
図1以下の Script を追加します。(図2)
if which mint >/dev/null; then mint run swiftlint swiftlint autocorrect --format mint run swiftlint swiftlint else echo "warning: Mint not installed, download from https://github.com/yonaskolb/Mint" fi
図2 -
.swiftlint.yml を追加する
プロジェクトのルートに
.swiftlint.yml
を追加します。. ├─ プロジェクト名.xcodeproj ├─ プロジェクト名 ├─ Mintfile └─ .swiftlint.yml
このファイルでは、詳細なルールを変更したり無効化したりすることができます。
included: - SwiftRecipesSample excluded: - SwiftRecipesSample/Scripts/R.generated.swift - Carthage line_length: 200 large_tuple: 5 file_length: warning: 500 error: 1200 nesting: type_level: warning: 2 identifier_name: excluded: - id - URL - en - ja cyclomatic_complexity: 20
included
では ターゲットを記述してください。
excluded
では除外するファイルを記述します。R.swift
と併用する場合には、ここにR.generated.swift
を追加してください。その他のルールについては、SwiftLint のREADMEをご覧ください。
-
ビルドをしましょう
.swiftlint.yml
が反映されてない場合には一度クリーンビルド(⌘+Shift+K)をして、ビルドをしましょう。それでも反映されない場合には yaml の記述が正しいかの確認をしましょう。(余分なスペースなどに注意しましょう)SwiftLintが正しく動作しているかを確認する際には、以下のようにルールに反する文を書いてビルドをして確認しましょう。(図3)
let i = 1
図3
部分的にルールを無効化する
SwiftLintではコード上で明示的にルールを無効化するコメントを追加することで、エラーを回避することができます。
例えば図3のエラーは以下のように回避することができます。
let i = 1 // swiftlint:disable:this identifier_name
図4
これらの無効化の方法の詳細は READMEをご覧ください。
おわりに
SwiftLint 単体でも勿論利用可能ですが、以下のレシピと合わせて、是非環境構築をしてみてください。
SwiftLint ではそのほかにも様々な機能があります。GitHubにてご確認ください。