この記事は プロダクト マネージャ、James Lau(@jmslau による Android Developers Blog の記事 "Android Pie SDK is now more Kotlin-friendly" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Java プログラミング言語を使う場合、よく陥りがちな落とし穴に null 参照のメンバーにアクセスしようとして NullPointerException がスローされるというものがあります。Kotlin の型システムには、null を認める型と null を認めない型が組み込まれているので、この落とし穴を避けることができます。この仕組みによって、コードで NullPointerException が起きる可能性を減らし、アプリ全体の質を改善することができます。Kotlin コードが Java プログラミング言語で書かれた API を呼び出す際には、API の null 可能性アノテーションを使って各パラメータや戻り型の null 可能性を判定します。しかし、アノテーションが追加されていないパラメータや戻り型はプラットフォーム型として扱われるので、Kotlin が保証する null 安全性は弱まることになります。
昨日の Android 9 の発表の一環として、新たな Android SDK をリリースしました。この新しい SDK では、よく使われるいくつかの API に null 可能性アノテーションを追加しています。これによって、Kotlin コードが SDK のアノテーション付き API を呼び出す際の null 安全性が保証されます。また、Java プログラミング言語を使っている方でも、Android Studio で null 可能性規約違反をキャッチすることで、アノテーションによる恩恵を受けることができます。

互換性を維持した変更


通常、Kotlin で null 規約違反が起こると、コンパイル エラーになります。しかし、新しくアノテーションがつけられた API と既存のコードの互換性が失われないように、Kotlin コンパイラ チームが提供する内部メカニズムを使って、最近アノテーションがつけられた API であることがわかるようにしています。最近アノテーションがつけられた API である場合、Kotlin コンパイラはエラーではなく警告のみを出力します。この機能には、Kotlin 1.2.60 以降が必要です。
新しく追加された null 可能性アノテーションには警告のみが出力されますが、来年以降の Android SDK で重要度をエラーに引き上げる予定です。この目的は、コードをアップデートする十分な時間を皆さんに提供することです。

「Kotlin に優しい」 SDK の使い方


この機能を使うには、Android Studio で [Tools] > [SDK Manager] を開きます。左側のメニューで [Android SDK] を選び、[SDK Platforms] タブが開いていることを確認します。

Android Studio の [SDK Manager] を使って API レベル 28 用 SDK リビジョン 6 をインストール
[Android 8.+ (P)] をオンにして、[OK] をクリックします。この操作によって、まだインストールされていない場合、Android SDK Platform 28 リビジョン 6 がインストールされます。次に、プロジェクトのコンパイル SDK バージョンを API 28 に設定し、null 可能性アノテーションを含む新しい Android Pie SDK を利用できるようにします。

[Project Structure] ダイアログでプロジェクトの [Compile Sdk Version] を API 28 に変更
Android Studio の Kotlin プラグインが最新でない場合、アップデートが必要になる場合があります。Kotlin プラグインのバージョンが 1.2.60 以降であることを確認してください。これを行うには、[Tools] > [Kotlin] > [Configure Kotlin Plugin Updates] を開きます。
設定が終わると、Android SDK に null 可能性規約に違反するコードがある場合、ビルド時に警告されるようになります。次に示すのは、そのような警告の例です。

Android SDK に最近追加された null 可能性規約に違反するコードがあった場合、Kotlin コンパイラが出力する警告の例
また、Android Studio のコードエディタでも、適切でない null 可能性で Android API を呼び出している部分に警告が表示されます。次に例を示します。

最近 null 不可能な型としてアノテーションが追加された android.graphics.Path API のパラメータに null 参照を渡した場合に表示される Android Studio の警告

Java プログラミング言語での null 可能性アノテーションの利用


Java プログラミング言語のコードも、新しい null 可能性アノテーションの恩恵を受けることができます。デフォルトで、Android Studio は null 可能性規約違反を見つけると、次のように警告としてハイライト表示します。

Java プログラミング言語で書かれたコードの null 可能性規約違反について警告を表示する Android Studio
この検査が有効になっていることを確認するには、IDE の設定ページを開き、[Constant conditions & exceptions] 検査を検索して、この項目がオンになっていることを確認します。

[Settings] の [Inspections] ページで、コード検査項目 [Constant conditions & exceptions] が有効になっていることを確認
Java プログラミング言語では、null 可能性規約違反によってコンパイラの警告やエラーが発生することはありません。null 可能性についての問題は、IDE 内のコード検査によってのみ報告されます。
プロジェクト全体に対してコード検査を実行し、結果をまとめて確認することも可能です。これを行うには、[Analyze] > [Inspect Code…] をクリックします。

次のステップ

Android SDK API のサーフェスはとても広いので、現時点でアノテーションをつけることができているのはわずかな API にすぎません。まだたくさんの作業が残されています。今後の何回かの Android SDK リリースでは、新しい API に確実にアノテーションをつけるとともに、既存の Android API に null 可能性アノテーションを追加する作業も継続する予定です。

私たちは、「Kotlin に優しい」Android SDK や、AndroidXJetpack ファミリーの一部)および Android KTX の null 可能性アノテーションなど、Kotlin デベロッパーのために Android API を改善する作業を続けています。まだ Kotlin を試したことがないという方には、ぜひお試しください。Kotlin は、コードを簡潔にするだけでなく、アプリの安定性向上にも貢献します。
ぜひ Kotlin をご活用ください。

Reviewed by Yuichi Araki - Developer Relations Team