SwiftLintでカスタムルールを追加してみた

iOS

はじめに

こんにちは。iOSアプリ開発Gの深山です。

私が所属するチームでは、SwiftLintを使用して、開発チーム内で取り決めたコーディング規約のチェックを自動化しています。

SwiftLintのデフォルトルールによるチェックで、コーディング規約のうち、大半の項目のチェックを自動化できていましたが、中にはデフォルトルールだけでは違反が検出できない規約もあり、この規約に関しては手作業でのチェックを行うような運用が続いていました。

そこで、今回はSwiftLintのカスタムルールの仕組みを利用することで、デフォルトルールだけではチェックできない規約項目を自動でチェックできるようにしました。

この記事では、SwiftLintのカスタムルールの作成方法とその実例の一部を紹介します。

SwiftLintとは

SwiftLintは、Swiftの静的解析ツールの一つです。ソースコードを解析して、特定のルールに違反していないかチェックしてくれます。

SwiftLintはHomebrewやCocoaPodsで導入できます。また、Xcodeで Run Scriptの項目を追加し、必要なスクリプトを記述することで、チェック自体を自動化することもできます。

検査対象のルールはデフォルトで数多く用意されています。.swiftLint.yml内の設定でそれらのルールの有効・無効を切り替えることができます。
デフォルトのルールについては、こちらを御覧ください。

詳細な導入方法は、この記事では割愛します。

カスタムルールの作成方法

例として、コーディング規約として定めている「 extensionでコードブロックを区切る際は、MARKコメントをつける。」という項目をチェックするカスタムルールを作成します。

カスタムルールを追加するには、 .swiftlint.ymlcustom_rulesセクション配下に以下のように追記します。

こちらが完成版です。

各行の説明をしていきます。

ルールの識別子です。
何についてのルールであるのかが分かるような命名にしました。

ルールの適用範囲を指定できます。適用するファイルは正規表現で表します。今回は全.swiftファイルに適用するための表記としました。
他にも、例えば、 included: '\w*ViewController\.swift'とすれば、ViewControllerが記述してあるファイルのみにルールを適用することができます。

ルール違反時に表示されるメッセージのタイトルです。Xcodeでは、 MARK Comment Violationと表示されます。

ルールに違反する箇所を表した正規表現です。この正規表現にマッチする箇所がルール違反とされます。

ルール違反時に表示されるメッセージの詳細です。開発者がこのメッセージを見て、修正方法がわかるような内容にしました。

このルールの重大度です。以下2つのいずれかを指定します。

  • error

    このルール違反箇所をエラーとして扱います。このルールに違反した箇所がある場合、ビルドエラーによりビルドできません。 image-20221004013756864.png)

  • warning

    このルールの違反箇所をwarning(警告)として扱います。そのため。このルールに違反した箇所がある場合でもビルド自体は可能です。 image-20221004013824638.png

カスタムルール紹介

今回私が追加したカスタムルールを一つ紹介します。

ルール: guardの条件を複数列挙する際は、全て改行する。

これは、ブレイクポイントを貼ることでのデバッグしやすさを優先するためのルールです。

ルールは次のように設定しました。

まとめ

このように、SwiftLintのカスタムルールは、正規表現を用いることで作成することができます。
これを活用することで、SwiftLintのデフォルトルールだけではカバーできないようなコーディング規約も自動でチェックすることが可能になります。

参考文献

iOS