JetBrains製の静的解析ツールが出ていたので、試してみました。
今の所、以下の言語に対応しているみたいです。Java以外はEAPなんですね。
今回はJavaで試します。
Qodana for JVM はサーバーサイドKotlinかJavaを解析できるようです。Scalaは近日公開とのこと。
手元のKotlinのプロジェクトで試してみます。
Dockerで動かします。
Qodana for JVM Docker image | Qodana
docker run --rm -it -p 8080:8080 \ -v <source-directory>/:/data/project/ \ -v <output-directory>/:/data/results/ \ jetbrains/qodana-jvm-community --show-report
実際に動かしてみます。
docker run --rm -it -p 8080:8080 \ -v "$(pwd)"/direct/:/data/project/ \ -v "$(pwd)"/report/:/data/results/ \ jetbrains/qodana-jvm-community --show-report
/data/project/
にプロジェクトを配置すれば、解析されます。結果は /data/results/
に吐き出されます。
解析には少し(四分程度)かかりました。時間はプロジェクトの規模に関係しているかもしれません。また、解析にはメモリを大量に消費するようです。問題があればDockerのメモリ割り当てを増やす必要があるかもしれません。
By using this Docker image, you agree to the Qodana Community Linters Agreement (https://www.jetbrains.com/legal/docs/agreements/qodana/community-linters/) and JetBrains privacy policy (https://www.jetbrains.com/legal/docs/privacy/privacy/). QQQQQQQ DDDDDDDDDDD Qodana for JVM Community linter QQ:::::::QQ D::::::::::DDD Analyze project written in Java and Kot QQ:::::::::::QQ D:::::::::::::DD lin Q::::::QQQ::::::Q DDD::::DDDDD::::D To see the complete list of supported t Q:::::O Q:::::Q D::::D D::::D echnologies and languages, Q::::O Q::::Q D::::D D::::D visit the Qodana (https://www.jetbrains Q::::O Q::::Q D::::D D::::D .com/qodana) documentation. Q::::O QQQ::::Q D::::D D::::D Contact us at Q:::::O Q::::::Q D::::D D:::DD qodana-support@jetbrains.com QQ::::QQ::::::Q DDD::::DDDDD::DD Or via our issue tracker: QQ:::::::::Q D::::::::::DDD https://jb.gg/qodana-issue QQQQQQQ:::QQ DDDDDDDDDDD Or share your feedback in our Slack: QQQQQQ https://jb.gg/qodana-slack! Starting up IntelliJ IDEA 2021.2.3 (build QDJVMC-212.5672.90) ...done. Preparing for the Project opening stage ... (Project opening) done. The Project opening stage completed in 4 s 198 ms Initializing project...Inspecting with the 'qodana.starter' profile Loaded the 'qodana.sanity' shared project profile The 'qodana.sanity' profile is configured for sanity checks The 'qodana.recommended' profile is configured for promo checks 0% Preparing for the Project configuration stage ... (Project configuration) Keep running Project configuration ... so far 4 m 0 s 9 The Project configuration stage completed in 4 m 24 s 211 ms Preparing for the Project analysis stage ... (Project analysis) Analyzing code 94% [QuestionApplicationService.kt] The Project analysis stage completed in 4 s 608 ms ---- Qodana - Detailed summary ---- Analysis results: 1 problems detected Grouping problems by severity: Note - 1 Name Severity Count problems Implicit `Nothing?` type note 1 ----------------------------------- 2021/12/18 03:26:32 IDEA exit code: 0 2021/12/18 03:26:32 Generating html report ... Generating final reports... The project doesn't contain qodana.yaml config file Done 2021/12/18 03:26:33 Serving report on http://localhost:8080 ...
今回は予め意図的に問題のあるコードを忍ばせておきました。結果、その箇所が検出されたようです。
--show-report
引数をつけたので、ブラウザからレポートを確認できます。
どのような問題が何件あるのか、問題の箇所はどこか、画面で確認できます。
「Open file in」からIntelliJで該当箇所を直接開けます。便利ですね。
レポート画面は /data/results/
に生成されたHTMLからでも確認できるのでDockerコンテナを終了した後でも確認できます。CIに組み込む場合はこのファイルをアーカイブすると、結果を保存できますね。