小さく始めるKotlin

Blog Single

お疲れ様です、最近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

Posted by MachidaMamoru
typescriptとAngularが好き、最近Dapps開発にハマっています。

Other Posts: