【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

この記事からわかること

  • Swiftで使える静的解析ツールとは?
  • SwiftLint使い方
  • アプリ中身自動チェックする方法
  • .swiftlint.yml書き方
  • Command PhaseScriptExecution failed with a nonzero exit codeの解決法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

静的解析ツールとは?

静的解析ツールとはプログラムが記法や規約に対して則っているかを自動で解析するためのツールです。

これを使用することで準じていない部分が分かりやすく表示されるようになるので、普段の開発業務やレビュー業務を効率化することができます。

SwiftLintとは?

公式リファレンス:SwiftLint

SwiftLintはSwiftで使用できる静的解析ツールです。チェックできる項目は多く、インデントやスペース、変数の命名などなかなか人では気づきにくい部分もツールを使用することで簡単に識別することが可能です。

またSwiftLintではチェックするファイル自体や細かいルールもカスタマイズすることができるようになっています。

導入方法

SwiftLintHomebrewCocoa Podsを使用して導入することが可能です。

Homebrewでインストール

おすすめ記事:【Mac】Homebrewインストール方法!

HomebrewはMacOS(及びLinux)のパッケージ管理システムです。ターミナルからSwiftLintを使用するためにコマンドラインでXcodeが使用できるかを確認しておきます。以下コマンドでバージョンが返ってくるか試しておきます。

$ xcode-select --version
xcode-select version 2396.

問題なければSwiftLintをインストールします。

$ brew install swiftlint

Cocoa Podsでインストール

おすすめ記事:【Swift UI】CocoaPodsのインストール方法と使い方

Cocoa PodsはObjective-CまたはSwiftのライブラリ管理ツールです。インストール方法は他のライブラリと変わらず以下の文を「PodFile」に書き込んでpod installを実行するだけです。

pod 'SwiftLint'
$ pod install

静的解析の使い方と実行方法

SwiftLintを実行する方法はいくつかありますが、今回はXcode内からRun Scriptに組み込む形で実行させるようにしていきます。これでアプリをビルドした際に自動で実行されます。

おすすめ記事:【Swift/Xcode】Run Scriptの設定方法!ビルド時に処理を実行する

まずはXcodeから「TARGET」>「Build Phases」>「Run Script」をクリックします。もしなければ上部の「+」をクリックし「New Run Script Phase」で追加してください。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

追加できたらコードブロックの中に以下を書き込みます。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

Homebrew

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

Cocoa Pods

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

Based on dependency analysis」のチェックは外しておいてください。

あとはプロジェクトをビルド(Cmd + B)すれば自動でSwiftLintが働きコードをチェックしてくれます。すると以下のようにエラーや警告がたくさん表示されます。デフォルトのルールは結構厳しめなので良きルールに改変して使用してください。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

エラーや警告を一発で解決しよう

SwiftLintを使用して出たエラーや警告はSwiftFormatを使用することでほぼ解消することができる場合があります。導入は簡単なのでぜひ使用してみてください。

おすすめ記事:【Swift】SwiftFormatの導入と使い方!コードを自動で修正する

.swiftlint.yml:規約を変更する

SwiftLintのルールを変更するにはプロジェクトの直下に.swiftlint.ymlを作成し中に適切なルールを記述します。細かいルールの構築方法は以下の公式サイトを確認してください。

公式リファレンス:SwiftLintCore Reference Rule Directory Reference

以下は公式に記載されていたサンプルをそのまま組み込んだところCommand PhaseScriptExecution failed with a nonzero exit codeというエラーが出たので少し修正したものです。


# By default, SwiftLint uses a set of sensible default rules you can adjust:
disabled_rules: # rule identifiers turned on by default to exclude from running
  - colon
  - comma
  - control_statement
opt_in_rules: # some rules are turned off by default, so you need to opt-in
  - empty_count # find all the available rules by running: `swiftlint rules`

# Alternatively, specify all rules explicitly by uncommenting this option:
# only_rules: # delete `disabled_rules` & `opt_in_rules` if using this
#   - empty_parameters
#   - vertical_whitespace

analyzer_rules: # rules run by `swiftlint analyze`
  - explicit_self

## 以下をコメントアウトしています。
#included: # case-sensitive paths to include during linting. `--path` is ignored if present
#  - Source
excluded: # case-sensitive paths to ignore during linting. Takes precedence over `included`
  - Carthage
  - Pods
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift
  - Source/*/ExcludedFile.swift # exclude files with a wildcard

# If true, SwiftLint will not fail if no lintable files are found.
allow_zero_lintable_files: false

# configurable rules can be customized from this configuration file
# binary rules can set their severity level
force_cast: warning # implicitly
force_try:
  severity: warning # explicitly
# rules that have both warning and error levels, can set just the warning level
# implicitly
line_length: 110
# they can set both implicitly with an array
type_body_length:
  - 300 # warning
  - 400 # error
# or they can set both explicitly
file_length:
  warning: 500
  error: 1200
# naming rules can set warnings/errors for min_length and max_length
# additionally they can set excluded names
type_name:
  min_length: 4 # only warning
  max_length: # warning and error
    warning: 40
    error: 50
  excluded: iPhone # excluded via string
  allowed_symbols: ["_"] # these are allowed in type names
identifier_name:
  min_length: # only min_length
    error: 4 # only error
  excluded: # excluded via string array
    - id
    - URL
    - GlobalAPIKey
reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging, summary)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index