Androidアプリを開発する言語をどれにすべきか?

僕はこれまで、JavaScript環境(Sencha Touch+Cordova)でアプリを作っていたんですが、パフォーマンスやOSの最新機能のキャッチアップという点で不満を感じ始めました。

でも、Javaで書くのは冗長な感じがしたので、別の方法がないか検討してみました。

要件

最初に自分なりの要件を挙げておきます。

  • 生成したアプリのパフォーマンスが高い。
  • 生産性が高い。
  • ライブラリが充実している(サードパーティも含めて)。

これらの要件から、やはりクロスプラットフォーム系の開発環境(Cordova/PhoneGapやXamarinなど)とJavaは除外しました。

その上で、以下の要件を追加しました。

  • 言語や開発環境に不具合があった場合、Javaでの開発に戻ることが容易。Java共存できるとベスト。

そうすると、JVM上で動作する言語のどれかということになります。

あと、必須要件ではないですが、後でiOSアプリも作ると思うので、iOSアプリへのポーティングがやりやすいといいですね。

以降で、これらの要件にマッチする候補を検討したいと思います。

ちなみに、僕は以下の言語をどれも使ったことがないですし、Javaすらほとんど経験がありませんので、そのレベルでの評価と考えてください。

Scala

今のトレンドからすると、まず思い浮かぶのは Scala です。

ざっと調べた感じでは、コードをかなり簡潔に書けそうです。

Scalaにすれば、将来的にサーバー側もScalaでいけるので、その点でもメリットがありますね。

ただ、残念なことに、Androidではそれなりにオーバーヘッドがあるみたいです。

エントリー機や Android One では厳しそうなので、今回は見送ることにします。

Androidのサポートが改善してきたら、また検討したいと思います。

Groovy

Groovyスクリプト言語だと思っていたので、当初は眼中になかったのですが、2014年にAndroidにも対応し、静的コンパイルを行えばパフォーマンスも問題ないようですね。

ただ、Groovyの静的コンパイルには少し問題もあるようですね。

今は改善しているのかもしれませんが、ベースが動的言語という点が引っかかるので(上記のInfoQの記事でも苦労したと言っている)、見送ることにします。

Kotlin

さて、あとは比較的マイナーなJVM言語が残ります。

その中で Kotlin が一番良さそうに思えました。

2011年に登場した比較的若い言語ですが(Scalaは2003年)、そのため、いろいろな言語のいいとこ取りをしたような感じですね。

ざっと見たところでは、Javaよりも簡潔な記述ができ、Scalaほど関数型プログラミングに寄っていないので、ほどよい言語仕様のように感じます。

特徴的なのは、型やヌル値の扱いが厳密なことですね。いい感じです。

Android用のライブラリも揃っているようです。

また、文法がSwiftにかなり似ているので、iOS版を作る場合にも、ビジネスロジックのポーティングは比較的楽にできそうです。

唯一の難点は、まだV1.0が出ていないことですね。

まだ言語仕様が揺れているので、その点は要注意です。

結論

ということで、ひとまずKotlinでやってみることにします。

なお、KotlinはJava共存できるので、最悪(Kotlin自体に致命的なバグがある場合など)そこだけJavaで書くことにするつもりです。