Swift

Swiftの静的解析を行うためにTailorをインストールしてみた

More than 1 year has passed since last update.

Swiftコードの品質向上を目的に静的解析を真面目にやってみようと思って調べてみるとTailorが引っかかったので試してみる。
色々参考にさせていただいたが、自分の作業メモということで参考サイトと丸かぶりのことも沢山あることは気にしない。

まずはインストールから。

Tailorのインストール

java8が必要ということなのでまずはバージョンチェック
スクリーンショット 2017-07-04 17.59.06.png

HomebrewでTailorをインストール

$ brew install tailor

なんかエラーが出る。rubyのバージョン2.2.2以上が必要っぽい
スクリーンショット 2017-07-04 18.08.58.png

rubyのバージョンをチェックしてみると
スクリーンショット 2017-07-04 18.10.57.png

2.0.0と条件を満たしていないようなのでアップデートを実施することに。

ついでにRubyのバージョン管理もおこないたかったのでrbenvをインストールすることにした。

rbenvをインストール

スクリーンショット 2017-07-04 18.10.57.png

$ brew install rbenv ruby-build

インストールできるrubyのバージョンを確認

$ rbenv install -l

たくさんリストに出てくるが・・・とりあえず2.2.2をインストール

$ rbenv install 2.2.2

バージョン確認

$ rbenv version

スクリーンショット 2017-07-04 18.18.49.png

使用するバージョンを指定する

$ rbenv global 2.2.2

確認
スクリーンショット 2017-07-05 11.24.15.png

2.2.2に切り替わっているように見えるが・・・
実はここでruby -vして確認してもうまく切り替わっておらず。
調べたところ切り替わらないケースがあるようなのでチェックする。

$ which ruby
  /usr/bin/ruby

やはりできていない。
このような表示の場合はPATHが正しく設定されていないとのことなので.zshrcにeval "$(rbenv init -)"を追加

$ vi ~/.zshrc
eval "$(rbenv init -)"

その後which rubyで切り替わっていることを確認して再実行。
無事切り替え完了。

Tailorの実行

CLIで実行する場合(単一ファイル)

$ tailor swiftファイル

CLIで実行する場合(フォルダ単位)
対象のフォルダまで移動して

$ tailor .

TailorのチェックをXcodeビルド時に実行できるようにする

CLIの実行でも可能だがXodeでビルドした時にチェックできるようにする。

tailor --xcode <xcodeprojectファイルへのパス>/xxxx.xcodeproj

Xcodeを開いて確認
スクリーンショット 2017-07-05 11.38.59.png
Tailorが追加されているのでビルドしてみる
スクリーンショット 2017-07-05 11.40.54.png
warningが出ていることを確認できた。

[terminating-newline] File should terminate with exactly one newline character ('\n')

UITestのコードが入っているのでWarningが14こ出ていたので他のwarningも確認してみると

[upper-camel-case] Class names should be UpperCamelCase
[trailing-whitespace] Line should not have any trailing whitespace

プロジェクト名の頭文字を小文字にしてしまうと自動生成したテストコードのクラス名の頭文字も小文字になりwarningが出てしまう。

なんとなく使えそうなところまで確認できたので、次はTailorのガイドラインを調べてみる。

Tailorのガイドライン(Rule)

Tailorのwikiに記載されている内容を確認。
コマンドで確認することもできる。

$ tailor --show-rules

プロジェクト毎に設定するためには、xcodeprojectファイルと同階層に.tailor.ymlを作成することで可能になる。
ymlには除外するフォルダやファイルを指定できるので、テスト用に自動生成されたファイルなどはここで除外できる。
ビルドの度にチェックをすると重くなることもあるらしいので、Build Phaseに追加されたスクリプトの最初にexit 0を書くことでチェックを無効にすることができる。

基本チェックすることにするが除外する内容はこれから検討する。

最後に気づいたのだがtailor swiftでgoogle先生に聞いてみると「テイラー・スイフト」が出てきた。
「あ〜」と思ったので・・・

参考

インストールやymlの記載内容等はこちらを参考
-[Swift] TailorでSwiftのコードを静的解析!
-Swiftの静的コード解析ツールTailorの使い方