SwiftLint を導入する
このページは
SwiftLint について、導入する方法と使い方を簡単に記す。
もっと詳しく知りたい場合は SwiftLint のプロジェクトを見るべき。 👇
また SwiftLint を試したサンプルプロジェクトは GitHub にある。👇
SwiftLint とは?
Swift コードのスタイルをチェックするリントツール。
Lint(リント)?
- コーディングルール違反や、冗長な記述など、を検査する
ルール違反の項目がある場合
- ビルド時に警告・エラーなどを発生させることができる。
- または、リントツールに自動でスタイル修正(コード修正)をさせることも可能。
リントツール導入のメリット
- コードのスタイルを機械的に一定に保てる
- コードレビューの質向上を計れる(スタイルに関する指摘は有人でする必要がなくなる)
インストール
Homebrew が入っている環境ならば
brew コマンドで install 可能。
$ brew install swiftlint
ルールファイルを作成する
.swiftlint.yml
ファイルにルールを記述する。
記述の仕方とルールは以下を参照する。
- SwiftLint/README.md at master · realm/SwiftLint · GitHub
- SwiftLint/Rules.md at master · realm/SwiftLint · GitHub
以下、.swiftlint.yml
の例。
# Lint 対象を指定 included: - SwiftLintSample/ # Lint 対象から除外する excluded: - SwiftLintSample/T.swift # 無効にするルール disabled_rules: - file_length - trailing_comma - trailing_whitespace - trailing_newline - vertical_whitespace - function_body_length - type_body_length - line_length - vertical_parameter_alignment # 変数などの名前の最低の長さを指定。これより短いと違反となる # 1 にしておくと、このルールが実質無効となる identifier_name: min_length: 1 # 型名のルールに対しての excluded(除外) # ここでは lowerCamelClass という型名はルールの検査から除外される type_name: excluded: - lowerCamelClass
Xcode プロジェクトへの導入方法
Xcode の Build Phases に新たな Run Script を追加する。
そして以下のスクリプトを埋め込む。
if which swiftlint >/dev/null; then swiftlint --config .swiftlint.yml else echo "warning: SwiftLint not installed." fi
上のスクリプトを説明すると・・・
- if which で SwiftLint がインストールされているかをチェックする
- インストールされていない場合、 echo で警告を表示している
swiftlint
コマンドの--config
引数で ルールファイル (.swiftlint.yml
) のパスを指定できる。- 指定しなければ、カレントディレクトリにある
.swiftlint.yml
を参照する
- 指定しなければ、カレントディレクトリにある
これでビルドするたびに、 SwiftLint によるチェックが実行される。
もし SwiftLint に引っかかると、通常の警告・エラーと同じく Xcode 上に結果が表示される。
リントの運用
.swiftlint.yml
で全体のルールを指定できるが、局所的にルールを決めたいときもある。
その場合は、以下の enable/disable で挟むことで、その部分だけルールの無効・有効を切り替えすることができる。
// swiftlint:enable ルール名 // swiftlint:disable ルール名
たとえば、 func
のパラメーター数は SwiftLint ではデフォルトで 5個までとされているが、それを超えたパラメーター数をもつ func
を居所的に許可したい場合は以下になる。
// swiftlint:disable function_parameter_count static private func tooManyParameterFunc(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int) -> Int { return a + b + c + d + e + f + g } // swiftlint:enable function_parameter_count
おわり