継続的インテグレーションからのIntelliJインスペクションの実行
CI(継続的インテグレーション)からのIntelliJインスペクションの実行
IntelliJ IDEAには、コーディング中に「インテンション」としてコードの改善を支援する機能が備わっています。インテンションはバッチ処理として使用することで、ソースコード全体からパターンを検査したり、コマンドライン分析に拡張したり、CIに組み込んだりすることが可能です。本記事では、IntelliJ標準の機能と、Senseiで作成したカスタムインテンションによる拡張について解説します。
IntelliJインスペクション
IntelliJのインスペクション機能は、コーディング中にIDEで動的に報告される多くのエラー表示を制御しています。例:
- インターフェースに変換可能な抽象クラスの検出、
- ローカル変数に置き換え可能な冗長なクラスフィールドの特定、
- 非推奨メソッドの使用に関する警告、
- など。
これらのインスペクションは、一致するコードをIDE上でインテンションアクションとして強調表示し、多くの場合、クイックフィックス(修正案)を提示します。

コードがインスペクションに一致した際のリアルタイムなハイライト表示は、コーディングの動的な改善に役立ちます。コード内の問題を特定した後、IntelliJのインテンションアクションを使用してクイックフィックスを適用することで、より良いコーディングパターンを定着させることができます。
インスペクションプロファイル
インスペクションは、IDE内からのバッチ実行だけでなく、コマンドラインやCIプロセスからも実行可能です。
IntelliJのインスペクションをバッチ処理で活用する鍵は、「インスペクションプロファイル」の使用にあります。
IntelliJには、プロジェクトに保存されるものとIDEに保存されるものの、2つのデフォルトのインスペクションプロファイルがあります。
特定のプラグインやユースケースに合わせて、新しいインスペクションプロファイルを作成することも可能です。例:
- Checkstyleのリアルタイムスキャンのみを実行
- 特定のSenseiルールセットを実行
- HTMLチェックを実行
プロファイル内のインスペクションは、IntelliJの環境設定から有効化または無効化できます。環境設定ダイアログは、利用可能なインスペクションの範囲を確認するのにも便利です。

「ツール」アイコンを使用すると、プロファイルを複製して新しいプロファイルを作成し、特定のルールセットをまとめることができます。

IDEでのインスペクションプロファイルの実行
インスペクションプロファイルは、IDEのメニューから「Analyze(解析)」>「Inspect Code...(コードのインスペクション)」を選択して実行できます。

解析機能を使用すると、インスペクションを実行する範囲(プロジェクト全体、テストソースの含める/除外、特定のファイルセットなど)を制御できます。

ここからインスペクションプロファイルを管理し、特定のプロファイルを作成または構成することも可能です。
「Specify Inspection Scope(インスペクション範囲の指定)」ダイアログで「OK」をクリックすると、IntelliJは定義された範囲全体に対して、プロファイル内で選択されたすべてのインスペクションを実行します。
IntelliJは、インスペクションの実行結果を「Inspection Results(インスペクション結果)」タブに表示します。

Secure Code WarriorのSenseiプラグインを使用すると、カスタムコードマッチングレシピを作成できます。SenseiはIntelliJと密接に統合されており、これらのカスタムレシピをIntelliJのインテンションアクションと同じくらい自然に使用できます。つまり、レシピはインスペクションとしてIntelliJに読み込まれ、インスペクションプロファイルを使用してグループ化、有効化、無効化が可能です。カスタムインスペクションプロファイルを作成し、「Analyze(解析)」>「Inspect Code(コードのインスペクション)」機能を使用することが、プロジェクト全体でSenseiレシピを一括実行する推奨の方法です。
コマンドラインからのインスペクションプロファイルの実行
IntelliJには、JetBrainsのドキュメントで説明されているように、コマンドラインからインスペクションを実行する機能があります:
- https://www.jetbrains.com/help/idea/working-with-the-ide-features-from-command-line.html
私は主にmacOSを使用しており、以下のコマンドでIntelliJのインスタンスをコマンドラインから起動できます:
open -na "IntelliJ IDEA CE.app"
実行を容易にするため、これをシェルコマンドスクリプトに追加しています。
vi /usr/local/bin/idea
スクリプトの内容は、IntelliJが提供する公式ドキュメントに基づいています。
#!/bin/sh
open -na "IntelliJ IDEA CE.app" --args "$@"
その後、コマンドラインでのインスペクションプロセスを簡略化するために、このスクリプトを実行可能にしました。
chmod 755 /usr/local/bin/idea
IntelliJの公式ドキュメントでは、インスペクションコマンドの一般的な形式は次のように説明されています:
idea inspect <project> <inspection-profile> <output></output></inspection-profile></project>
[<options>]</options>
実際には、パスを完全修飾することでオプションを指定せずに実行しています:
idea inspect /Users/user/GitHub/sensei-blog-examples /Users/user/GitHub/sensei-blog-examples/.idea/inspectionProfiles/senseiprofile.xml /Users/user/GitHub/sensei-blog-examples/scan-results
これを実行すると、`senseiprofile`に追加したすべてのインスペクションが実行され、その結果が`scan-results`フォルダに出力されます。

インスペクション結果の確認
後述するように、これらの結果は継続的インテグレーション(CI)環境からレポートすることも可能です。
また、IntelliJの「分析」>「オフラインインスペクション結果の表示...」機能を使用して、IDE内で直接確認することもできます。

これにより、結果が「インスペクション結果」タブに読み込まれます。

詳細については、JetBrainsの公式サイトで公式にドキュメント化されています:
- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results
コマンドライン実行をCIプロセスに組み込んでいる場合、コード レビューの過程で、レビュアーがインスペクション結果の各項目についてソースコードの全コンテキストを確認したいときに役立ちます。
CIにおけるインスペクションプロファイル
コマンドラインインスペクションをCIに追加する際は、レポートが自動的に生成されるのが理想的であり、そのための選択肢はいくつか存在します。
TeamCityは、CIにおけるインスペクションプロファイルを標準でサポートしています。
- https://www.jetbrains.com/help/teamcity/inspections.html
JenkinsのWarnings NGプラグインは、IntelliJインスペクションのコマンドライン出力をレポート形式の一つとしてサポートしています。
- https://github.com/jenkinsci/warnings-ng-plugin
- https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md
他のCIツールでインスペクションプロファイルを利用できるようにするためのコミュニティプロジェクト(例:`idea CLI Inspector`)も存在します。
- https://github.com/bentolor/idea-cli-inspector
CIプロセスにおけるインスペクションプロファイルの将来は、JetBrains Qodanaプロジェクトの登場によりさらに明るいものとなっています。QodanaはIntelliJのヘッドレス版であり、公式のGitHub ActionsやDockerイメージが提供されています。
- https://github.com/JetBrains/Qodana
Qodanaは現在ベータ版ですが、Senseiチームは、継続的インテグレーション(CI)の一部としてSenseiルールを実行するための正式にサポートされたプラットフォームとなるよう、その動向を注視しています。
概要
インテンションアクションを使用すると、コーディングパターンを強化し、コーディング中のミスをIDE上で迅速に修正できます。
インスペクションプロファイルを使用すると、これらをプロファイルにまとめて、「コードの解析と検査」アクションとしてバッチ実行できます。これは、特定のパターンに遭遇した際に、コード内の他の場所で見落としがないか再確認したい場合に便利です。
インスペクションプロファイルはコマンドラインから実行でき、継続的インテグレーションプロセスに組み込むことも可能です。「信頼し、かつ検証する」モデルをサポートし、意図しないミスを未然に防ぎます。
上記はすべてIntelliJの組み込み機能であり、JetBrainsはQodanaの導入により、継続的インテグレーションプロセスをさらに改善しています。
SenseiレシピはIntelliJに読み込まれるとネイティブのインテンションアクションとして機能し、インスペクションプロファイルに収集されます。これにより、「コードの検査」によるバッチチェックや、JetBrains公式のコマンドライン実行機能による継続的インテグレーションのサポートが可能になります。
---
SenseiはIntelliJ内の「Preferences \ Plugins」(Mac)または「Settings \ Plugins」(Windows)からインストールできます。「sensei secure code」で検索してください。
IntelliJプロジェクトをコマンドラインから実行してみたい場合は、本記事で使用したプロジェクトをSecure Code WarriorのGitHubアカウントにある`sensei-blog-examples`リポジトリから入手できます。練習として、Senseiルールのみを実行するプロファイルを作成してみてください。ぜひ挑戦してみましょう。
https://github.com/securecodewarrior/sensei-blog-examples
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)