タケハタのブログ

プログラマの生き方、働き方、技術について雑多に書いていくブログです。

そろそろKotlin Coroutinesを触るための前準備

サーバーサイドでもそろそろKotlinのCoroutinesを触ってみようと想い、今更ながらKotlin1.3を動かそうとしたところ、若干手こずったので備忘録として書いておきます。
正式版になったらあんまり考えないで最新版使っておけばいいけど、Stableじゃないバージョンとか使おうとしたら同じようなことになりそうなので。

参考資料としては下記を github.com

注:これを書こうと思ってるうちにkotlinx-coroutines-coreが1.0.0-RCになったので最新ではまた変わると想います

プロジェクトの作成とかは省きますが、普通に最新版のIntelliJ IDEAでKotlinのGradle Projectを作ってもらえれば試せます。

Gradleの設定

build.gradleは下記のようになりました。

group 'KotlinCoroutinesSample'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.3.0-rc-190' // ①Kotlinのバージョンを1.3のRC版に

    repositories {
        jcenter()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

repositories {
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.30.2-eap13" // ②Coroutinesの依存関係を追加
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

①Kotlinのバージョンを1.3のRC版に

KotlinのバージョンはRC版の最新に。
最新版はEAPが置いてあるMavenリポジトリを見てもらえれば良いかと。

②Coroutinesの依存関係を追加

1.3を入れただけではCoroutinesは使えないのです。
dependenciesに

compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.30.2-eap13"

を追加します。
ここでKotlinのバージョンとkotlinx-coroutines-coreのバージョンが合ってないのか、エラーになってる時がありました。
一応IntelliJにまかせて修正したら、正しいバージョンに変えてくれてエラーは消えたのでもし起こったらそのように。

あと、前述したように現状はもう1.0.0-RCが出ていて最新ではないのでご注意を。

IntelliJ IDEAでKotlin1.3を認識させる

これでbuildは通るようになるんですが、IntelliJで実行できないです。
Runがそもそも選べない状態になっていると思います。

Preferenceを開き、Languages & Frameworks -> Kotlin Updatesを選択すると、下記の画面が開きます。

f:id:take7010:20181028180738p:plain

Update channelでStableが選択されています。
このプルダウンからEarly Access Preview 1.3を選択し、Installボタンを押します。

f:id:take7010:20181028180802p:plain

インストールが完了すると Plugin will be activated after restart と表示されるので、IntelliJ IDEAを再起動します。

f:id:take7010:20181028180827p:plain

これで起動後、Kotlin1.3を使用したコードの実行ができるようになっています。

動かしてみる

よくある下記のようなコード。

import kotlinx.coroutines.launch

fun main() {
    println("start")
    launch {
        // Coroutineで実行
        println("run coroutine")
    }
    println("end")
}

Kotlin1.3はmain関数にargsを渡すのがオプションとなっているため、引数がいらなければ main() で定義することができます。
そしてlaunchで囲っている部分がCoroutinesです。

このプログラムが動かせれば、Croutineを動かす準備は完了です。

最後に

今回は準備のところまでを書きましたが、サーバーサイドのプログラムでのCoroutinesの使い方もそろそろちゃんと検討しておきたいので(1.0.0にもなったし)、また色々試したら書いていきたいと思います。