AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

Kotlin Fest 2019に参加した #kotlinfest

2019/08/24(土)に行われたKotlin Fest 2019に参加しました。

kotlin.connpass.com

去年

phicdy.hatenablog.com

会場は去年と同じ東京コンファレンスセンター品川でした。

f:id:phicdy:20190824105158j:plain f:id:phicdy:20190824105108j:plain

まい泉の軽食うまい。

f:id:phicdy:20190824105120j:plain

トートバッグは黒にしました。

f:id:phicdy:20190824105131j:plain

オープニング待機。

f:id:phicdy:20190824105142j:plain

今年は英語セッションがあり、同時通訳レシーバーや案内が英語で行われたりと海外から参加者への対応が強化された印象でした。

f:id:phicdy:20190824105902j:plain

お昼は去年に引き続き3Fの500円カレービュッフェ

f:id:phicdy:20190824182329j:plain

いろんなお菓子がデプロイされてました。

f:id:phicdy:20190824182305j:plain f:id:phicdy:20190824182315j:plain

以下セッションのメモ

基調講演

  • KEEP(Kotlin Evolution and Enhancement Process)

github.com

  • Inline classはIdクラスに使えそう
  • ImmutableListはListに比べてなにがうれしい?

  • 新しい本を執筆中とのこと(Kotlinを書いたことないエンジニア向け?)
  • Kotlin MPPはビジネスロジックの共有が目的でUI部分の共有はしない。本番環境での事例もちらほら出始めている

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

speakerdeck.com

  • suspend関数の中でasyncしてエラーが起きたときにクラッシュしたときにハンドリングできない部分の説明が最高にわかりやすい(スライドの140ページ辺り)
  • Progress -> suspend関数で中断 -> Completedをテストするときは、そのsuspend関数をモックしてdelayし、advanceTimeByして仮想的に時間をすすめることでPregress -> suspend関数で中断 -> Completedの状態の変化をテストできる

改めて学ぶContracts

speakerdeck.com

  • 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入門

speakerdeck.com

  • 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はなぜ動くのか?

speakerdeck.com

  • JREで提供されているものをC++で実装している
  • GCを独自実装
  • LLVM経由で変換している

おわりに

今回セッション募集があったので出してみたんですが残念ながらCfPが採用されず次回は発表できたらなと思いました。 今年はAndroidっていうよりKotlin MPPやWeb側の話が多い印象で、AndroidだけじゃなくWeb方面でもKotlinが広がってきたなと感じました。気になったのはKotlin MPPで、Gradle pluginで既存プロジェクトに対してもKotlin MPPが始められそうなので荒谷さんの資料やブログを見つつちょっと触っていこうかなと思います。基調講演で話していたInline classが楽しみです。