☘️
detektを使って自動で静的解析を行いたい
はじめに
前提条件として、detektの設定は完了しているものとします。
detektを使って自動で静的解析を行いたいと思い、以下の方法を試してみました。
- git pre-commit hook
- gitlabでパイプライン実行させる
git pre-commit hook
公式に従って、コミット時に自動でdetektが実行されるように設定しました。
簡単に手順を以下に記します。-
.git/hooks/pre-commit
にあるpre-commitファイルにdetektを実行させるスクリプトを記述 - pre-commitファイルに実行権限を与える
懸念点
この方法では、pre-commitファイルをコミットできない(=gitで管理できない)ため各自で設定をする必要があります。また、一つでも解析に引っかかるとコミットできません。
gitlabでパイプライン実行させる
こちらはgitlab-ci.ymlにdetektのタスクを追加しました。
※このとき、gradleのタスクにdetektを追加する必要があります。
gitlab-ci.yml
+ detekt:
+ stage: detekt
+ image: ribo46/detekt-cli:v2
+ tags:
+ - dev
+ script:
+ - ./gradlew detekt
懸念点
imageは適当にそれっぽいものをDockerHubから持ってきました。動いてるので良しとしています。この方法ではローカルでdetektを実行したときに作成される解析結果のレポートが出力されません。このissueを見る限りでは、まだ対応されていないようですね。
さいごに
現在はgitlabでパイプライン実行させる処理を採用していますが、後々githubに移行すると思うのでそのときは再度こちらの記事を更新する予定です。また、ローカルでdetektを実行したときに自動で修正してくれたり、解析で引っかかった部分をコード上で指摘してくれるプラグインがintelijであったので追加しました。
Discussion