最近KotlinでAndroidアプリを作るといい感じという話をちらほら聞くようになってきていましたが、先月Kotlinの1.0が出たということで試しに軽く触ってみました。せっかくなので手順をメモしておきます(Qiita投稿練習も兼ねて)。
Kotlin 1.0 Released: Pragmatic Language for JVM and Android
いるもの
基本的に、JDK, Android SDKそしてAndroid Studioと通常のAndroid開発で使用する環境があればKotlinをすぐ試せます。 既存の開発環境がそのままつかえるのはいいですね。今回はAndroid Studio 1.5.1で試しています。
開発環境準備
以下の順にすすめていけばとりあえずKotlinでAndroidアプリをビルドできるようになります。
- Android StudioのKotlinプラグインインストール
- 新規プロジェクトの作成(この時点ではJavaコードです)
- JavaからKotlinへのコード変換
- Kotlinビルドのための設定
上記のセットアップにつきましては、以下の投稿が非常に参考になりますので、こちらでは説明は割愛したいと思います。
KotlinでAndroid
【Kotlin】AndroidでHello World
上記の手順を実施後に、Kotlin Android Extensionsをつかえるようにするためにbuild.gradleに以下のようにapply plugin: 'kotlin-android-extensions'
の一文を追加しておきます。(自分はこれで少しはまりました。もうKotlinビルド設定の時に合わせて自動で追加してくれてもいいのではないかと思いますが・・・)
Using Kotlin Android Extensions
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
(以下省略)
サンプルアプリ実装(インストールアプリ一覧の表示)
試しに、端末にインストールされているアプリ名のリストを表示して、アプリ名をタップするとアプリ名をトースト表示するだけの簡単なアプリを作ってみました。
以下がコードになります。初期コードからほんの数行追加しただけでできてしまいました。まさかこれだけでできるとは思いませんでした・・・
package org.sheep.kotlinapplist
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listView.adapter =
ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
packageManager.getInstalledApplications(0).map { it.loadLabel(packageManager).toString() })
listView.onItemClickListener =
AdapterView.OnItemClickListener { parent, view, pos, id ->
Toast.makeText(this, parent.getItemAtPosition(pos) as String, Toast.LENGTH_SHORT).show()
}
}
}
以下解説という程でもないですが、便利だと思われるところについて書いてみたいと思います。
- widgetはリソースIDを変数名としてそのまま呼び出せる
上記サンプルのlistView
のように、基本的にリソースIDを変数名としてそのまま呼び出せてしまいます。findViewById()どころか変数定義すら不要です。
- PackageManagerも簡単に呼び出せる
上記サンプルですとpackageManager
という変数名で呼び出すことができます。こちらもgetPackageManager()の呼び出しが不要です。
- Java8でないと使えないような機能がつかえる
これはやはりKotlinを使う一番のメリットではないでしょうか。上記のサンプルでもラムダ式を使っています。また、map()といったコレクションメソッドもありますので、それらを使うことで実装がさらにすっきりしています。
感想
当初は、便利とはいえまあそこそこコードは書かないといけないのでは無いかと思っていたのですが、実際に作ってみるとあまりのコード量の少なさに驚きました。今回は小さなアプリでしたのでまだKotlinの真の素晴らしさを体感するまでには至っていないかとは思いますが、今後もぜひ使っていきたいですね!