意外と簡単だった Kotlin Scripting
公式のチュートリアルを見ると、IDEA を入れたり Gradle を持ち出したりと、全然お手軽に使えなさそうで敬遠していた Kotlin Scripting。スクリプト言語のようなノリで使えないか試してみたところ、そういう使い方もできそうだったのでメモ。
CLI コンパイラを使ってスクリプトとして実行する際のドキュメントは公式ドキュメントの別のページにあった。
> brew install kotlin
println("Hello, World!")
> kotlinc -script hello.ktsHello, World!
ここまでが簡単なのは知っていたが、@file:Repository
や @file:DependsOn
といったアノテーションでサードパーティのライブラリを使うためには、最初に挙げたチュートリアルのように Gradle を使うしかないと思っていた。しかし、どうやら CLI でも kotlin-main-kts というものを使って依存関係を記述できるらしい。
ポイントは拡張子を .main.kts
にすること。.kts
では kotlin-main-kts の機能を利用できない。ついでに、さっきまでは公式のドキュメントに習って kotlinc -script
としていたが、単に kotlin
コマンドでいけるらしい。
@file:Repository("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")@file:DependsOn("org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.3")
import kotlinx.html.*import kotlinx.html.stream.*import kotlinx.html.attributes.*
val addressee = "World"
print( createHTML().html { body { h1 { +"Hello, $addressee!" } } })
> kotlin hello.main.kts<html> <body> <h1>Hello, World!</h1> </body></html>
ドキュメントからのコピペではなく、自分の使いたい好きなライブラリでもいける。
@file:Repository("https://repo1.maven.org/maven2/")@file:DependsOn("it.unimi.dsi:fastutil:8.5.8")
import it.unimi.dsi.fastutil.ints.IntArrayList
val list = IntArrayList() .apply { add(1) add(2) add(3) }
println("list=$list")
> kotlin fastutil.main.ktslist=[1, 2, 3]
これなら使用感としてスクリプト言語に近いのではないだろうか。サードパーティのライブラリを使うのにあたって、依存の記述まで1ファイルで完結しているのはむしろ他のスクリプト言語でも真似してほしいくらい。
取っ掛かりとしては1ファイル作るだけでやさしくなったものの、ある程度書き進めていくと、やっぱり IDEA で書いたほうが早いんじゃないかという気持ちになってくる。ただ、そうなってからプロジェクトを作るというのも全然あり。
> idea fastutil.main.kts
idea
コマンドで開いて、Project Structure で SDK の設定さえしてあげれば、build.gradle
とかは用意しなくてもすぐに実行できる。当然 .idea
ディレクトリが切られていろいろファイルが作られるものの、最悪その辺は捨ててもすぐ実行可能な状態に持っていけるので、.main.kts
ファイルで完結する簡単さを台無しにしてしまうというほどではないかな。
Kotlin はスクリプト言語にそこまで劣らない記述量で、特に IDEA だと強力な補完も効くので、書き捨てじゃなくまた使いそう、くらいの温度感のスクリプトには Kotlin Scripting を使ってもよいかもと思っているところ。