2020年7月5日日曜日

[CI][CodeReview] LGTM.com 始めました

LGTM.com ってのがあるのを知ったので使ってみました。


サインアップ~解析まで
サインアップから解析するまで一気に説明します。 まずはトップページの右上からログインします。 GitHub や BitBucket などのアカウントを使ってサインアップ可能になっています。
 
次に LGTM の GitHub App をインストールします。
リポジトリ選択では、解析したいリポジトリを選択、または全部許可にします。

LGTM.com に戻ると解析始まってると思います。

今回試したのは「自作 C++ テスティングフレームワーク」の iutest です。
C/C++ の場合はコードのビルドも必要なようですが、勝手に CMake のファイルを見つけて解析してくれました。



↓こちらが解析結果
他のレビュー系サービスや lint を使ってはいたのですが、案外問題がありました。

PR の解析
PR の解析はプロジェクトの↓が「Automated PR code reviews enabled」になっていると有効になっています。
無効になっている場合はボタンを押して有効にしましょう。

この状態で PR でレビュー箇所を修正したりするとコメントが付きます。

詳細はコメントのリンクもしくは、プロジェクトのところにある「Automated PR code reviews enabled」または、「Integrations」タブをクリックすると開きます。


メインブランチの解析
いろいろ問題が明るみになって早速修正、PR 上で修正確認できたのですが、マージ後の master ブランチの解析結果が変わらず、どうやったら解析されるのかなーと調べてたら、ドキュメントにちゃんと書いてありました。


LGTM.com は1日1回くらいの周期で新しいコミットを確認して解析するそうです。
なので、修正されるかどうかは PR で確認して、マージしたら気長に待つしかなさそうです。
チェック項目の抑制

LGTM.com で C/C++ のチェック項目はデフォルトで 140 あります。
iutest でいくつか抑制したい項目があったので方法書いておきます。

冒頭のツイート先の記事でも書かれていますが
(git push してすぐ lgtm に反映されるわけではない(数時間から半日くらいかかる)ので, 動作確認が手探りになってしまい時間がかかる)

lgtm.yml をコミットしてもすぐには反映されないみたいです。
ちょっとトライ&エラーが難しそうですが、
とりあえず、ドキュメント通りに書いておけば大丈夫なはず!

YAML で設定
YAML で ID ごとに exclude/include 指定ができます。
また、severity/tags でまとめて除外することもできるようです。
コメントで設定
C++ の場合は、「// lgtm[id]」を問題の行末に書きます。

Configuration のテスト
設定は web 上からテストすることも可能です。
Logs の右上に「Test analysis configuration」ボタンがあるので、そこを開くと任意のコンフィグを記述して解析を実行できます。
lgtm.yml をコミットしても即座に適用されないようなので、config はこちらを使ってテストすると良さそうです。



最後に
LGTM.com は CodeQL を使って解析をしているので、今まで使ってきた lint ツールなどとはまた違った解析結果が得られました。
こういった静的解析ツールは、手法の異なるいくつかのツールを併用したほうがより多くのインプットを得られるので、CodeQL ベースの解析の導入がまだであれば導入をオススメします。
また、本記事では触れませんでしたが、クエリは独自に書くことも可能です。
プロダクト固有のドメインをチェックしたりとかできそうです。

また、冒頭のツイートのリンク先でも記述されていますが、CodeQL の会社(Semmle)が GitHub に買収されていますので、今後は GitHub の機能とかでより使いやすくなったり、クエリが増えていくかもしれません。


今回は以上です。
では。



0 件のコメント:

コメントを投稿