投稿の経緯
機械的にコードチェックをおこない、コードの統一化、可読性の向上、、開発効率の向上を期待してSwiftUIで開発中の個人アプリにはじめてSwiftLint
を導入したので記事にしました。
SwiftFormatを導入した記事はこちら👇
[2021/07/30更新]個人開発アプリにSwiftFormatを導入する
環境
Swift version 5.4.2
Xcode version 12.5.1
SwiftLintとは
SwiftLintとはSwiftの静的解析ツールで、コンパイラよりも詳細にソースコードの解析をすることができます。こちらのGitHubのルールに沿ってコードを解析します。
SwiftLintの導入
同一プロジェクトに導入したSwiftFormatをCocoaPodsで導入したので
統一してCocoaPodsで導入します。
PodfileにSwifLintをセットしてpod install
します。
pod 'SwiftLint'
コマンドラインからの使い方
ターミナルを開いて導入したアプリのディレクトリでコマンドを叩くと静的解析の結果が表示されます。
cd プロジェクトのルートディレクトリ
Pods/SwiftLint/swiftlint
ビルド時に解析させるように設定する
コマンドラインで叩いたPods/SwiftLint/swiftlint
をXcodeで実行できるようにしましょう。
プロジェクトのアプリ用ターゲットの左上の + ボタンをタップして、Build PhasesにNew Run Script Phaseを追加し、SwiftLintを実行できるように設定します。
"${PODS_ROOT}/SwiftLint/swiftlint"
このようになればSwiftLintをXcodeで実行できます。
ルールをカスタム
SwiftLintのデフォルトルールで発火する警告を発火させたくない場合などにルールをカスタムします。例えば、変数名の最小文字数や1行あたりの文字数などなど...
チーム開発の場合はルールの設定内容をチーム内で議論した方が良さそうですね。個人開発の場合はお好みで。ちなみに私はあまりカスタムせず、デフォルトに従ってコードを書いています。
それではルールをカスタムします!今回は以下のルールを設定します。
・Podsを対象外にする
・multiple_closures_with_trailing_closureの無効化
・conditional_returns_on_newlineの有効化
・conditional_returns_on_newlineの有効化
・1行あたりの文字数制限を450に変更
・変数名が1文字以上なら許可に変更
・Type名が2文字以上なら許可に変更
SwiftLintではルールの設定に.swiftlint.yml
を作成し、そこに記述します。
touch .swiftlint.yml
でファイルを作成して
open .swiftlint
でファイルを開いて、ルールを設定します。
・SwiftLintの対象外とする場合はexcluded:
を使う
・無効とするルールを設定する場合はdisabled_rules:
を使う
・デフォルトで無効とされているルールを有効とする場合はopt_in_rules:
を使う
・ルールをカスタムする場合はルール名:
を使う
今回カスタムするルールと👆こちらを組み合わせると。以下のようになります。
# SwiftLintの対象外とする
excluded:
- Pods
# 無効とするルール
disabled_rules:
- multiple_closures_with_trailing_closur
# デフォで無効とされたルールを有効とする
opt_in_rules:
- conditional_returns_on_newline
# ルールをカスタム
line_length: 450 # 1行あたりの文字数制限を450に変更
identifier_name: # 変数名が1文字以上なら許可に変更
min_length: 1
各ルールの詳細はこちらに記載されているのでざっと目を通すことをオススメします。
これでSwiftLintを導入できました。参考にしてください!
お知らせ
現在、iOS開発案件を業務委託で募集中です(副業)。TwitterDMでご依頼をお待ちしています。