ブログ

継続的インテグレーションからのIntelliJ Inspectionsの実行

アラン・リチャードソン
2021年2月15日発行

継続的インテグレーションからのIntelliJ Inspectionsの実行

IntelliJ IDEAは、コードを書く際にIDE内でインテンションとして、コーディングを改善するための機能を提供します。Intentionsは、ソース全体のパターンのためにコードを検査するためにバッチで使用することができ、さらにはコマンドラインでの分析や継続的インテグレーションに追加することもできます。この記事では、IntelliJに搭載されている機能と、Sensei で作成したカスタムインテンションの拡張について説明します。


IntelliJ Inspections

IntelliJのインスペクション機能は、コーディング時にIDEで動的に報告されるエラーの多くを表示します。

  • インターフェイスに変換可能な抽象クラスを検出します。
  • ローカルにできる冗長なクラスフィールドを特定する。
  • 非推奨のメソッドの使用に関する警告
  • などです。


これらの検査では、IDEにマッチするコードが意図的なアクションとしてハイライトされ、しばしば関連するQuickFixが用意されています。


Inspection Deprecated Api Usage Options(インスペクション非推奨)。


コードがInspectionにマッチしたときにIDEがリアルタイムでハイライトすることで、コーディングをダイナミックに改善することができます。コードの問題を特定した後、IntelliJ Intention Actionsを使用してコードをQuickFixすることで、より良いパターンを強化することができます。

インスペクション・プロフィール

検査は、IDE内からバッチとして実行することも、コマンドラインや継続的インテグレーションプロセスで実行することもできます。

IntelliJのインスペクションを一括して行うには、インスペクション・プロファイルを使用することが重要です。

IntelliJには2つのデフォルトのInspection Profilesがあります。1つはProjectに、もう1つはIDEに保存されています。

特定のプラグインやユースケースを設定するために、新しい検査プロファイルを作成することができます(例)。

  • チェックスタイル・リアルタイム・スキャンのみの実行
  • 特定のSensei ルールのセットを実行
  • HTMLチェックの実行

プロファイルに含まれるインスペクションは、IntelliJの環境設定で有効または無効にすることができます。また、環境設定ダイアログでは、利用可能なインスペクションの範囲を簡単に知ることができます。


インスペクション Apiマーク除去の使用状況


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


プロファイルを複製するツールアイコン


IDEで検査プロファイルを実行する

インスペクションプロファイルは、IDE内で「Analyze ‾ Inspect Code...」メニューを使って実行できます。


Analyze Or Inspectコードを使用した検査プロファイルの実行


分析機能では、検査を実行する範囲をコントロールすることができます。例えば、プロジェクト全体、テストソースの有無、特定のファイルセットなどです。 


検査範囲の指定


また、ここから検査プロファイルを管理し、特定のプロファイルの作成や設定を行うことができます。


検査範囲の指定」ダイアログで[OK]をクリックすると、IntelliJは定義された範囲内で、プロファイルで選択されたすべての検査を実行します。

IntelliJは、インスペクションを実行した結果を「Inspection Results」タブで報告します。


IntelliJ インスペクションの実行結果を「インスペクション結果」タブで報告する。


Sensei Secure Code Warrior のプラグインを使用すると、カスタムコードマッチングレシピを作成することができます。Sensei はIntelliJと緊密に統合されており、これらのカスタムレシピをIntelliJ Intention Actionsのように自然に使用することができます。つまり、インスペクションとしてIntelliJに読み込まれ、インスペクションプロファイルを使ってグループ化、有効化、無効化することができます。カスタムInspection Profileを作成し、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の公式ドキュメントでは、inpectionコマンドの一般的な形式を次のように説明しています。

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`フォルダに報告します。


検査結果の閲覧

後述するように、これらの結果を継続的インテグレーションの中から報告することができます。

また、IntelliJ自身でも「Analyse ″View Offline Inspection Results″」機能を使って見ることができます。


分析 オフラインで検査結果を見る


これにより、「Inspection Results」タブに結果が読み込まれます。


検査結果タブに検査結果を読み込む


これはJetBrainsのサイトに公式に記載されています。

- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results


これは、コードレビュープロセスにおいて、コマンドライン実行が継続的インテグレーションプロセスに組み込まれていて、レビュアーが検査結果のエントリの完全なソースコンテキストをチェックしたい場合に使用されます。

継続的インテグレーションにおける検査プロファイル

コマンドライン検査を継続的インテグレーションに追加する場合、理想的にはレポートを自動的に生成したいと考えますが、そのためにはいくつかのオプションがあります。

TeamCityは、継続的インテグレーションにおける検査プロファイルをサポートしています。

-https://www.jetbrains.com/help/teamcity/inspections.html


Jenkins Warnings NGプラグインは、IntelliJ Inspectionsのコマンドライン出力をレポート形式の一つとしてサポートしています。

-https://github.com/jenkinsci/warnings-ng-plugin

-https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md


IDEA CLI Inspector」のようなコミュニティプロジェクトは、他のCIツールでInspection Profilesの使用をサポートするために存在します。

-https://github.com/bentolor/idea-cli-inspector


JetBrainsのQodanaプロジェクトの導入により、CIプロセスにおけるInspection Profilesの未来はさらに明るいものになりました。Qodanaプロジェクトは、公式のGithub ActionsとDockerイメージを持つヘッドレス版のIntelliJです。

-https://github.com/JetBrains/Qodana


Qodanaは現在ベータ版ですが、Sensei チームは、継続的インテグレーションの一部としてSensei ルールを実行するための公式にサポートされたプラットフォームになるように監視しています。


概要

Intention Actionを使うことで、コーディングパターンを強化し、コーディング中にミスをしてもIDEですぐに修正することができます。

検査プロファイルでは、これらの情報をプロファイルにまとめ、「コードの分析と検査」アクションとしてバッチで実行することができます。これは、あるパターンに遭遇して、コードのどこかでそのパターンを見逃していないかどうかを再確認したい場合に便利です。

検査プロファイルは、コマンドラインから実行することができ、「信頼しつつ検証する」モデルをサポートする継続的インテグレーションプロセスに組み込むこともでき、偶発的なずれをキャッチすることができます。

上記はすべてIntelliJの機能で構築されており、JetBrainsはQodanaの導入により継続的インテグレーションプロセスを改善しています。


Sensei レシピはIntelliJに読み込まれ、ネイティブのインテンションアクションとして動作し、Inspection Profilesに集められ、Inspect CodeによるバッチチェックやJetBrainsの公式コマンドライン実行機能による継続的インテグレーションをサポートします。

---


IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

コマンドラインからIntelliJでプロジェクトを実行してみたい方は、この記事で使用しているプロジェクトは、Secure Code Warrior GitHubアカウントの `sensei-blog-examples` リポジトリにあります。読者の皆様には、Sensei のルールだけを実行するプロファイルを作成することをお勧めします。ぜひ試してみてください。


https://github.com/securecodewarrior/sensei-blog-examples

についてはこちらをご覧ください。Sensei


リソースを見る
リソースを見る

Sensei 、IntelliJ Intention ActionをIDE内のインスペクションとしてバッチモードで実行する方法、コマンドラインから実行する方法、継続的インテグレーションで実行する方法をご紹介します。

ご興味がおありですか?

アラン・リチャードソンは、20年以上にわたり、開発者として、またテスターからテスト責任者まで、あらゆるレベルのテストに携わってきたプロフェッショナルなIT経験を持っています。アラン・リチャードソンは、Secure Code Warrior のデベロッパーリレーションズの責任者として、チームと直接連携し、高品質で安全なコードの開発を促進しています。また、「Dear Evil Tester」や「Java For Testers」など4冊の著書があります。また、テクニカルWebテストやSelenium WebDriver with Javaを学ぶためのオンライントレーニングcourses を作成しています。アランは、SeleniumSimplified.com、EvilTester.com、JavaForTesters.com、CompendiumDev.co.ukに執筆やトレーニングビデオを掲載している。

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約する
シェアする
著者
アラン・リチャードソン
2021年2月15日発行

アラン・リチャードソンは、20年以上にわたり、開発者として、またテスターからテスト責任者まで、あらゆるレベルのテストに携わってきたプロフェッショナルなIT経験を持っています。アラン・リチャードソンは、Secure Code Warrior のデベロッパーリレーションズの責任者として、チームと直接連携し、高品質で安全なコードの開発を促進しています。また、「Dear Evil Tester」や「Java For Testers」など4冊の著書があります。また、テクニカルWebテストやSelenium WebDriver with Javaを学ぶためのオンライントレーニングcourses を作成しています。アランは、SeleniumSimplified.com、EvilTester.com、JavaForTesters.com、CompendiumDev.co.ukに執筆やトレーニングビデオを掲載している。

シェアする

継続的インテグレーションからのIntelliJ Inspectionsの実行

IntelliJ IDEAは、コードを書く際にIDE内でインテンションとして、コーディングを改善するための機能を提供します。Intentionsは、ソース全体のパターンのためにコードを検査するためにバッチで使用することができ、さらにはコマンドラインでの分析や継続的インテグレーションに追加することもできます。この記事では、IntelliJに搭載されている機能と、Sensei で作成したカスタムインテンションの拡張について説明します。


IntelliJ Inspections

IntelliJのインスペクション機能は、コーディング時にIDEで動的に報告されるエラーの多くを表示します。

  • インターフェイスに変換可能な抽象クラスを検出します。
  • ローカルにできる冗長なクラスフィールドを特定する。
  • 非推奨のメソッドの使用に関する警告
  • などです。


これらの検査では、IDEにマッチするコードが意図的なアクションとしてハイライトされ、しばしば関連するQuickFixが用意されています。


Inspection Deprecated Api Usage Options(インスペクション非推奨)。


コードがInspectionにマッチしたときにIDEがリアルタイムでハイライトすることで、コーディングをダイナミックに改善することができます。コードの問題を特定した後、IntelliJ Intention Actionsを使用してコードをQuickFixすることで、より良いパターンを強化することができます。

インスペクション・プロフィール

検査は、IDE内からバッチとして実行することも、コマンドラインや継続的インテグレーションプロセスで実行することもできます。

IntelliJのインスペクションを一括して行うには、インスペクション・プロファイルを使用することが重要です。

IntelliJには2つのデフォルトのInspection Profilesがあります。1つはProjectに、もう1つはIDEに保存されています。

特定のプラグインやユースケースを設定するために、新しい検査プロファイルを作成することができます(例)。

  • チェックスタイル・リアルタイム・スキャンのみの実行
  • 特定のSensei ルールのセットを実行
  • HTMLチェックの実行

プロファイルに含まれるインスペクションは、IntelliJの環境設定で有効または無効にすることができます。また、環境設定ダイアログでは、利用可能なインスペクションの範囲を簡単に知ることができます。


インスペクション Apiマーク除去の使用状況


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


プロファイルを複製するツールアイコン


IDEで検査プロファイルを実行する

インスペクションプロファイルは、IDE内で「Analyze ‾ Inspect Code...」メニューを使って実行できます。


Analyze Or Inspectコードを使用した検査プロファイルの実行


分析機能では、検査を実行する範囲をコントロールすることができます。例えば、プロジェクト全体、テストソースの有無、特定のファイルセットなどです。 


検査範囲の指定


また、ここから検査プロファイルを管理し、特定のプロファイルの作成や設定を行うことができます。


検査範囲の指定」ダイアログで[OK]をクリックすると、IntelliJは定義された範囲内で、プロファイルで選択されたすべての検査を実行します。

IntelliJは、インスペクションを実行した結果を「Inspection Results」タブで報告します。


IntelliJ インスペクションの実行結果を「インスペクション結果」タブで報告する。


Sensei Secure Code Warrior のプラグインを使用すると、カスタムコードマッチングレシピを作成することができます。Sensei はIntelliJと緊密に統合されており、これらのカスタムレシピをIntelliJ Intention Actionsのように自然に使用することができます。つまり、インスペクションとしてIntelliJに読み込まれ、インスペクションプロファイルを使ってグループ化、有効化、無効化することができます。カスタムInspection Profileを作成し、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の公式ドキュメントでは、inpectionコマンドの一般的な形式を次のように説明しています。

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`フォルダに報告します。


検査結果の閲覧

後述するように、これらの結果を継続的インテグレーションの中から報告することができます。

また、IntelliJ自身でも「Analyse ″View Offline Inspection Results″」機能を使って見ることができます。


分析 オフラインで検査結果を見る


これにより、「Inspection Results」タブに結果が読み込まれます。


検査結果タブに検査結果を読み込む


これはJetBrainsのサイトに公式に記載されています。

- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results


これは、コードレビュープロセスにおいて、コマンドライン実行が継続的インテグレーションプロセスに組み込まれていて、レビュアーが検査結果のエントリの完全なソースコンテキストをチェックしたい場合に使用されます。

継続的インテグレーションにおける検査プロファイル

コマンドライン検査を継続的インテグレーションに追加する場合、理想的にはレポートを自動的に生成したいと考えますが、そのためにはいくつかのオプションがあります。

TeamCityは、継続的インテグレーションにおける検査プロファイルをサポートしています。

-https://www.jetbrains.com/help/teamcity/inspections.html


Jenkins Warnings NGプラグインは、IntelliJ Inspectionsのコマンドライン出力をレポート形式の一つとしてサポートしています。

-https://github.com/jenkinsci/warnings-ng-plugin

-https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md


IDEA CLI Inspector」のようなコミュニティプロジェクトは、他のCIツールでInspection Profilesの使用をサポートするために存在します。

-https://github.com/bentolor/idea-cli-inspector


JetBrainsのQodanaプロジェクトの導入により、CIプロセスにおけるInspection Profilesの未来はさらに明るいものになりました。Qodanaプロジェクトは、公式のGithub ActionsとDockerイメージを持つヘッドレス版のIntelliJです。

-https://github.com/JetBrains/Qodana


Qodanaは現在ベータ版ですが、Sensei チームは、継続的インテグレーションの一部としてSensei ルールを実行するための公式にサポートされたプラットフォームになるように監視しています。


概要

Intention Actionを使うことで、コーディングパターンを強化し、コーディング中にミスをしてもIDEですぐに修正することができます。

検査プロファイルでは、これらの情報をプロファイルにまとめ、「コードの分析と検査」アクションとしてバッチで実行することができます。これは、あるパターンに遭遇して、コードのどこかでそのパターンを見逃していないかどうかを再確認したい場合に便利です。

検査プロファイルは、コマンドラインから実行することができ、「信頼しつつ検証する」モデルをサポートする継続的インテグレーションプロセスに組み込むこともでき、偶発的なずれをキャッチすることができます。

上記はすべてIntelliJの機能で構築されており、JetBrainsはQodanaの導入により継続的インテグレーションプロセスを改善しています。


Sensei レシピはIntelliJに読み込まれ、ネイティブのインテンションアクションとして動作し、Inspection Profilesに集められ、Inspect CodeによるバッチチェックやJetBrainsの公式コマンドライン実行機能による継続的インテグレーションをサポートします。

---


IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

コマンドラインからIntelliJでプロジェクトを実行してみたい方は、この記事で使用しているプロジェクトは、Secure Code Warrior GitHubアカウントの `sensei-blog-examples` リポジトリにあります。読者の皆様には、Sensei のルールだけを実行するプロファイルを作成することをお勧めします。ぜひ試してみてください。


https://github.com/securecodewarrior/sensei-blog-examples

についてはこちらをご覧ください。Sensei


リソースを見る
リソースを見る

以下のフォームに記入し、レポートをダウンロードしてください。

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。

継続的インテグレーションからのIntelliJ Inspectionsの実行

IntelliJ IDEAは、コードを書く際にIDE内でインテンションとして、コーディングを改善するための機能を提供します。Intentionsは、ソース全体のパターンのためにコードを検査するためにバッチで使用することができ、さらにはコマンドラインでの分析や継続的インテグレーションに追加することもできます。この記事では、IntelliJに搭載されている機能と、Sensei で作成したカスタムインテンションの拡張について説明します。


IntelliJ Inspections

IntelliJのインスペクション機能は、コーディング時にIDEで動的に報告されるエラーの多くを表示します。

  • インターフェイスに変換可能な抽象クラスを検出します。
  • ローカルにできる冗長なクラスフィールドを特定する。
  • 非推奨のメソッドの使用に関する警告
  • などです。


これらの検査では、IDEにマッチするコードが意図的なアクションとしてハイライトされ、しばしば関連するQuickFixが用意されています。


Inspection Deprecated Api Usage Options(インスペクション非推奨)。


コードがInspectionにマッチしたときにIDEがリアルタイムでハイライトすることで、コーディングをダイナミックに改善することができます。コードの問題を特定した後、IntelliJ Intention Actionsを使用してコードをQuickFixすることで、より良いパターンを強化することができます。

インスペクション・プロフィール

検査は、IDE内からバッチとして実行することも、コマンドラインや継続的インテグレーションプロセスで実行することもできます。

IntelliJのインスペクションを一括して行うには、インスペクション・プロファイルを使用することが重要です。

IntelliJには2つのデフォルトのInspection Profilesがあります。1つはProjectに、もう1つはIDEに保存されています。

特定のプラグインやユースケースを設定するために、新しい検査プロファイルを作成することができます(例)。

  • チェックスタイル・リアルタイム・スキャンのみの実行
  • 特定のSensei ルールのセットを実行
  • HTMLチェックの実行

プロファイルに含まれるインスペクションは、IntelliJの環境設定で有効または無効にすることができます。また、環境設定ダイアログでは、利用可能なインスペクションの範囲を簡単に知ることができます。


インスペクション Apiマーク除去の使用状況


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


プロファイルを複製するツールアイコン


IDEで検査プロファイルを実行する

インスペクションプロファイルは、IDE内で「Analyze ‾ Inspect Code...」メニューを使って実行できます。


Analyze Or Inspectコードを使用した検査プロファイルの実行


分析機能では、検査を実行する範囲をコントロールすることができます。例えば、プロジェクト全体、テストソースの有無、特定のファイルセットなどです。 


検査範囲の指定


また、ここから検査プロファイルを管理し、特定のプロファイルの作成や設定を行うことができます。


検査範囲の指定」ダイアログで[OK]をクリックすると、IntelliJは定義された範囲内で、プロファイルで選択されたすべての検査を実行します。

IntelliJは、インスペクションを実行した結果を「Inspection Results」タブで報告します。


IntelliJ インスペクションの実行結果を「インスペクション結果」タブで報告する。


Sensei Secure Code Warrior のプラグインを使用すると、カスタムコードマッチングレシピを作成することができます。Sensei はIntelliJと緊密に統合されており、これらのカスタムレシピをIntelliJ Intention Actionsのように自然に使用することができます。つまり、インスペクションとしてIntelliJに読み込まれ、インスペクションプロファイルを使ってグループ化、有効化、無効化することができます。カスタムInspection Profileを作成し、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の公式ドキュメントでは、inpectionコマンドの一般的な形式を次のように説明しています。

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`フォルダに報告します。


検査結果の閲覧

後述するように、これらの結果を継続的インテグレーションの中から報告することができます。

また、IntelliJ自身でも「Analyse ″View Offline Inspection Results″」機能を使って見ることができます。


分析 オフラインで検査結果を見る


これにより、「Inspection Results」タブに結果が読み込まれます。


検査結果タブに検査結果を読み込む


これはJetBrainsのサイトに公式に記載されています。

- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results


これは、コードレビュープロセスにおいて、コマンドライン実行が継続的インテグレーションプロセスに組み込まれていて、レビュアーが検査結果のエントリの完全なソースコンテキストをチェックしたい場合に使用されます。

継続的インテグレーションにおける検査プロファイル

コマンドライン検査を継続的インテグレーションに追加する場合、理想的にはレポートを自動的に生成したいと考えますが、そのためにはいくつかのオプションがあります。

TeamCityは、継続的インテグレーションにおける検査プロファイルをサポートしています。

-https://www.jetbrains.com/help/teamcity/inspections.html


Jenkins Warnings NGプラグインは、IntelliJ Inspectionsのコマンドライン出力をレポート形式の一つとしてサポートしています。

-https://github.com/jenkinsci/warnings-ng-plugin

-https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md


IDEA CLI Inspector」のようなコミュニティプロジェクトは、他のCIツールでInspection Profilesの使用をサポートするために存在します。

-https://github.com/bentolor/idea-cli-inspector


JetBrainsのQodanaプロジェクトの導入により、CIプロセスにおけるInspection Profilesの未来はさらに明るいものになりました。Qodanaプロジェクトは、公式のGithub ActionsとDockerイメージを持つヘッドレス版のIntelliJです。

-https://github.com/JetBrains/Qodana


Qodanaは現在ベータ版ですが、Sensei チームは、継続的インテグレーションの一部としてSensei ルールを実行するための公式にサポートされたプラットフォームになるように監視しています。


概要

Intention Actionを使うことで、コーディングパターンを強化し、コーディング中にミスをしてもIDEですぐに修正することができます。

検査プロファイルでは、これらの情報をプロファイルにまとめ、「コードの分析と検査」アクションとしてバッチで実行することができます。これは、あるパターンに遭遇して、コードのどこかでそのパターンを見逃していないかどうかを再確認したい場合に便利です。

検査プロファイルは、コマンドラインから実行することができ、「信頼しつつ検証する」モデルをサポートする継続的インテグレーションプロセスに組み込むこともでき、偶発的なずれをキャッチすることができます。

上記はすべてIntelliJの機能で構築されており、JetBrainsはQodanaの導入により継続的インテグレーションプロセスを改善しています。


Sensei レシピはIntelliJに読み込まれ、ネイティブのインテンションアクションとして動作し、Inspection Profilesに集められ、Inspect CodeによるバッチチェックやJetBrainsの公式コマンドライン実行機能による継続的インテグレーションをサポートします。

---


IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

コマンドラインからIntelliJでプロジェクトを実行してみたい方は、この記事で使用しているプロジェクトは、Secure Code Warrior GitHubアカウントの `sensei-blog-examples` リポジトリにあります。読者の皆様には、Sensei のルールだけを実行するプロファイルを作成することをお勧めします。ぜひ試してみてください。


https://github.com/securecodewarrior/sensei-blog-examples

についてはこちらをご覧ください。Sensei


リソースにアクセス

以下のリンクをクリックし、この資料のPDFをダウンロードしてください。

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

レポートを見るデモを予約する
PDFをダウンロード
リソースを見る
シェアする
ご興味がおありですか?

シェアする
著者
アラン・リチャードソン
2021年2月15日発行

アラン・リチャードソンは、20年以上にわたり、開発者として、またテスターからテスト責任者まで、あらゆるレベルのテストに携わってきたプロフェッショナルなIT経験を持っています。アラン・リチャードソンは、Secure Code Warrior のデベロッパーリレーションズの責任者として、チームと直接連携し、高品質で安全なコードの開発を促進しています。また、「Dear Evil Tester」や「Java For Testers」など4冊の著書があります。また、テクニカルWebテストやSelenium WebDriver with Javaを学ぶためのオンライントレーニングcourses を作成しています。アランは、SeleniumSimplified.com、EvilTester.com、JavaForTesters.com、CompendiumDev.co.ukに執筆やトレーニングビデオを掲載している。

シェアする

継続的インテグレーションからのIntelliJ Inspectionsの実行

IntelliJ IDEAは、コードを書く際にIDE内でインテンションとして、コーディングを改善するための機能を提供します。Intentionsは、ソース全体のパターンのためにコードを検査するためにバッチで使用することができ、さらにはコマンドラインでの分析や継続的インテグレーションに追加することもできます。この記事では、IntelliJに搭載されている機能と、Sensei で作成したカスタムインテンションの拡張について説明します。


IntelliJ Inspections

IntelliJのインスペクション機能は、コーディング時にIDEで動的に報告されるエラーの多くを表示します。

  • インターフェイスに変換可能な抽象クラスを検出します。
  • ローカルにできる冗長なクラスフィールドを特定する。
  • 非推奨のメソッドの使用に関する警告
  • などです。


これらの検査では、IDEにマッチするコードが意図的なアクションとしてハイライトされ、しばしば関連するQuickFixが用意されています。


Inspection Deprecated Api Usage Options(インスペクション非推奨)。


コードがInspectionにマッチしたときにIDEがリアルタイムでハイライトすることで、コーディングをダイナミックに改善することができます。コードの問題を特定した後、IntelliJ Intention Actionsを使用してコードをQuickFixすることで、より良いパターンを強化することができます。

インスペクション・プロフィール

検査は、IDE内からバッチとして実行することも、コマンドラインや継続的インテグレーションプロセスで実行することもできます。

IntelliJのインスペクションを一括して行うには、インスペクション・プロファイルを使用することが重要です。

IntelliJには2つのデフォルトのInspection Profilesがあります。1つはProjectに、もう1つはIDEに保存されています。

特定のプラグインやユースケースを設定するために、新しい検査プロファイルを作成することができます(例)。

  • チェックスタイル・リアルタイム・スキャンのみの実行
  • 特定のSensei ルールのセットを実行
  • HTMLチェックの実行

プロファイルに含まれるインスペクションは、IntelliJの環境設定で有効または無効にすることができます。また、環境設定ダイアログでは、利用可能なインスペクションの範囲を簡単に知ることができます。


インスペクション Apiマーク除去の使用状況


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


プロファイルを複製するツールアイコン


IDEで検査プロファイルを実行する

インスペクションプロファイルは、IDE内で「Analyze ‾ Inspect Code...」メニューを使って実行できます。


Analyze Or Inspectコードを使用した検査プロファイルの実行


分析機能では、検査を実行する範囲をコントロールすることができます。例えば、プロジェクト全体、テストソースの有無、特定のファイルセットなどです。 


検査範囲の指定


また、ここから検査プロファイルを管理し、特定のプロファイルの作成や設定を行うことができます。


検査範囲の指定」ダイアログで[OK]をクリックすると、IntelliJは定義された範囲内で、プロファイルで選択されたすべての検査を実行します。

IntelliJは、インスペクションを実行した結果を「Inspection Results」タブで報告します。


IntelliJ インスペクションの実行結果を「インスペクション結果」タブで報告する。


Sensei Secure Code Warrior のプラグインを使用すると、カスタムコードマッチングレシピを作成することができます。Sensei はIntelliJと緊密に統合されており、これらのカスタムレシピをIntelliJ Intention Actionsのように自然に使用することができます。つまり、インスペクションとしてIntelliJに読み込まれ、インスペクションプロファイルを使ってグループ化、有効化、無効化することができます。カスタムInspection Profileを作成し、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の公式ドキュメントでは、inpectionコマンドの一般的な形式を次のように説明しています。

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`フォルダに報告します。


検査結果の閲覧

後述するように、これらの結果を継続的インテグレーションの中から報告することができます。

また、IntelliJ自身でも「Analyse ″View Offline Inspection Results″」機能を使って見ることができます。


分析 オフラインで検査結果を見る


これにより、「Inspection Results」タブに結果が読み込まれます。


検査結果タブに検査結果を読み込む


これはJetBrainsのサイトに公式に記載されています。

- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results


これは、コードレビュープロセスにおいて、コマンドライン実行が継続的インテグレーションプロセスに組み込まれていて、レビュアーが検査結果のエントリの完全なソースコンテキストをチェックしたい場合に使用されます。

継続的インテグレーションにおける検査プロファイル

コマンドライン検査を継続的インテグレーションに追加する場合、理想的にはレポートを自動的に生成したいと考えますが、そのためにはいくつかのオプションがあります。

TeamCityは、継続的インテグレーションにおける検査プロファイルをサポートしています。

-https://www.jetbrains.com/help/teamcity/inspections.html


Jenkins Warnings NGプラグインは、IntelliJ Inspectionsのコマンドライン出力をレポート形式の一つとしてサポートしています。

-https://github.com/jenkinsci/warnings-ng-plugin

-https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md


IDEA CLI Inspector」のようなコミュニティプロジェクトは、他のCIツールでInspection Profilesの使用をサポートするために存在します。

-https://github.com/bentolor/idea-cli-inspector


JetBrainsのQodanaプロジェクトの導入により、CIプロセスにおけるInspection Profilesの未来はさらに明るいものになりました。Qodanaプロジェクトは、公式のGithub ActionsとDockerイメージを持つヘッドレス版のIntelliJです。

-https://github.com/JetBrains/Qodana


Qodanaは現在ベータ版ですが、Sensei チームは、継続的インテグレーションの一部としてSensei ルールを実行するための公式にサポートされたプラットフォームになるように監視しています。


概要

Intention Actionを使うことで、コーディングパターンを強化し、コーディング中にミスをしてもIDEですぐに修正することができます。

検査プロファイルでは、これらの情報をプロファイルにまとめ、「コードの分析と検査」アクションとしてバッチで実行することができます。これは、あるパターンに遭遇して、コードのどこかでそのパターンを見逃していないかどうかを再確認したい場合に便利です。

検査プロファイルは、コマンドラインから実行することができ、「信頼しつつ検証する」モデルをサポートする継続的インテグレーションプロセスに組み込むこともでき、偶発的なずれをキャッチすることができます。

上記はすべてIntelliJの機能で構築されており、JetBrainsはQodanaの導入により継続的インテグレーションプロセスを改善しています。


Sensei レシピはIntelliJに読み込まれ、ネイティブのインテンションアクションとして動作し、Inspection Profilesに集められ、Inspect CodeによるバッチチェックやJetBrainsの公式コマンドライン実行機能による継続的インテグレーションをサポートします。

---


IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

コマンドラインからIntelliJでプロジェクトを実行してみたい方は、この記事で使用しているプロジェクトは、Secure Code Warrior GitHubアカウントの `sensei-blog-examples` リポジトリにあります。読者の皆様には、Sensei のルールだけを実行するプロファイルを作成することをお勧めします。ぜひ試してみてください。


https://github.com/securecodewarrior/sensei-blog-examples

についてはこちらをご覧ください。Sensei


目次

PDFをダウンロード
リソースを見る
ご興味がおありですか?

アラン・リチャードソンは、20年以上にわたり、開発者として、またテスターからテスト責任者まで、あらゆるレベルのテストに携わってきたプロフェッショナルなIT経験を持っています。アラン・リチャードソンは、Secure Code Warrior のデベロッパーリレーションズの責任者として、チームと直接連携し、高品質で安全なコードの開発を促進しています。また、「Dear Evil Tester」や「Java For Testers」など4冊の著書があります。また、テクニカルWebテストやSelenium WebDriver with Javaを学ぶためのオンライントレーニングcourses を作成しています。アランは、SeleniumSimplified.com、EvilTester.com、JavaForTesters.com、CompendiumDev.co.ukに執筆やトレーニングビデオを掲載している。

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約するダウンロード
シェアする
リソース・ハブ

始めるためのリソース

その他の記事
リソース・ハブ

始めるためのリソース

その他の記事