KiはKotlin向けの新しいインタラクティブシェルである。これは、開発者が使用する言語で素早く実験を行い、REPL主導の開発を活用しやすくすることを目的としている。
Kotlinで利用できるインタラクティブシェルはKiだけではない。むしろ、JetBrainsのエンジニアであるPasha Finkelshteynが説明するように、既存のKotlinインタラクティブシェルの制限を打開しようとするものである。
kotlinc
には、オートコンプリートや構文の強調表示はありません。Kotlin REPLは非常に強力ですが、Intelli JIDEAを開く必要があります。これは常に使いやすいものであるとは限りません。
Kiは、KotlinコレクションAPIへのアクセスをシンプルにすることを目的としたオートコンプリートをサポートしている。その1つは外部の依存関係であり、Maven Centralから依存関係をロードしてローカルで利用できるようにする特別な:dependsOn
構造よるものである。もう一つは、型推論であり、任意の式の型を表示できる組み込みのt
コマンドも追加で提供されている。
さらに、ki
は、大きなコードスニペットをより適切に処理するための特別な貼り付けモードを提供する。このモードは、コマンド:paste
を実行することで有効化できる。これにより、REPLはコードのチャンク全体を取り込で、すぐに解釈することができ、また、後で参照することができる。
ki
のもう1つの興味深い機能は、スクリプトのサポートである。これにより、セッションをディスクに保存し、:l
コマンドを使ってロードし直すことができる。スクリプトをロードした後、:ls
コマンドは、関数、クラス、変数などを含む、インポートされたすべてのシンボルのリストを表示する。これは特に、毎回、必要なすべての依存関係をロードする雑務から解放するための助けとなるとFinkelshteynは言っている。
@file:DependsOn("com.GitHub.kittinunf.fuel:fuel:2.3.1")
import com.GitHub.kittinunf.fuel.*
import java.net.*
fun sendGet(address: String) {
val url = URL(address)
with(url.openConnection() as HttpURLConnection) {
requestMethod = "GET" // optional default is GET
println("Sent GET request to URL : $url; Response Code : $responseCode")
inputStream.bufferedReader().use {
it.lines().limit(5).forEach { line ->
println(line)
}
}
}
}
ki
は、プラグインシステムの上に構築されている。そのため、特定のシナリオをカバーするように拡張可能である。実際、:l
、:ls
、:paste
などのすべてのki
コマンドは、プラグインとして実装されている。
最後に、JetBrainsは、Apache Sparkを特別にサポートする専用バージョンのki
も作成した。その主な利点は、起動時にローカルSparkコンテキストを自動的に作成し、Apache Sparkクエリの実行を大幅に高速化することである。