Kotlinでアプリ開発を始めるためのAndroidアプリ開発環境構築とREPLの使い方

[株式会社LITALICO](http://litalico.co.jp/)でエンジニアを勤めています水上貴晶です。
『[LITALICO Advent Calendar 2016](http://qiita.com/advent-calendar/2016/litalico)』8日目の記事となります。

Androidアプリ開発をKotlinで始めるための手順とREPL(Read-Eval-Print Loop)の使い方をまとめます。
インストールの手順や画面はAndroid Studio 2.2.2、OS Xを前提として書きます。またAndroid StudioおよびJDKのインストールは済んでいるものとして話を進めます。

Android StudioのインストールやJDKのインストールは下記の記事を参考してインストールをしてみて下さい。
[Androidアプリ 開発環境構築手順 MacOSX編](http://qiita.com/hiesiea/items/9c5e8277bd9dd4efe329)

# 開発環境構築
KotlinでAndroidアプリ開発を行う事はとても簡単でKotlinのプラグインを導入するだけです。
## Kotlinプラグインの導入方法
* 右下にある**Configure**から**Preferences**を選択

![スクリーンショット 2016-11-24 21.21.39.png](https://qiita-image-store.s3.amazonaws.com/0/148185/8c82b42e-65c7-73b3-9dac-cd5805e57c56.png)

* 下図のような画面になるので、左側のリストから**Plugins**を選び、**Install JetBrains plugin...**を選択


![スクリーンショット 2016-11-24 21.22.36.png](https://qiita-image-store.s3.amazonaws.com/0/148185/63737a22-5bd5-5102-61ef-c716791e73fa.png)

* プラグイン選択画面が表示されるので、左上のテキストボックスに**kotlin**と入力
* **Kotlin**を選択しInstallボタンを選択（筆者はインストール済みのためInstallとは表示されていません）


![スクリーンショット 2016-11-24 21.23.28.png](https://qiita-image-store.s3.amazonaws.com/0/148185/1fe03e8f-e1ec-a86d-4cd1-4c2567782431.png)

* ダウンロードとインストールが行われて、インストールが完了したらAndroid Studioを再起動してプラグインを有効化 

# サンプルプロジェクトの作成
Kotlinプラグインがインストール済みAndroid StudioでHello World!を表示させるだけのアプリを作成してみましょう。

## プロジェクト設定
* **Start a new Android Studio project**を選択して、新規プロジェクトを作成

![スクリーンショット 2016-11-26 16.14.29.png](https://qiita-image-store.s3.amazonaws.com/0/148185/7f5b4b33-3ce7-e807-cb08-5407100ffb37.png)

* Application Name、Company Domainを設定

![pc.png](https://qiita-image-store.s3.amazonaws.com/0/148185/edc26ec8-2896-d181-d42a-b8889baa9826.png)


* ターゲットデバイスは**Phone and Tablet**のみチェック


![スクリーンショット 2016-11-26 16.19.53.png](https://qiita-image-store.s3.amazonaws.com/0/148185/eee2f090-1712-77a1-c116-7a3ccc35db7a.png)


* 自動生成してもらうアクティビティは**Empty Activity**を選択


![スクリーンショット 2016-11-26 16.20.06.png](https://qiita-image-store.s3.amazonaws.com/0/148185/0abd181a-bff6-6ed5-f7e5-a1ddb2e731fa.png)


* Activity Name、Layout Nameはデフォルトのまま


![スクリーンショット 2016-11-26 16.20.23.png](https://qiita-image-store.s3.amazonaws.com/0/148185/56f3549e-d650-13c0-6171-c8492d8b0f2c.png)


プロジェクトの設定をまとめたものを以下に表に示します。また、Application NameやCompany Domainはなんでも構いません。Minimum SDK等、適宜お好きな設定にしてください。

| 項目                   | 値               |
|------------------------|------------------|
| Application name       | SampleApp        |
| Company Domain         | sample           |
| Target Android Devices | Phone and Tablet |
| Minimum SDK            | API 17           |
| Activity               | Empty Activity   |
| Activity Name          | MainActivity     |
| Layout Name            | activity_main    |

## プロジェクトの初期状態
プロジェクトを作成すると下図のような状態になると思います。画面に表示されているコードはJavaで記述されたMainActivityのソースファイルなのでKotlinを使用するための設定が必要です。

![スクリーンショット 2016-11-26 16.33.02（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/e9c3d13d-8ddd-49f0-625a-f1a7b6cc89fe.png)

## Kotlinへ変換
Kotlinへの変換を手動で行っても構いませんが、せっかくなのでKotlinプラグインの自動変換機能を使います。

メニューから**Code** -> **Convert Java File to Kotlin File**を選択します。

![スクリーンショット 2016-11-26 16.37.51（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/5c471496-0ec5-57bd-be8e-b2dd293d5261.png)


するとMainActivity.javaがMainActivity.ktに自動的に変換されます。

変換後の画面は下図です。Kotlinのコードになっている事が分かります。

![スクリーンショット 2016-11-26 16.38.19（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/dec710fd-e443-952d-9381-360b950ba880.png)

変換後も、Kotlinソースファイルが配置されているディレクトリが**java**配下のままなので、このディレクトリ名を**kotlin**に変えるとよいと思います。
ディレクトリ名をkotlinに変えるには**build.gradle**の下記の設定が必要です。

```:build.gradle
android {
・
・
・
sourceSets {
        main.java.srcDirs += 'src/main/kotlin'

        //テスト用
        androidTest.java.srcDirs += 'src/androidTest/kotlin'
    }
}
```

build.gradleを修正したら以下の手順を行う事でkotlinでアプリ開発を始める準備が完了します。

* build.gradleを修正すると下図のようにエディタ上部に**Sync Now**と表示されるのでSync Nowをクリック


![スクリーンショット 2016-11-26 16.47.50（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/fd3a4656-b917-b13a-0518-5410b66a0452.png)

* Syncが終了したら、一度Android Studioを再起動
* 再起動するとエディタの上部に**Configure Kotlin**と表示されているので**as Kotlin（Android with Gradle）module**をクリック（再起動しなくてもエディタの上部に**Configure Kotlin**と表示されていたら再起動する必要はありません）


![スクリーンショット 2016-11-26 16.54.45（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/49d9e12a-43fd-9e2c-5eb9-931226386d5c.png)

* 自動的にGradleのビルドファイルに、Kotlinに必要な記述が追記される


![スクリーンショット 2016-11-26 16.57.11（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/f97fbef8-6481-c726-646c-b7fe96455906.png)

## Kotlinで記述したアプリを動かす
これで、すべての準備が整ったのでkotlinで書かれたアプリを実行する事ができます。Android Studioの再生ボタンをクリックしてKotlinで記述されている**MainActivity**をビルドして実行し、エミュレータもしくは実機で確認してみましょう。

![Screenshot_2016-12-01-23-17-31.png](https://qiita-image-store.s3.amazonaws.com/0/148185/f7aba70d-8084-4769-eb85-ae076380edb7.png)



# REPL使い方
## REPLとは
対話型評価環境と言われる、対話的にプログラムを評価・実行し、結果を表示してくれるツールです。
Android Studioでは簡単にREPLの起動が出来ます。

## サンプルクラスのデータ構造
ある記事がもつデータ構造を例にサンプルクラスを定義していきます。
下記に**記事**が持つデータと**ユーザー(作成者)**のデータを整理します。

**記事で使用するデータ**

| 名前    | 説明             |
|---------|------------------|
| id      | ID               |
| title   | タイトル         |
| summary | 概要             |
| user    | ユーザー(作成者) |

**ユーザー(作成者)で使用するデータ**

| 名前    | 説明             |
|---------|------------------|
| id      | ID               |
| name   |名前         |

## サンプルクラスのソースファイル作成
ユーザーは**User**クラス、記事は**Article**クラスとして定義しました。

```kotlin:model/User.kt
data class User(val id: String,
                val name: String)
```

```kotlin:model/Article.kt
data class Article(val id: String,
                   val title: String,
                   val summary: String,
                   val user : User)
```

## REPL起動
Android Studio上で動作するREPLを使用してクラス**User**と**Article**の動作を確認します。Android Studioのメニューから**Tools** -> **Kotlin** -> **Kotlin REPL**を選択（使用するモジュールを選択する必要があった場合は**app**を選択してくだい）

![スクリーンショット 2016-12-01 22.36.18（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/67099617-9035-f846-79e3-5012352daf69.png)

REPL上に**You're running the REPL with outdated classes**というメッセージが出ていた場合は隣に表示されている**Build module 'app' and restart**をクリックして、ビルドとREPLの再起動を行います。

あとはREPL上にコードを書いて**command + Enter**で実行してみましょう。

```kotlin
import sample.sampleapp.model.*

val user = User("1", "Yamada")
user[command + Enter]

User(id=1, name=Yamada)
```

```kotlin
import sample.sampleapp.model.*

val user = User("1", "Taro")
val article = Article("1", "Kotlin開発環境構築", "Kotlin開発環境構築簡単", user)
article[command + Enter]

Article(id=1, title=Kotlin開発環境構築, summary=Kotlin開発環境構築簡単, user=User(id=1, name=Taro))
```

![スクリーンショット 2016-12-01 23.10.17（2）.png](https://qiita-image-store.s3.amazonaws.com/0/148185/7e2f0883-3759-5f7c-f644-54042a4a7a5f.png)

# まとめ
今回はAndroidアプリ開発をKotlinで始めるための手順とREPL(Read-Eval-Print Loop)の使い方をまとめました。Android StudioでKotlinの開発環境構築は簡単に出来るので、ぜひ試してみて下さい。

次回は、[yk_osaka](http://qiita.com/yk_osaka)さんがSendGridについて書いてくれます。