mike-neckのブログ

Java or Groovy or Swift or Golang

第三回かわいいKotlin勉強会に行ってきた #jkug

表題の通りKotlinの勉強会に行ってきました。

kotlin.doorkeeper.jp

ただ、参加しようと思ったらすでに満員だったので、参加する方法ないかどうか思案していたら、発表者枠が空いていたので、発表者枠で参加しました。Kotlinさわったことなかったので、結果としてさわることになりました。これが勉強会駆動勉強というやつですね。

発表資料はこちらです。

www.slideshare.net


体調が悪かったので、遅れての到着となり、たろうくんさんの発表ややんくさんの発表を聞けなかったのが残念です。後、朝に「資料まだできてない」とツイートした所、参加者の方がキャンセルしてしまったので、申し訳ないことをしたなと思っております。

参加者はAndroiderがかなり多く、Androidでの開発言語がまだJava8に対応していないことから、Kotlinがかなり魅力的に見えていることが伺えました。実際、kiriminさんが発表にてfindViewByIdがいらなくなってすごい嬉しい的なことをおっしゃられていましたし、クロージャーでOnClickListenerを書けるところなどはAndroider的には嬉しいところが多いと思います。

僕の発表の後のあやぴーさんの発表はClojureからKotlinで作ったjarを呼び出すという気持ち悪い発表でKotlinとは名ばかりのClojureの発表になっていて面白かったです。(Clojureをやるとは言っていない)

むろほしさんはしゃべるのがすごい上手なので、プレゼンのテクニックを教えてもらいたいです。


さて、僕の発表ですが、jQueryajax関数用の型定義を書くという内容からAltJSとしてのKotlinの現状について発表しました。元々はTypeScriptと比較していこうという内容を考えていたのですが、大して面白くもないし、TypeScriptの圧勝なので、どうやったらKotlinをAltJSの対抗馬とできるか考えてみただけです。

また、jQueryajax関数の型定義を書くことを発表内容としてましたが、元々はVanila JSでXHRでいいかなと思っていて、それでサンプルを書いていた所、JSONのパース方法で型安全にやる方法が見つからず、klaxonKotsonを試してみたのですが、Kotlinのバイナリー互換性が取れない(これらのライブラリーは0.11.9?とか0.12.000くらいで、僕の環境は0.12.200)ため、XHRを使うのをやめて、jQueryの型定義をどうやるかという方法に落ち着いたという紆余曲折があります。

なお、JavaScriptコンパイルするだけであれば、次のようにすることも可能であることを勉強会が終わった後の今この記事を書いている最中に、Kotlinのコードjson.ktを見ていて発見しました。

val json : String = raw
val person: Person = JSON.parse<Person>(json)

また、発表中、オブジェクトがJavaScriptの実装次第でエラーが発生するパターンがありましたが、これも次のように周りくどい処理を行うと、プレインなJsonObjectになるので、一々json関数を呼び出さずにできます。(これも今知った)

val person: Person = Person("foo", "bar")
val json: String = JSON.stringify(person)
val p: Person = JSON.parse<Person>(json)

Kotlin2Jsのエコシステムについては、心に余裕があれば遊びでGradleプラグインを作ろうかなと思います(誰か作ってくれないかな)。要件としてはこんな感じになる予定です。

  • レポジトリー
  • ツール
    • 上記のレポジトリーで指定されたものを~/.kotlin2js/cachesにダウンロードする
      • キャッシュされた型定義情報はコミット番号、コミット日付などのメタ情報とともに保持する(json面倒いからyamlにしようかなと思ってる)
    • kotlinのjsプロジェクト上のsrc/main/refs上にコピーを作成する

あと遊びでrequireJSの型定義情報を作るかもしれません

ただ、まあ、正直TypeScriptでいいじゃんというのもあるので、完成しない気もします


おわり。かえりはてんてんさんと新宿まで一緒に帰りました。