Androidアプリを開発する言語をどれにすべきか?
僕はこれまで、JavaScript環境(Sencha Touch+Cordova)でアプリを作っていたんですが、パフォーマンスやOSの最新機能のキャッチアップという点で不満を感じ始めました。
でも、Javaで書くのは冗長な感じがしたので、別の方法がないか検討してみました。
要件
最初に自分なりの要件を挙げておきます。
- 生成したアプリのパフォーマンスが高い。
- 生産性が高い。
- ライブラリが充実している(サードパーティも含めて)。
これらの要件から、やはりクロスプラットフォーム系の開発環境(Cordova/PhoneGapやXamarinなど)とJavaは除外しました。
その上で、以下の要件を追加しました。
そうすると、JVM上で動作する言語のどれかということになります。
あと、必須要件ではないですが、後でiOSアプリも作ると思うので、iOSアプリへのポーティングがやりやすいといいですね。
以降で、これらの要件にマッチする候補を検討したいと思います。
ちなみに、僕は以下の言語をどれも使ったことがないですし、Javaすらほとんど経験がありませんので、そのレベルでの評価と考えてください。
Scala
今のトレンドからすると、まず思い浮かぶのは Scala です。
ざっと調べた感じでは、コードをかなり簡潔に書けそうです。
Scalaにすれば、将来的にサーバー側もScalaでいけるので、その点でもメリットがありますね。
ただ、残念なことに、Androidではそれなりにオーバーヘッドがあるみたいです。
- java - Perfomance of Scala for Android - Stack Overflow (2013/9)
- 第63回 アドテクスタジオのエンジニアに聞くScalaの魅力:サイバーエージェントを支える技術者たち|gihyo.jp … 技術評論社 (2014/6)
エントリー機や Android One では厳しそうなので、今回は見送ることにします。
Androidのサポートが改善してきたら、また検討したいと思います。
Groovy
Groovy はスクリプト言語だと思っていたので、当初は眼中になかったのですが、2014年にAndroidにも対応し、静的コンパイルを行えばパフォーマンスも問題ないようですね。
- GroovyがAndroid上で実行可能に - InfoQ (2014/6)
ただ、Groovyの静的コンパイルには少し問題もあるようですね。
- Groovyは衰退しました #gadvent2012 - うさぎ組 (2012/2)
今は改善しているのかもしれませんが、ベースが動的言語という点が引っかかるので(上記のInfoQの記事でも苦労したと言っている)、見送ることにします。
Kotlin
さて、あとは比較的マイナーなJVM言語が残ります。
その中で Kotlin が一番良さそうに思えました。
2011年に登場した比較的若い言語ですが(Scalaは2003年)、そのため、いろいろな言語のいいとこ取りをしたような感じですね。
ざっと見たところでは、Javaよりも簡潔な記述ができ、Scalaほど関数型プログラミングに寄っていないので、ほどよい言語仕様のように感じます。
特徴的なのは、型やヌル値の扱いが厳密なことですね。いい感じです。
Android用のライブラリも揃っているようです。
また、文法がSwiftにかなり似ているので、iOS版を作る場合にも、ビジネスロジックのポーティングは比較的楽にできそうです。
唯一の難点は、まだV1.0が出ていないことですね。
まだ言語仕様が揺れているので、その点は要注意です。
結論
ということで、ひとまずKotlinでやってみることにします。
なお、KotlinはJavaと共存できるので、最悪(Kotlin自体に致命的なバグがある場合など)そこだけJavaで書くことにするつもりです。