オープンソースプロジェクト
uber/NullAway avatar
uber/NullAway

NullAwayでJavaのnull契約をコンパイル時に確認する

ビルド時のオーバーヘッドを低く抑えて、Java コード内の NullPointerExceptions (NPE) を排除するのに役立つツール。

スター 4,104フォーク 369JavaMIT
GitHub

ひと目でわかる

これは何?
JDK 17、Error Prone、Nullable注釈を組み合わせ、Javaの参照解除をローカルな型検査で拾うNullAwayの導入範囲を整理します。
誰に向いている?
NullAwayでJavaのnull契約をコンパイル時に確認するは、READMEに示された構成を自分の環境で検証できる開発者やチームに向きます。文書だけで性能、互換性、運用上の安全性まで保証されたと考える利用者には向きません。
商用利用できる?
できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。直近 1 日以内に新しいコミットがあります。
何の言語で書かれている?
主に Java です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

Nullable注釈を検査の入口にする

uber/NullAway の README はプロジェクトを「A tool to help eliminate NullPointerExceptions (NPEs) in your Java code with low build-time overhead」と説明しています。ここではリポジトリで確認できる事実だけを整理します。star 数やバッジは注目度の手掛かりであり、品質の証明ではありません。「NullAway: Fast Annotation-Based Null Checking for Java [」には次の説明があります。NullAway is a tool to help eliminate NullPointerExceptions (NPEs) in your Java code. To use NullAway, first add @Nullable annotations in your code wherever a field, method parameter, or return value may be null.。これは範囲の説明であり、本番検証の結果ではありません。

NullAwayは、注釈のないJava全体を魔法のように安全に変える製品ではありません。READMEの説明では、フィールド、メソッド引数、戻り値に、nullになり得る場所をNullableとして記すことが最初の作業です。検査はその情報を前提に、参照を解除する箇所を型に基づいて局所的に調べます。既存コードの注釈方針が曖昧なら、ツールの導入より先に境界を決める必要があります。

JDK 17とError Proneが決める前提

README の「Installation」にある内容から、用途が合うかを先に判断できます。READMEにはこの機能の具体的説明がありません。。目的が違うなら、人気だけで採用する理由にはなりません。プロジェクト名やコマンドは原文のまま残し、一次資料へ戻って用語を確認できるようにしています。 README には次の確認可能な項目もあります。READMEにはこの機能の具体的説明がありません。。初回テストの材料にはなりますが、実際の環境での確認を省略する理由にはなりません。

READMEはビルド時間のオーバーヘッドを通常10%未満と自称しています。この数値は手元のプロジェクトで再測定すべきで、コード量、Error Proneの他の検査、アノテーションプロセッサーで変わります。まずNullAwayなしとありのJavaCompile時間、警告数、失敗したファイルを同じJDKで記録し、毎回のビルドに置けるかを判断します。

AnnotatedPackagesで検査範囲を固定する

動作の説明は「Overview」など複数の箇所に分かれています。確認できる情報は次の通りです。NullAway requires that you build your code with JDK 17 or higher and Error Prone for more details.。書かれていない構成、性能、セキュリティを推測で補いません。導入時はディレクトリ、設定ファイル、release 履歴を確認してください。

Gradleではnet.ltgt.errorproneプラグイン、com.uber.nullaway:nullaway、org.jspecify:jspecify、Error Prone本体を依存関係へ追加します。NullAwayをERRORにする場合はAnnotatedPackagesかOnlyNullMarkedのどちらか一つを指定する必要があります。設定を省略したままでは検査対象の境界が曖昧になり、導入結果を比較できません。

GradleのJavaCompileへ組み込む

初回導入は README の入口から始めます。確認できるコマンドは次の通りです。

plugins { // we assume you are already using the Java plugin id "net.ltgt.errorprone" version "<plugin version>" }

dependencies { errorprone "com.uber.nullaway:nullaway:<NullAway version>"

// Some source of nullability annotations; JSpecify recommended, // but others supported as well. api "org.jspecify:jspecify:1.0.0"

errorprone "com.google.errorprone:error_prone_core:<Error Prone version>" }

import net.ltgt.gradle.errorprone.CheckSeverity

tasks.withType(JavaCompile) { opti

実行可能なコマンドがない場合は手順を作らず、「Installation」で依存関係、待受ポート、初回設定を確認します。

非Android Javaの例では、JavaCompileのoptions.errorproneにNullAwayの検査レベルとパッケージ設定を渡します。テストコードを除外する例もREADMEにありますが、除外は未検査領域を作ります。除外パス、対象パッケージ、Nullableの出所をリポジトリの設定ファイルに残し、レビュー時に確認できる状態にします。

Androidと生成コードで変わる境界

日常運用は公式文書の範囲に限ります。「Java (non-Android)」にはTo integrate NullAway into your non-Android Java project, add the following to your build.gradle file:とあります。設定、環境変数、権限、データ保存先は明記されたものだけを扱います。未記載の既定値は隔離環境で確認し、戻せる設定を保存してください。 同じ資料にはREADMEにはこの機能の具体的説明がありません。ともあります。

DaggerやAutoValueのようなプロセッサーが同じ名前空間へコードを生成する場合、生成物までERROR検査にかかることがあります。READMEはError Proneの-XepExcludedPathsで生成ディレクトリを除外する方法を示しています。Dagger 2.12未満との相互作用にも言及しているため、生成コードを含むビルドで診断の発生元を分けて確認します。

JSpecify、Guava、既存警告の扱い

制約も確認が必要です。現在の資料からは、uber/NullAway の互換表、性能基準、サービス保証、長期サポートを確認できません。README の記載は「Let's walk through this script step by step. The plugins section pulls in the Gradle Error Prone plugin for Error Prone integration.」です。不明点は採用記録の検証項目として残し、断定に変えないでください。

AndroidではGradle Error Proneプラグイン3.0.0以降がAndroidをサポートしないという注意があります。サンプルアプリのbuild.gradleを出発点にしても、プロジェクトごとの調整が必要です。JSpecifyを使わずandroidx.annotation.Nullableを使う経路も説明されているので、非Android設定をそのままコピーしないことが重要です。

導入前に失敗を分類する

ライセンスはメタデータと LICENSE に基づき、SPDX は MIT です。再配布や改変の条件を確認する情報であり、安全審査の代わりではありません。認証情報、公開範囲、ログ、依存ライブラリの扱いは別途確認が必要です。

採用前の確認は、JDK 17以上とError Prone 2.36.0以上を固定し、最小のGradleプロジェクトでNullable戻り値、未注釈の引数、生成コード、テスト除外を一つずつコンパイルすることです。次にNullAway 0.14.0と現在の依存版で診断差を比較し、ERRORにする範囲と既存警告の扱いを決めます。

編集部の結論

NullAwayでJavaのnull契約をコンパイル時に確認するは、READMEに示された構成を自分の環境で検証できる開発者やチームに向きます。文書だけで性能、互換性、運用上の安全性まで保証されたと考える利用者には向きません。導入前に、この記事で挙げた固有のコマンドと入力を小さな隔離環境で実行し、ログ、出力、失敗時の状態を記録してから対象範囲を広げてください。

公式情報源

  1. Official README
  2. Project repository
  3. Release notes
コミュニティノート

コミュニティノート