XcodeプロジェクトのビルドツールであるxctoolとC,C++,Objective-CのLintツールであるOCLintを簡単に連携する方法について。

に書いてあることなので、こちらを読むのが楽だと思います。

xctoolのインストール

homebrewでインストールするのがお手軽です

brew install xctool --HEAD

OCLintのインストール

OCLint 0.7はまだリリースされてないのでビルドする必要がありますが、面倒なので今回は0.6のバイナリをダウンロードしてパスを通します。

連携方法

OCLintはOCLint単体でLintもできますが、xctoolのReportersにはOCLintに使える json-compilation-database というフォーマットが用意されます。

xctool -> json-compilation-database -> OCLintでjson-compilation-databaseを読み込む

という感じの流れです。

xctool -reporter json-compilation-database:compile_commands.json test

というように-reporter json-compilation-databaseを指定してテストを動かすと、compile_commands.jsonファイルを生成してくれます。

このファイルはビルドコマンドやファイル等がまとまってるだけで、これをOCLintに読み込ませてLint結果を取得するoclint-json-compilation-database というコマンドが用意されています。(OCLintに)

シェルスクリプトにまとめると以下のような感じです。

#!/bin/sh

OCLINT_HOME=~/local/oclint/bin
export PATH=$OCLINT_HOME/bin:$PATH
xctool -reporter json-compilation-database:compile_commands.json clean
xctool -reporter json-compilation-database:compile_commands.json test
# -i is include , -e is exclude
oclint-json-compilation-database -i Lib/ -e Tests/ | sed 's/(.*.m{1,2}:[0-9]*:[0-9]*:)/1 warning:/'

何が嬉しいの?

  • よくわかりません

上記のスクリプトは OCLint – 0.7dev Documentation – Using OCLint in Xcode に書かれているものを大体そのままつかったものです。

warning: に置換してるのをみてピンとくる人もいるかも知れませんが、これをXcode上で実行すると
OCLintのwarningをXcodeのエディタ上に表示することができます。

NewImage

やり方についてはOCLint – 0.7dev Documentation – Using OCLint in Xcodeを読んで下さい。

OCLintは自体はまだ分かりにくく、使いにくい感じのするツールですが、
Documentation を見ると、他のツールとの連携やCustomizing RulesCustomizing Reportsなど柔軟に出来そうな気がします。

現在(0.6)はエラー内容が分かりにくく、メトリクスな感じが強いのであんまり気軽に使えない感じがしてますが、
OCLint – 0.7dev Documentation – Rule Index を見ると0.7ではLiteralに対するLintやBrokenNilCheck等、現実的にチェックしたほうがよさそうなものが色々追加されています。

Xcodeにも文法のチェックはありますが見逃しなども多いです。
また、AppCode には同じような静的な文法チェックが結構充実していますがIDEに結合しているので、OCLintのように一つのツールとしてこのような機能があるのは色々と便利です。

JavaScriptではJSLint/JSHint/gjslint/JSONLint/WebStormのLint等、Lint系のツールは多いです。

これらのツールはJSLintのように強制力が強い(エラーがガンガン出るようなもの)より、JSHintのように明らかに悪いパターンの指摘や柔軟な設定ができるようになると一気に使われるようになった気がします。

また、JSLint Error Explanations – Making Your Feelings Betterのような表示される警告についても納得できるような解説等がでてくると、このようなツールが使われるのが当たり前になってくると思うので(特に動的型付け言語とかこういうの合ったほうがいいはず)、OCLintはツール間の連携も意識されてるみたいなので今後に期待しています。

最近は開発も活発で、0.7もそろそろ出るはずなのでチェックしておくといいかもしれないですね(0.8ブランチもあります)

おまけ

  • OCLintはLinuxでも動く

System Requirements を見ると分かるようにLLVMベースなので、Linuxなどでも静的解析が行えます。

XcodeのAnalyzeのような感じのを単独で使えるClang Static Analyzeというアプリもあります。
(こちらはMacのみです)