Kotlin Fest 2019に参加した #kotlinfest
2019/08/24(土)に行われたKotlin Fest 2019に参加しました。
去年
会場は去年と同じ東京コンファレンスセンター品川でした。
まい泉の軽食うまい。
トートバッグは黒にしました。
オープニング待機。
今年は英語セッションがあり、同時通訳レシーバーや案内が英語で行われたりと海外から参加者への対応が強化された印象でした。
お昼は去年に引き続き3Fの500円カレービュッフェ
いろんなお菓子がデプロイされてました。
以下セッションのメモ
基調講演
- KEEP(Kotlin Evolution and Enhancement Process)
- Inline classはIdクラスに使えそう
- ImmutableListはListに比べてなにがうれしい?
Read-onlyは自分で中身いじれない(が、他のところで可能になってる可能性)。immutable は初期されてからはいじるのは不可! #kotlinfest
— Panini@KotlinFest (@panini_ja) August 24, 2019
Listはinterfaceであり、実装ではない。MutableListと対等な実装が今存在していない。それとインスタンスを内部的にコピーなどする必要があるメソッドが存在しているが、immutableListという明示的にimmutableなものがあればそういう無駄な処理が無くなりパフォーマンスも上がるとのことでした。
— shiraji (@shiraj_i) August 24, 2019
- 新しい本を執筆中とのこと(Kotlinを書いたことないエンジニア向け?)
- Kotlin MPPはビジネスロジックの共有が目的でUI部分の共有はしない。本番環境での事例もちらほら出始めている
Kotlin コルーチンを 理解しよう 2019
- suspend関数の中でasyncしてエラーが起きたときにクラッシュしたときにハンドリングできない部分の説明が最高にわかりやすい(スライドの140ページ辺り)
- Progress -> suspend関数で中断 -> Completedをテストするときは、そのsuspend関数をモックしてdelayし、advanceTimeByして仮想的に時間をすすめることでPregress -> suspend関数で中断 -> Completedの状態の変化をテストできる
改めて学ぶContracts
- 1.3.50で26メソッドでContractsに対応された
- Kotlin ConfでKotlin 1.4の話があり、その中でContractsについても話がありそう
@Contract
というJava用のアノテーションをJetBrainsが提供している。そこから契約とはなにかを探る@Contarct
はKotlinに対応しておらず、改良してKotlinに入れる話がKEEPにあったが対応がしんどい、IDEが怒るだけで値が設定できない訳ではないから見送られた- AT_MOST_ONCEは0回か最大1回呼ばれることをコンパイラに伝える
- デフォルトはUNKNOWNで何回呼ばれるかわからない
- Inline classのほうがIssueは多いけど、Contractsも負けてない
- コンパイル時間などの問題がまだまだあるのですぐにstableにはならなそう
Kotlin Multiplatform Project入門
- Kotlin MPPはロジック部分の共通化のみでUIの共通化は行わない
- Jetpack compose/Swift UIでUI部分の共通化の可能性がでてきた
- Kotlin/JVM, Kotlin/Native, Kotin/JSなどを含めてKotlin MPP
- Kotlin/Nativeはバイナリを出すのであってiOS向けだけでなく、Mac, Linuxなどにも対応する
- 大きなメリットとしてはドメインオブジェクト・ロジックの共通化。Gradle pluginなので導入が簡単(build.gradleの設定は大変そう)
- デメリットとしてはJavaの資産(RxJavaなど)を使えない、iOSでSwiftから直接suspend関数が呼べずCoroutinesがメインスレッドしか呼ばれないため別途対応が必要である等
Kotlin/Nativeはなぜ動くのか?
おわりに
今回セッション募集があったので出してみたんですが残念ながらCfPが採用されず次回は発表できたらなと思いました。 今年はAndroidっていうよりKotlin MPPやWeb側の話が多い印象で、AndroidだけじゃなくWeb方面でもKotlinが広がってきたなと感じました。気になったのはKotlin MPPで、Gradle pluginで既存プロジェクトに対してもKotlin MPPが始められそうなので荒谷さんの資料やブログを見つつちょっと触っていこうかなと思います。基調講演で話していたInline classが楽しみです。