0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

コマンドラインだけでswiftlintする

タイトルの通り、コマンドラインだけでswiftlintの静的コード解析する方法です。
Xcodeに組み込む方法は色々と見つかったのですが、
Xcodeに組み込むにはビルドのシェルを変えたりとなんやかんやする必要があり...。
仕事の現場によってはgitで管理するファイルを増やしたくないので、
あくまでも静的コード解析だけができる方法として
コマンドラインだけのSwiftlint実行をまとめました。

インストール

まずは、公式サイトを確認ですね。

インストールだけなら、コマンドラインにて、以下コマンドを実行するだけでインストールできます。簡単ですね。

brew install swiftlint

※上記方法でインストールしても、端末によってはswiftlint実行時にエラーになります。
エラーの原因にもよりますが、私の環境では
macOS CatalinaでSwiftLintが"zsh: illegal hardware instruction"というエラーで利用できない場合の対処法
を参考にしたら正常に動作しました。

コード解析ルール

コード解析ルール(方法・法則)ですが、たくさんあります。
コマンドラインにて、以下コマンドを実行すると解析のルール一覧がみれます。

swiftlint rules

スクリーンショット 2020-02-14 11.24.53.png

わー多い…

一応、以下コマンドでそれぞれのルールが何をチェックするのかわかります。

swiftlint rules <確認したいidentifie>

スクリーンショット 2020-02-14 11.35.45.png
※上記は、nestingの場合。

以下、公式サイトにどのようなルールがあるのか一覧があります。
https://realm.github.io/SwiftLint/rule-directory.html

Qiitaにも内容をまとめてくださった方がいらっしゃいますね。
SwiftLintの全ルール一覧(Swift 4.2版)

cyclomatic_complexity(循環的複雑度)を確認したかったんですけど、
デフォルトではオフ(opt-inがno)なので、こちらをオンにしたいです。

コード解析ルールの定義

コード解析ルールは、オリジナルの定義を別ファイルで持つことができます。
XcodeにSwiftlintを組み込む場合は、「.swiftlint.yml」って名称にするらしいですが、
コマンドラインから実行するときは定義ファイルパスを指定できるのでなんでもいいです。

「.」から始まると隠しファイルになってしまうので、自分は「swiftlint.yml」て名称で
swiftlintのインストールディスクに配置しました。

スクリーンショット 2020-02-14 11.52.01.png

ファイルの中身は以下の通りです。

# document: https://github.com/realm/SwiftLint

# 無効にするルール
disabled_rules:
- anyobject_protocol
- array_init
・
・
・


# 有効にするルール
opt_in_rules:
- cyclomatic_complexity
- nesting
- function_body_length
・
・
・

# 循環的複雑度
cyclomatic_complexity:
  warning: 10
  error: 20
・
・
・

disabled_rules:の次の行から、
無効にしたいルールを記載していきます。
「- 」(スペースも必要)の後ろに無効にするルール(identifier)を記載します。

opt_in_rules:の次の行から、
有効にしたいルールを記載していきます。

そして、有効にしたいルール(identifier)を「:」つきで記載し、
次の行からそのルールのオプションを記載します。
公式サイトを見れば、
どんなオプションがあるかわかります。

解析実行

あとは以下コマンドを実行すれば解析できます。

swiftlint --config <ルールを記載したファイルのパス> --quiet --path <解析したいファイルのパス>

※--quietは、実行ログを出力させないオプションです。
スクリーンショット 2020-02-20 12.37.46.png
解析できた!

swiftlint --config <ルールを記載したファイルのパス> --quietをエイリアスに設定しておくと、実行するコマンドが少なくなって便利かもしれないです。
【Mac】エイリアス(ターミナルコマンドのショートカット)の設定

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?