Kotlin の JavaScript サポートを試す

Kotlin 1.1 で JavaScript がサポートされたので、Your first Node.js app with Kotlin – Miquel Beltran – Medium を読みながら試してみました。仕事で JavaScript ばかり書いている背景があるので、気分転換で一見 JavaScript っぽくない別言語 で Node で動くサーバーを書いてみたかったという気持ちです。

GitHub - kitak-sandbox/node-with-kotlin

試してみて

Tips っぽいやつ。

実行時エラーのスタックトレースが変換後の JS で出てくると分かりづらいので、GitHub - evanw/node-source-map-support: Adds source map support to node.js (for stack traces) で .kt の行数でスタックトレースを出力させるようにしました。パッケージをインストールして、require するだけ( https://github.com/kitak-sandbox/node-with-kotlin/blob/89f32b5e1de76a374ad8d5595fb6af4890a47f0d/src/main/kotlin/Main.kt#L5 )です。

サードパーティライブラリの型付けを試みるために、TypeScript の型定義ファイルを Kotlin の定義に変換するツール( https://github.com/Kotlin/ts2kt )を使ってみたんですが、今のところ、TypeScript の型定義ファイルを完全に変換できるわけではなさそうで、ライブラリによってはエラーや警告がそれなりに出ていました。ツールに関してはもう少し成熟するのを待って、静的型付けが必要と感じた場合は都度 Kotlin で定義を追加するのが良さそうです。

現場で使う?

お仕事で使うかどうかという話。単純に JavaScript に静的型付けや null 安全性を求めるのであれば、TypeScript で書いたほうが良いと思います。JavaScript + 静的型付けな言語で、普段、JavaScript を書いているのであればとっつきやすいですし、エコシステムも成熟しているというのがその理由です。

それでも、JavaScript をターゲットとして、Kotlin を採用すべき場面があるかどうか。バックエンドが Kotlin で書かれていて、コードをクライアントサイド(ブラウザ)やバックエンドフロントエンド(サーバー)で共有したいときに検討する価値があるかもしれません。
Kotlin ではないですが、Scala.js でそういった試みをおこなった事例があります( 0-9, 二槽式とはなにか )。 とはいえ、記事の終わりの方にもあるように、採用すべき場面はかなり限定される気がします。

とりあえずは、始めに書いたように個人的に JavaScript で書いているアレコレを Kotlin の書き味で楽しむぐらいがちょうどいいかな、という気持ちです。