小さく始めるKotlin

お疲れ様です、最近AndroidアプリでKotlinを書いていて、IDEにおんぶにだっこの町田です。
この現状を打破すべくなるべく小さく環境構築を行ってみたいと思います。
この記事では
– Kotlinコンパイラとランタイムによる実行
– Gradleによる外部ライブラリを含めた実行
をやっています。
Kotlin標準のみで実行
まずは、コンパイラをインストールします。
OS毎にパッケージマネージャを使ってインストールします。
// MacOS
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install kotlin
// Unix系OSだとSDKManを使えるみたいです。
$ curl -s https://get.sdkman.io | bash
$ source .sdkman/bin/sdkman-init.sh
$ sdk install kotlin
// インストールが完了すると以下の4つのコマンドが追加されます。
// kotlin-dce-js kotlinc kotlinc-js kotlinc-jvm
ここで追加されたコマンドはすべてコンパイルコマンドで、後ろについてる-js
などで実行環境が選べます。今回はkotlinc
を使用します。
Kotlinのファイルを作成
// hello.kt
fun main () {
println("Hello, World")
}
kotlinc
コマンドを使ってコンパイル
$ kotlinc hello.kt -include-runtime -d hello.jar
$ kotlin hello.jar
// Hello, World
これで、Kotlinプログラムの実行は出来ました。
実行はできましたが正直こういった単純な物ならばKotlin Playgroundでも十分まかなえます。
次に外部ライブラリを含めたKotlinプログラムの実行を行っていきます。
外部ライブラリを含めて実行する。
外部ライブラリの依存解決にはビルドツールのGradleを使用します。
まずはインストールを行います。
// MacOS
$ brew install gradle
// Unix系 SDKMan
$ sdk install gradle
次にプロジェクトフォルダを作成し、GradleKotlinDSLで初期化します。GradleKotlinDSLを使用することでGradleのビルドスクリプトをKotlinで書けます。
$ mkdir kotlin-gradle
$ gradle init --dsl kotlin
初期化後のファイル構成はこんな感じになります。
今回はKotlin1.3から使用可能なCoroutineを使用してみます。
build.gradle.kts
を以下の様に編集します。
import org.jetbrains.kotlin.gradle.dsl.Coroutines
plugins {
application
kotlin("jvm") version "1.3.0"
}
application {
mainClassName = "sandbox.HelloCoroutinesKt"
}
dependencies {
compile(kotlin("stdlib"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1")
}
repositories {
jcenter()
}
パッケージフォルダを作成します。
$ mkdir src/main/kotlin/sandbox/HelloCoroutinesKt
次に実行するファイルを作成します。
package sandbox
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
// 非同期に実行されます。
val job = GlobalScope.launch {
val result: String = async {
delay(1000)
// Kotlinではブロックの最後の行がreturnされます
"World"
}.await()
print(result)
}
fun main(args: Array) {
// 非同期処理をスタート
job.start()
print("Hello, ")
// 非同期処理を待つためにsleepしています
Thread.sleep(2000)
}
ここまできたら後は実行するだけです。
$ ./gradlew run
// Hello, World
最後に
Android開発をしているとプロジェクト作成などをすべてAndroidStudioやIntelliJIDEAといったIDEがやってくれます。今回自分でGradleプロジェクトの初期化と実行まで行いIDEが何をしているのか少しわかった気がします。また、手軽に壊せる実行環境を手に入れられたので、Kotlinいじりが更に楽しくなりそうです。
参考
Working with the Command Line Compiler – Kotlin Programming Language
gradle/kotlin-dsl: Kotlin language support for Gradle build scripts