この記事は株式会社ヘンリーAdvent Calendar 2023の18日目の記事です。昨日は@u-ichiによるヘンリーに入社しました(8ヶ月前に)でした。
みなさん、こんにちは。株式会社ヘンリーで開発者としてはたらいてるわくわくです。今日は Kotlin Scripting についてご紹介となぜ使うのかということについて軽くご紹介させていただきたいです。
Kotlin Scripting
kotlinlang.orgの説明によると以下のように書かれております。
Kotlin scripting is the technology that enables executing Kotlin code as scripts without prior compilation or packaging into executables.
事前にコンパイルしたりしなくてもKotlinコードをスクリプトとして実行できますよーって話ですね。
なるほどなるほど。サクッとスクリプト書きたいな~みたいなときに使えそうですね。
複数のプログラミング言語を扱うということ
ちょっと話はずれますが、みなさんはいくつのプログラミング言語を書くことができますか?レベルの差はあれど、複数の言語を読み書きできるよという方も少なくはないと思います。
たとえばヘンリー社内では、Kotlin, TypeScriptが多く書かれておりますが、簡単なスクリプトについてはRubyやPythonを利用する方もいます。
しかし私は、頭を切り替えることが苦手なのですぐにほかの言語に頭を切り替えてささっと書くことが苦手です。バックエンド(Kotlin)とフロントエンド(TypeScript)を行き来しているときなんかは TypeScript のコードに val
と書き、Kotlinのコードには const
と書いてしまうポンコツっぷりです。
そんな私がサクッとスクリプトをRubyやほかの言語で書くのはできれば避けたく、Kotlin Scriptingのようなものが提供されていることはすごくうれしく思います。
ミニマムサンプル
話を戻しましょう。必要なものをインストールしてミニマムサンプルを実行してみます。
必要なこと
- Kotlinのインストール
- SDKMAN! でも Homebrew でもなんでもかまいませんが Kotlin をインストールしてください。
Hello, World! する
.kts
という拡張子でファイルを保存します。ここでは hello.kts
としましょう
println("Hello, World!")
以下のように実行する
> kotlin hello.kts
Hello, World!
Hello, Worldできました。便利!ほかには何もいりません。
ライブラリを使おう
単純に Kotlin を使ってサクッとスクリプトを作れるだけでも便利ですが、使い慣れたライブラリを利用することも簡単です。
今度はファイル名を .main.kts
という拡張子で保存しましょう。ここでは script.main.kts
としましょう。
OkHttpを使って適当なGETリクエストをなげてみます。https://httpbin.org/anything
はリクエストの内容をそっくりそのままJson形式で返してくれます。
@file:Repository("https://repo1.maven.org/maven2/")
@file:DependsOn("com.squareup.okhttp3:okhttp:4.11.0")
import okhttp3.OkHttpClient
import okhttp3.Request
val client = OkHttpClient()
.newBuilder()
.build()
val request = Request.Builder().url("https://httpbin.org/anything")
.get()
.build()
val response = client.newCall(request).execute()
println(response.body?.string())
> kotlin script.main.kts
たぶんここになんか知らのJsonが帰ってきます。
あとほんの少し便利にする
どうでしょうか?以上で「お、なかなかいけるやん Kotlin Scripting」って思ってくれたかと思います。でも
いや~毎回 kotlin xxx.kts
ってするのめんどくさいな~って人いらっしゃいますよね。はい、shebang を指定しましょう。いい感じに実行できます。
前述の script.main.kts に shebang を追加しましょう。
追加する shebang は #!/usr/bin/env kotlin
です。
#!/usr/bin/env kotlin // 今回追加したshebang
@file:Repository("https://repo1.maven.org/maven2/")
@file:DependsOn("com.squareup.okhttp3:okhttp:4.11.0")
import okhttp3.OkHttpClient
import okhttp3.Request
val client = OkHttpClient()
.newBuilder()
.build()
val request = Request.Builder().url("https://httpbin.org/anything")
.get()
.build()
val response = client.newCall(request).execute()
println(response.body?.string())
> chmod +x script.main.kts
> ./script.main.kts
さっきと同じ結果が表示されるはず。
どうですか?結構便利じゃないですか?知らなかった人はぜひ使ってみてくださいね。
おわりに
これで良い感じにスクリプトをかけるようになりました。難点としてはエディタがやっぱりIntellijがないとしんどいなというところですね。気軽にスクリプトかくぞ~の気持ちでIntellijを立ち上げるのはちょっと重い。。けどまぁ受け入れましょう。
以上!この後のアドベントカレンダーもお楽しみください。