はじめに (対象読者・この記事でわかること)

この記事は、JavaでNullPointerException(NPE)に悩まされている中級者以上の開発者を対象にしています。特に「外部ライブラリを増やしたくないけど、null安全にコードを書きたい」という方に最適です。
記事を読むことで、IntelliJ IDEAの純正機能(外部プラグインなし)でnull可能性を静的に検出する設定の全手順がわかります。ビルド時に自動でnullチェックが走り、実行時エラーを事前に防げるようになります。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Java 8以降の言語仕様の基礎 - IntelliJ IDEAのプロジェクト設定画面への基本的なアクセス方法 - ビルドツール(Maven/Gradle)の最低限の記述方法

IntelliJ IDEAのnull検出機能とは

Java言語自体はnull安全性を保証しないため、NPEは歴史的に深刻なバグの一つです。IntelliJ IDEAには、独自のデータフロー検査エンジン「Constant Conditions & Exceptions」が搭載されており、これを最大限に活用することで、外部ライブラリを追加せずともnull可能性を検出できます。
本記事では、この機能を「コンパイルエラーにまでレベルを上げ、かつデフォルトで有効化する」方法を解説します。

ステップバイステップで実現するnull安全設定

ステップ1:検査レベルを「エラー」に変更

  1. IntelliJ IDEAのメニューから
    FileSettings(macOSはIntelliJ IDEAPreferences)を開く
  2. 左ペインで
    EditorInspectionsJavaProbable bugsConstant conditions & exceptions を選択
  3. 右側の「Severity」ドロップダウンを
    Error に変更(デフォルトはWarning)
  4. 同画面下部の「Disable new inspections by default」チェックを外す
    → 今後作成する全プロジェクトで自動的に有効化される

これで即座に次のコードは赤波線(コンパイルエラー)になります:

Java
String name = null; int len = name.length(); // ここでIDEがエラーを通知

ステップ2:プロジェクトデフォルトに設定を保存

  1. 同じSettings画面で歯車アイコンをクリックし
    Save as Default Inspection Profile を選択
  2. 以降、新規プロジェクト作成時にこのプロファイルが使われるため、チームメンバーと共有も容易です

ステップ3:ビルド時に検査を強制する(オプションだが強推奨)

  1. メニューから
    RunEdit Configurations...
  2. 左ペインの + ボタン → Maven または Gradle を選択
  3. 「Command line」に以下を記載(Maven例):
clean compile -Dmaven.compiler.failOnWarning=true
  1. 「Before launch」セクションで BuildBuild, no error check から
    Build に戻す(これで検査がビルド時に実行される)

これによりCI/CDパイプラインでも同じnull検査が実行され、NPEを含むコードがデプロイされなくなる仕組みが完成します。

ステップ4:チーム全体に強制する(プロジェクトスコープ設定)

  1. プロジェクトルートに .idea/inspectionProfiles ディレクトリを作成
  2. その中に Project_Default.xml ファイルを配置し、以下を記載:
Xml
<component name="InspectionProjectProfileManager"> <profile version="1.0"> <option name="myName" value="Project Default" /> <inspection_tool class="ConstantConditions" enabled="true" level="ERROR" enabled_by_default="true" /> </profile> </component>
  1. バージョン管理(Git)に含めることで、プルした瞬間から全メンバーが同じ厳格設定を利用します。

ハマった点と解決策

問題1:Warningレベルでは開発者が無視してしまう

解決策:ステップ1でSeverityをErrorに上げ、かつ「Treat warnings as errors」オプション(Maven/Gradleのコンパイラフラグ)を有効化。これでCIが失敗し、無視できなくなる。

問題2:既存プロジェクトでは設定が反映されない

解決策.idea/inspectionProfiles をGit管理に追加後、各メンバーに「Invalidate Caches / Restart」を実行してもらう。キャッシュが古くて新プロファイルが読み込まれない事象を回避できる。

問題3:LombokやMapStructなどアノテーションプロセッサで誤検知

解決策SettingsBuild, Execution, DeploymentCompilerAnnotation Processors で「Obtain processors from project classpath」にチェックを入れ、processor生成コードに対して検査をスキップする設定を追加:

Generated sources directory: target/generated-sources/annotations

まとめ

本記事では、IntelliJ IDEA標準機能のみでJavaコードをnull安全にする方法を解説しました。

  • 検査レベルをErrorに引き上げ、即座にコンパイルを失敗させる
  • デフォルトプロファイルに保存し、今後のプロジェクトに自動継承
  • ビルド時検査とCI連携で、NPEをデプロイ前にゼロにする
  • プロジェクトスコープでチーム全体に強制

この手法により、外部ライブラリを増やさずとも、JavaでNullPointerExceptionを本質的に減らせるようになります。
次回は、Java 17以降のNullPointerException詳細メッセージと組み合わせたデバッグ効率化について深掘りします。

参考資料