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

この記事からわかること
- Swiftで使える静的解析ツールとは?
- SwiftLintの使い方
- アプリの中身を自動でチェックする方法
- .swiftlint.ymlの書き方
- Fastlaneでの実行方法
- Command PhaseScriptExecution failed with a nonzero exit codeの解決法
index
[open]
\ アプリをリリースしました /
環境
- Xcode:16.3
- iOS:18.5
- Swift:5.9
- Mac M1:Sequoia 15.4
静的解析ツールとは?
「静的解析ツール」とはプログラムが記法や規約に則って記述されているかを自動で解析するためのツールです。これを使用することでルールに準じていないコードを特定でき、修正箇所を簡単に識別できるようになります。
プログラムが一定のルールに則って記述されることで冗長なコードのリファクタリングによるコンパイル時間の短縮や可動性向上による複雑性の緩和と保守しやすいコードを保つことができます。
Android
SwiftLintとは?
SwiftLintはSwiftで使用できる静的解析ツールです。チェックできる項目は多く、インデントやスペース、変数の命名などなかなか人では気づきにくい部分もツールを使用することで簡単に識別することが可能です。
またSwiftLintではチェックするファイル自体や細かいルールもカスタマイズすることができるようになっています。
導入方法
SwiftLintはHomebrew
かCocoa Pods
を使用して導入することが可能です。
Homebrewでインストール
おすすめ記事:【Mac】Homebrewインストール方法!
HomebrewはMacOS(及びLinux)のパッケージ管理システムです。ターミナルからSwiftLintを使用するためにコマンドラインでXcodeが使用できるかを確認しておきます。以下コマンドでバージョンが返ってくるか試しておきます。
問題なければSwiftLintをインストールします。
Cocoa Podsでインストール
おすすめ記事:【Swift UI】CocoaPodsのインストール方法と使い方
Cocoa PodsはObjective-CまたはSwiftのライブラリ管理ツールです。インストール方法は他のライブラリと変わらず以下の文を「PodFile」に書き込んでpod install
を実行するだけです。
静的解析の使い方と実行方法
SwiftLintを実行する方法はいくつかありますが、今回はXcode内からRun Scriptに組み込む形で実行させるようにしていきます。これでアプリをビルドした際に自動で実行されます。
おすすめ記事:【Swift/Xcode】Run Scriptの設定方法!ビルド時に処理を実行する
まずはXcodeから「TARGET」>「Build Phases」>「Run Script」をクリックします。もしなければ上部の「+」をクリックし「New Run Script Phase」で追加してください。

追加できたらコードブロックの中に以下を書き込みます。swiftlint
コマンドを実行することで静的解析が実行されるようになっています。そのためターミナルなどから実行したい場合はswiftlint
を実行すればOKです。

Homebrew
XcodeのRun Scriptに記述する際は/opt/homebrew/bin/swiftlint
のように記述しないと期待通りに動作しませんでした。
Cocoa Pods
「Based on dependency analysis」のチェックは外しておいてください。
あとはプロジェクトをビルド(Cmd + B
)すれば自動でSwiftLintが働きコードをチェックしてくれます。すると以下のようにエラーや警告がたくさん表示されます。デフォルトのルールは結構厳しめなので良きルールに改変して使用してください。

エラーや警告を自動修正する
SwiftLintを使用して出たエラーや警告の一部はSwiftLintの自動修正機能を使用することで解消することができる場合があります。コマンドで--fix --format
を実行すればインテントや冗長な初期値、isEmptyの使用などを自動でプロジェクト全体(※)を修正してくれます。
※ 全体と記述しましたが後述している「.swiftlint.yml」でexcluded
しているファイルは除外されます。
特定のファイルにのみ自動整形を実行したい場合はファイルパスを指定すればOKです。
またフォーマッターとしてSwiftFormat
というツールもあるので気になる方は以下を参考にしてください。
おすすめ記事:【Swift】SwiftFormatの導入と使い方!コードを自動で修正する
.swiftlint.yml:規約を設定する
SwiftLintのルールを設定するにはプロジェクトの直下に.swiftlint.yml
を作成し、適切なルールを記述しておく必要があります。細かいルールの構築方法は以下の公式サイトを確認してください。
公式リファレンス:SwiftLintCore Reference Rule Directory Reference
以下は公式に記載されていたサンプルをそのまま組み込んだところCommand PhaseScriptExecution failed with a nonzero exit code
というエラーが出たので少し修正し、コメント日本語にしたものです。
コード内の一部でルールを無効化する
全体には適用しているルールを特定のファイルやコードでのみ許容させたい場合に,ファイルやコード単位でルールを無効化することが可能です。無効化するためにはコードのファイル内にコメントする形で記述します。disable
で無効化を始め、指定したルールのenable
がある箇所まで無効化します。enable
の記載がない場合はファイルの終わりまで適応されます。
例えばline_length
とidentifier_name
を無視させる場合は以下のようになります。
1行だけ無効したい場合はswiftlint:disable:this
かswiftlint:disable:next
を使用します。this
ならコードの行に、next
ならコメントを記載した次のコードが無効化されます。
Fastlaneを使用して実行する
Fastlane経由でSwiftLintを使用できるようになっています。使い方は簡単でswiftlint
アクションに適切な引数を渡すだけです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。