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

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

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

##Tailorのインストール

java8が必要ということなのでまずはバージョンチェック
![スクリーンショット 2017-07-04 17.59.06.png](https://qiita-image-store.s3.amazonaws.com/0/178502/be81d112-8955-193a-8676-17a388170f89.png)

HomebrewでTailorをインストール
#
    $ brew install tailor

なんかエラーが出る。rubyのバージョン2.2.2以上が必要っぽい
![スクリーンショット 2017-07-04 18.08.58.png](https://qiita-image-store.s3.amazonaws.com/0/178502/ce6b78d0-05f8-c7d4-321a-afaca33740a6.png)

rubyのバージョンをチェックしてみると
![スクリーンショット 2017-07-04 18.10.57.png](https://qiita-image-store.s3.amazonaws.com/0/178502/fb356f8f-17af-2428-af03-ac6a55df9c6b.png)

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

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

##rbenvをインストール
![スクリーンショット 2017-07-04 18.10.57.png](https://qiita-image-store.s3.amazonaws.com/0/178502/633007b4-77a6-476a-4d9a-a90d1d39619b.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](https://qiita-image-store.s3.amazonaws.com/0/178502/c8a4e87a-b2f7-91ed-95d1-a2385a6e2f0a.png)

使用するバージョンを指定する
#
    $ rbenv global 2.2.2

確認
![スクリーンショット 2017-07-05 11.24.15.png](https://qiita-image-store.s3.amazonaws.com/0/178502/eaf384e9-91e7-c1bf-75c0-32a3688d98ee.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](https://qiita-image-store.s3.amazonaws.com/0/178502/f572cf88-8e01-d487-8e41-c751e6a91844.png)
Tailorが追加されているのでビルドしてみる
![スクリーンショット 2017-07-05 11.40.54.png](https://qiita-image-store.s3.amazonaws.com/0/178502/73a01699-1201-9c42-b76c-ff2559f00a5b.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](https://github.com/sleekbyte/tailor/wiki/Rules)に記載されている内容を確認。
コマンドで確認することもできる。
#
    $ tailor --show-rules

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

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

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

#参考
インストールやymlの記載内容等はこちらを参考
-[[Swift] TailorでSwiftのコードを静的解析！](http://dev.classmethod.jp/smartphone/swift-tailor/)
-[Swiftの静的コード解析ツールTailorの使い方](http://qiita.com/wrbss/items/4e7041c8100dfd5e4cb8)