サーバーサイドでもそろそろ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を選択すると、下記の画面が開きます。
Update channelでStableが選択されています。
このプルダウンからEarly Access Preview 1.3を選択し、Installボタンを押します。
インストールが完了すると Plugin will be activated after restart
と表示されるので、IntelliJ IDEAを再起動します。
これで起動後、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にもなったし)、また色々試したら書いていきたいと思います。