Objective-CのLintツールについて – xctoolとOCLintの連携方法
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のエディタ上に表示することができます。
やり方についてはOCLint – 0.7dev Documentation – Using OCLint in Xcodeを読んで下さい。
OCLintは自体はまだ分かりにくく、使いにくい感じのするツールですが、
Documentation を見ると、他のツールとの連携やCustomizing Rules、Customizing 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のみです)
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。