見出し画像

Kotlin Fest 2019に参加しました

8/24に第2回となるKotlin Fest 2019に参加してきました。
Kotlin Fest自体初参加になります。
JetBrains社のKotlin Developer Advocateであり、Kotlinイン・アクションの著者でもあるSvetlana Isakovaが初来日とのことで、期待を胸に行ってきました。

発表資料一覧

当日発表された講演の資料は、有志の方がまとめてくださいました。
非常にありがたい。

その中で、私が参加した講演についてコメントしていきます。

基調講演

本日の目玉講演
Kotlinのこれまでの歩みと、これから追加される(予定の)機能について話されてました
今熱いfeatureとして紹介されてたのが以下の5つ

・Inline Classes
・Contracts
・Immutable Collections
・Flows
・Multiplatform Projects

これら新しい機能はKEEPでディスカッションしているので、要チェック
そしてKotlinをより詳しく知りたいならば、Kotlinイン・アクションか今後出版予定のアトミックKotlinを買おうというダイレクトマーケティング

終始わかりやすくちょうどいいスピードの英語で話されてて、とても聞きやすかった
かなり広めにKotlinの機能の話をされていたため、この後の講演者たちがIsakovaさんと発表内容が被って阿鼻叫喚してるのがウケた

Kotlinコルーチンを理解しよう 2019

皆大好きコルーチン
コルーチンとは何か?から設計やテストまで幅広く言及されてた

コルーチンは普通の関数に中断と継続を導入でき、これの嬉しいところは一言で言うと、
・継続状況を理解しやすい
・スレッドより軽量

中断する関数suspend funは通常の関数では呼べず、suspend funかsuspend ラムダで呼ぶことができる

コルーチンスコープとかコンテキストとかの概念を図で解説してくれててめっちゃわかりやすい…今後LTする機会がきたら資料作りのお手本にしたい
↓とか図で理解度が加速した

実際のAndroid開発に近い使い方も書いてあり、非常に有用な情報でした

改めて学ぶContracts

Isakovaさんの講演でも言及されてたContractsについて
ママリのキャラクター絵可愛い

Contractとはランタイム時ではなくコンパイル時に色々な条件をつけることができる機能
去年のKotlin 1.3でリリースされた新し目の機能で、まだPre-alpha版
だがすでに26個のstdlibに採用されてる

Contractsはなんであるの?→過度に制約されているコンパイラを、もっと便利に使えるように解決してあげる

「契約とは、入力と出力を記述する句の集合」
→ @ Contract アノテーションを付与し「A -> B」と書くと、「Aをメソッドに提供することでBを得る」と言う契約を形成できる(違反すればコンパイルエラー)

呼び出しの種類は以下
・EXACTLY_ONCE(必ず1回呼び出される)
・AT_MOST_ONCE(1回呼ばれるか、呼ばれない)
・AT_LEAST_ONCE(少なくとも1回は呼ばれる)
・UNKNOWN(何回呼ばれるかわからない)

Contractの制約
・関数の最初に書かないといけない
・トップレベルの関数にしか使えない
・関数ブロック内でのみ有効
・getter/setterにもセットできない
・空のContractは定義できない
・if/whenやtryは式だけどcontractの中身に書くことはできない

inline classesと負けないくらい議論が活発に行われている。今年のKotlinConfで発表されるかもしれない1.4でのstable昇格に期待

(他シークレットと称した情報をバンバン喋ってて笑いましたが、ここに書いていいか不明だったので割愛します)

Kotlin Multiplatform Project入門

こちらもIsakovaさんセッションで話があったMultiplatform Projects(MPP)について
スライドのアニメーションがスタイリッシュですごい・・・
所々star要求のアニメ流れてて笑った

講演者のAAkiraさんが書いたブログに舞台裏や補足などが書かれているので、こちらも要チェック

MPPはFlutter(独自UI含め共通化)やReact Native(ネイティブUI含め共通化)とは違い、ロジック部分のみ共通化される

Kotlin/Nativeと混合しやすいけど、Kotlin/Nativeは以下のようにMPPの一要素
・Kotlin/JVM(Androidやサーバー)
・Kotlin/Native(iOSやWindows、macOSなど)
・Kotlin/JS

後半はサンプルアプリを実際に作りながらのTips

「MPPは人類が求めていた答え」(至言)

フロントエンドもKotlinで書きたい! -WebページをKotlin/JSで作った軌跡-

Droid Kaigiで知り合ったにしこりさんの講演
今回も肩に安定の小鳥さん乗っけてた、さすがだ

実際にサンプルアプリを作成する形で説明していく流れ…だったが、講演の14時間前に入ったアプデ(Kotlin 1.3.50)でエラーはいて動かなくなったとか(Oh...)
それでも講演までに直して間に合わせるの本当強い

基本的な使い方の他に、リッチなWEBページ実現のためのJS製ライブラリ導入方法や、動的型付けのJSをKotlinらしく静的に扱うための型定義や関数定義などにも言及されてた
まだ巨大なライブラリの定義はつらみ

引数に生のJS書けるjs()メソッドとか言う元も子もないやつ本当笑った

2年前の情報だともう古くて動かなかったり、進化が早いためかドキュメントが全然少ない状態
もっと利用が活発になって広まって欲しい

Kotlin/Nativeはなぜ動くのか?

本日最後の講演
今年入社でこんな大きい技術イベントで講演とかすごい

Kotlin/NativeがKotlinコードをどのようにして他のOSが実行できるようにコンパイルするかを掘っていく、かなりマニアックなテーマ

KotlinをNativeで動かすために必要なRuntimeは、Kotlin/JVMにおけるJREがなく、最低限以下が必要
・標準ライブラリ(full Kotlin実装 or 関数定義Kotlin、実装C++)
・メモリ管理機能(GC)
・プログラムランチャー(GC初期化とKotlinプログラム起動)

なんでプログラムランチャーが必要かと言うと…

Kotlinコードがネイティブバイナリに変換されるまでにはいくつかのフェーズがあり、その中でメインと呼べるものは以下4つ
・Frontend(Kotlinソースコード→AST)
・Psi2Ir(AST(PSI)→Kotlin-IR(中間言語))
・Backend(Kotlin-IR→LLVM-Bitcode)
・Link(LLVM-Bitcode→オブジェクトファイル)

この変換にはLLVMというコンパイラ用のフレームワークが使われる
(ロゴが○ルーアイズ○ワイトドラゴンみたい)

オブジェクトファイルと依存ライブラリをリンクさせてネイティブバイナリが作られる

感想

普段AndroidでしかKotlinに触れていなかったので、MPPやKotlin/JSなどの技術について学ぶのは新鮮な感じがしました。
Kotlinと一言で言っても使い道や機能は多岐にわたり、さらに新しい機能もどんどん出てきてるので、全部フォローするのは大変ですが、今後も楽しみな言語です。

Have a nice Kotlin !

写真

朝ごはん

まい泉のミニバーガー!

(Kotlin Fest関係ないけど)品川のきじっていうお好み焼き屋さんのすじ焼きは美味い

おやつも講演終わるごとに新しいのがデプロイされる

懇親会のメニュー!ローストポーク美味かった〜

主催者のたろうさんの奥様が作られたという小鳥ちゃん

余談

ロゴの小鳥は去年よりシュッとしたらしい


この記事が気に入ったらサポートをしてみませんか?