5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社ヘンリーAdvent Calendar 2023

Day 18

みなさんKotlin Scriptingつかってます?

Last updated at Posted at 2023-12-17

この記事は株式会社ヘンリー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を立ち上げるのはちょっと重い。。けどまぁ受け入れましょう。

以上!この後のアドベントカレンダーもお楽しみください。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?