1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

0.初めに

※この記事には筆者の思想が含まれています。

新しくAndroidアプリを作ろうとすると、最初にぶつかるのが「Kotlinにすべきか、Javaのままでいいのか」という問題だ。今さら聞きにくい気もするが、実際まだこれで悩んでいる人は多い。

先に言ってしまうと、新規開発ならKotlinで間違いない。Googleが2017年にKotlinを公式サポート言語に追加し、2019年のGoogle I/Oで「Kotlin First」を打ち出してから、もうかなりの時間が経った。今ではAndroidチーム自身もKotlinで作っていて、Google マップやGoogle Home、Google Driveなど70以上の自社アプリがKotlinベースになっている。Jetpackの新しいライブラリやサンプルコードも、基本的にKotlinが前提だ。

ここでは、なぜそうなったのか、Javaと比べて何が違うのか、そして今でもJavaを選ぶ理由が残っているケースについて書いておく。

1.何がそんなに違うのか

一番よく言われるのはNull安全性の話だ。Javaを書いていると、ある日突然NullPointerExceptionでアプリが落ちる、というのはよくある事故だが、Kotlinでは型の時点でnullを許すかどうかを区別する。

val name: String   // nullは入らない
val name: String?  // nullも入れられる

これだけでコンパイラがnull関連のミスをかなり拾ってくれる。Google自身も、Kotlinを使ったAndroidアプリはJavaのみのアプリよりクラッシュ率が低いというデータを公開している。Google Homeチームの例では、新機能をKotlinに移行したことでコードベースが3割ほど縮み、NPEによるクラッシュも3割減ったという報告もある。

コード量についても、同じことをするのにKotlinの方が短く書けることが多い。例えばユーザーを1人作るだけなら、

User user = new User("Alice", 20);
val user = User("Alice", 20)

くらいの差で済む話だが、これがプロジェクト全体になると、data classや型推論、拡張関数、ラムダ式といった機能のおかげで、ボイラープレートの差はもっと効いてくる。

非同期処理も大きい。API通信やDB処理、ファイル操作などで非同期コードを書く機会は多いが、Kotlinならコルーチンを使ってこう書ける。

val user = api.getUser()

見た目は同期処理とほとんど変わらない。スレッド管理やコールバックの入れ子に苦しめられることが減る分、後から読む人にとっても保守しやすくなる。

そしてもう一つ大きいのがJetpack Composeだ。今のAndroid UI開発は、XMLでレイアウトを組む昔のやり方から、Composeへの移行がかなり進んでいる。コード量が減る、UIとロジックを一体で書ける、プレビューですぐ確認できるといったメリットがあり、新規プロジェクトでは採用するのがほぼ標準になってきた。ただComposeはKotlinベースで設計されているため、これを使うにはKotlinが前提になる。

2.Kotlin Multiplatformはどこまで来ているか

AndroidだけでなくiOSやデスクトップ、Webまでロジックを共有できるKotlin Multiplatform(KMP)も、ここ数年で状況がかなり変わった。以前はロジックだけ共有してUIは各プラットフォームでネイティブに書く、というのが安全策だったが、Compose MultiplatformのiOS対応が実験段階を抜けて、UIまで含めて本番運用するプロジェクトが増えてきている。完全に「1つのコードで全部動く」というほど万能ではないし、複雑な処理ではネイティブ実装に頼る場面も残っているが、選択肢として現実的になったのは確かだ。これからKotlinを学ぶなら、合わせて押さえておく価値がある分野だと思う。

3.それでもJavaを選ぶ場面

ここまで読むとKotlin一択に見えるかもしれないが、Javaが不要になったわけではない。

一番分かりやすいのは、すでに数十万行、数百万行というJavaのコードベースを抱えているケースだ。これを全部Kotlinに書き換えるコストは普通に見合わない。だから「既存部分はJavaのまま、新しく書く機能はKotlinで」という形で少しずつ移行していくのが現実的な進め方になる。

チーム全体がJavaに慣れていて、短期間で結果を出さなければいけない事情がある場合も、無理にKotlinへ切り替えるよりJavaを続けた方がいいことはある。とはいえ長い目で見れば、いつかKotlinへの移行を検討するタイミングは来ると思っておいた方がいい。

幸い、KotlinとJavaの相互運用性は高い。同じプロジェクトの中に両方混ぜて書けるし、Javaのライブラリはそのまま呼べる。KotlinからJavaのコードを呼ぶのも、逆にJavaからKotlinを呼ぶのも問題ない。Android StudioにはJavaコードをKotlinに変換してくれる機能もあるので、移行のハードル自体は思っているより低い。

4.終わりに

新規でAndroid開発を始めるなら、軸になるのはKotlin、Jetpack Compose、コルーチン、そして余裕があればKotlin Multiplatformあたりだろう。一方で、Javaの知識が無駄になることもない。企業の既存システムでは今でもJavaが現役で動いているし、相互運用性のおかげで両方を使い分けながら開発するチームも多い。

新規ならKotlin、既存資産はJavaも活かしながら、というのが今のところ一番現実的な答えだと思う。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?