Qodana Community で静的コード検査
Qodana Community で静的コード検査
目次
- Qodana Community で静的コード検査
- JetBrains IDE で Qodana で静的コード検査
- Qodana Cloud
- GitLab CI で Qodana の静的検査 (Code Quality もあり)
Qodana って?
そもそも Qodana って何? って話ですが、JetBrains が提供している静的コード検査ツールです。
IntelliJ IDEA をはじめとする JetBrains の統合開発環境は強力な静的コード検査エンジンを内蔵しています。Qodana はこのエンジンのみを抜き出し、CLI や CI で使えるようにしたものということッぽいです。
余談ですが、.NET の JetBrains ReSharper の検査エンジンは ReSharper command line tools として提供されていて、CI で動作させられます。
Qodana Cloud などもありますが、それについてはおいおい。
Qodana Community って?
Qodana は有料の Ultimate / Ultimate Plus に加え、無料の Community も提供しています。
Qodana の静的コード検査は Java だけでなく、C# や Go などの様々な言語に対応していますが、無料の Community プランで利用できるのは JVM / Android / Python のみです。かつ、Spring Boot や Django などのフレームワークには対応していません。
JetBrains の統合開発環境には無償で使えるものが用意されていますが、それに合わせている感じです。
- IntelliJ IDEA Community Edition
- Android Studio
- PyCharm Community Edition
Qodana CLI で検査する
Qodana のエンジンは Docker Image で提供されています。Community とついているものだけが無料で使えます。
- Qodana Community for JVM
- Qodana Community for Android
- Qodana Community for Python
セットアップ
まずは Docker Engine をインストールしてください。Windows では Docker Desktop が利用できます。
Docker Image を直接利用することもできますが、Qodana CLI を利用する方が楽なので、Qodana CLI をインストールします。公式ドキュメントの Run Qodana を参考にしてください。
Linux では次の通りです。
$ curl -fsSL https://jb.gg/qodana-cli/install | bash
検査
テスト用のプロジェクトを作成します。適当なディレクトリを作成し、問題のあるコードを含む main.py
ファイルを作成します。
def hello(a):
pass
プロジェクトのディレクトリで次のコマンドを実行します。(エンジンに Qodana Community for Python を利用しています)
$ qodana scan --linter jetbrains/qodana-python-community
次のようにトークンがどうたら言われますので、n
で無視して続行します。
? Do you want to open the team page to get the token? [Y/n]:
初回は Docker Image のダウンロードなどで時間がかかります。
検査が完了すると、レポートを表示するか聞かれますので、y
とします。
2023/08/17 04:12:19 IDE exit code: 0
2023/08/17 04:12:19 Generating HTML report ...
Generating final reports...
Done
2023/08/17 04:12:20 Sync IDEA cache from: /data/project/.idea to: /data/cache/.idea
✗ Found 1 new problems according to the checks applied
? Do you want to open the latest report [Y/n]:
ブラウザーが起動して、結果が表示されます。
qodana.yaml
設定ファイル 一度検査をすると、qodana.yaml
ファイルがカレントディレクトリに出力されます。
version: "1.0"
linter: jetbrains/qodana-python-community:2023.2
利用するエンジンが設定ファイルに含まれていますので、次回以降は qodana scan
だけで OK です。
qodana.yaml
では除外するファイルなどの設定できます。
CLI で結果を見る
--print-problems
引数を使えば、コンソールに検査結果を表示します。
$ qodana scan --print-problems
...
NOTE PyUnusedLocalInspection
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
main.py:1:11
───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ def hello(a): ←
2 │ pass
───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Parameter 'a' value is not used
✗ Found 1 new problems according to the checks applied
レポートファイル
レポートファイルのありかは qodana scan --help
で調べられます。
$ qodana scan --help
...
-o, --results-dir string Override directory to save Qodana inspection results to (default "/home/masakura/.cache/JetBrains/Qodana/e3b0c442-e43f67c8/results")
この default のディレクトリにあります。
$ ls /home/masakura/.cache/JetBrains/Qodana/e3b0c442-e43f67c8/results
log projectStructure qodana-short.sarif.json qodana.sarif.json report
HTML レポートは report
ディレクトリに、qodana.sarif.json
ファイルに SARIF 形式の結果が出力されています。
最後に
とりあえず Qodana CLI をインストールして Qodana Community で静的コード検査してみました。
JetBrains IDE から実行したり、Qodana Cloud を使ったり、CI で実行したり、いろいろできるのですが、そのあたりは次回以降で。
Discussion