giantneco’s blog

技術メモ

Kotlin Conf 2018 参加報告会 を見てきたメモ

10/15 と 10/19 に行われた Kotlin Conf 2018 の参加報告会を聞いてきた。

CA_kt の Kotlin Conf 2018 参加報告会

こちらは 10/15 に行われたサイバーエージェント主催の参加報告会。

Kotlin Conf 2018 Keynote Overview @satorufujiwara

Kotlin Conf 2018 Keynote を振り返る内容。

  • Kotlin Conf について
    • 今回で2回め
    • 参加者は 1300+
    • 今回はオランダ、アムステルダムで開催。前回はアメリカで開催だった
    • セッションはすべて動画で公開されている。見よう
    • 内容としてはコルーチン、マルチプラットフォーム、サーバサイドの話が多く、Android に関するセッションは 3 つ
  • キーノート
    • Kotlin 言語のデザイナー Andrey Brslav によるセッション
    • Be Pragmatic 実装者の考えをコードに落とし込めるようにしたい
      • Consicion < Readability
        • 簡潔さより読みやすさ
        • ボイラープレートは減らし、書いたコード全てに意味があるように
      • Expressiveness < Reuse
        • 表現力のためでなく、再利用のため
        • 標準ライブラリによく使われるパターンを入れている
      • Originality < Interoperability
        • 独自性<相互運用性
        • 他の言語にすでにある機能・知見を取り入れる
      • Soundness < Safety / Tooling
        • 言語的な堅牢さより、安全さ、ツールによるサポート
        • 静的型付き言語なのでツールも作りやすい
    • Kotlin 1.3
      • Coroutines -> stable
      • kotlin/native -> beta
      • build -> faster 75%
  • おすすめのセッション
    • coroutine exporing coroutines in kotlin
    • kotlin coroutines in practice
    • mutliplatform
    • kotlin/native concurrency
  • おすすめの Kotlin 教材

Kotlin 1.3 新機能 @_a_akira

  • 元になったセッションは New Type Inference and Related Language Features by Svetlana
  • Experimental features
    • Experimental features の目的は、アーリアダプターになるべく早く新しい機能を試してもらうこと
    • 使いかた
      • migration 1.2 to 1.3    * AndroidStudio で Tools > Kotlin > Enable migration option を選択
      • gradle
        • kotlin { experimental { coroutines 'enable' } }
      • 1.2 と 1.3 の import 違い
        • 1.2 import kotlinx.coroutines.experimental.*
        • 1.3 imoprt kotlinx.coroutines.*
    • ユーザ定義の experimental を作ることができるようになった
    • Contracts
      • Contract があると、そのコードが必ず一度だけ実行されることがコンパイラに保証される
        • run {} で変数を初期化するコードがコンパイルエラーにならなくなった
      • 自作もできる @ExperimentalContracts
    • New Type Inference
      • gradle で kotlin { experimental { newInference 'enable ' }}
      • SAM conversions
        • SAM = single abstract method の引数型が推論されるようになった
          • sequence<int> { yield 11, yield 42 }<int> を書かなくてもよい
      • Inference for call chains
      • Intersection types

優れたコードは小説のようか? @kaelaela31

  • 「よくかけたコード=小説」ということで文法に影響する Kotlin の機能の紹介
    • Kotlin Conf では表現について言及したセッションが多かった
    • Next Level DSLs
    • Writing The Next Great Kotlin Novel
  • Writing The Next Grewat Kotlin Novel
    • コードを自然言語のような書き方ができるとよい
      • 文脈、多様な表現, etc...
    • Kotlin では
      • 基本の語彙は英語、スコープが厳密、冗長な単語は省略、よりわかりやすいシンボルなどを使う
      • Object は名詞
      • Infix が便利
      • 受動態より能動態で書いた方が良い
        • food.isLikedBy(lisa) より lisa.likes(food)
      • Scope function を接続詞のように使うことができる
      • Kotln DSL
        • 内部DSL なのでコード汚染はあまりない

KotlinConf Report @takusemba

  • Best Practices for Unit Tesint in Kotlin, Phillipp Hauer から
    • MockK MockK<HogeFactory> verify() べんり メソッドがどのように呼ばれるかを検査できる
    • JUnit5
      • @TestInstance(TestInstance.Lifecycle.PER_CLASS)
        • テストごとにクラスを再生成できる
      • @Nested
        • テスト結果をグルーピングして IDE とかで見やすくなる
      • バッククォートでテスト名を記述できる
        • テスト結果などがかなり見やすくなる

JKUG の Kotlin Conf 2018 参加報告会

こちらは 10/19 に行われた Kotlin ユーザグループによる参加報告会。 会場は Line Cafe でとてもキレイな場所だった。

KotlinConf 2018 カンファレンス概要とトピックOverview @mhidaka

CA_kt のセッションとかぶるので、おすすめのセッションだけ。

  • おすすめのセッション
    • Keynote
    • Shaping your app's archiecture with kotlin and architecture components by Florina
    • Kotlin Coroutines in Practice by Roman Elizarov
      • コルーチンの使い方、Tips
    • Kotlin corutine bad practice and good practice

KotlinConf 2018 のワークショップに参加してきました あんざいゆき

今年の KotlinConf は初日が Workshop Day でした。 丸一日のワークショップに参加してきたのでその内容と様子についてお伝えします

ワークショップに参加してきた話

  • Kotlin Conf Workshop

    • 649 ユーロ 8万くらい ちょっと高い
    • 9:00 - 17:00
    • 朝食・昼食あり
    • 5 つのワークショップ
      • 変換プラグが C type で、穴にはめるタイプなので、ヨーロッパ行く人は注意
  • Acynchronous Programming with Kotlin

    • About
    • 内容
      • Asynchronous programming, introduction to coroutines ...
      • coroutine について一通り
    • サンプルプロジェクト
      • デスクトップアプリ
        • よく考えられたデモ
      • ちっさなTips
  • Kotiln での並行処理
    • thread
      • -> thread トップレベル関数でバックグラウンド実行
    • callbacks
      • -> Retrofitenqueue を利用
    • coroutine
      • thread の場合とそれほど変わらない書き方になる。シンプル
    • async, awaitAll
    • future
    • channel and actor

KotlinConf 2018 Android編 @hoshi_gaki

gyazo.com

  • Android Ssupenders, chris bane

    • coroutines on ndroid
    • jobs, scopes, reactivity
    • Reactivity
      • Rx のものは coroutine で置き換えられる
  • Shaping your app's archiecture with kotlin and architecture components, Florina

    • coroutine の why, where , how
      • why -> ease of learning, single/maybe/completale -> suspend fn
      • where -> ほぼ全部、どこでも使える
      • how to use -> retrofit2-kotlin-coroutines-adapter
    • Java とのつなぎ込み
      • suspend あ Continue を返すのでこれをどうにかしないといけない
      • callback 使うのが良さそう
    • Typing
      • これまで
        • data class UserId(val id: Long)
      • kotlin 1.3
        • inline class UserId(val id: Long)

「KotlinConf から見る、最近の Kotlin サーバーサイド事情」 @hktechno

gyazo.com

  • Server Side Kotlin
    • good: Null safety, tyep safety, functional programming, dsl
    • imporant: JVM 言語
  • Kotlin web framework
    • 選択肢はいくつかある: Ktor, http4k, spring boot
    • Spring Boot が多いっぽい
  • Which to use
    • Swagger, micrometer, zipkin を使う場合-> http4k, Spring Boot
    • coroutine を使う場合 -> ktor, spring boot(ただし unofficial)
      • Ktor は JetBrain 製なので coroutine もよく対応できている
  • Spring Boot を Kotlin で使うには
    • SpringFu, KoFu で Functional , DSL にできる(ただしincubating feature
    • annotation 対応の cofiguration ができる
      • annotation からは何が発生しているかが辿りにくい
  • API / Micoservices
    • RESTより GrapHQL(外部むけ), GRPC(内部向け), (Line ではThrift)がいいんじゃないか
    • REST bad: 型がない、スキーマが曖昧、パースにCPU使う
    • kubenetes kotlin DSL
    • 分散 Tracing の話が多かった
      • Opentracing , Zipkin
      • マイクロサービス使うなら導入しておきたい
  • Kotlin/Native
    • kotlin/Native はサーバサイドでもつかえるか
      • Concurrency 周りが難しそう
      • Ktor に期待, native をサポートしてほしい
      • Server-less な利用法では kotlin/jvm では startup time 問題があるので厳しい
        • サーバレスで使いたいなら GraalVM に期待したほうが良さそう

「Kotlinのユニットテスト ベストプラクティス」 @ngsw_taro

  • Best Practices for Unit Testing in kotlin @philipp_hauer
    • JUnit4
      • bad
        • boilerplate
        • @JvmStatic - kotlin には static がない
        • mutable な宣言
        • lateinit -> nullable の回避に使っているが煩わしい
        • mock -> mockit など java 用の mock は kotlin 向けでないのでツライ
        • kotlin 予約語と重複する関数があるので使いづらい
        • 読みにくいメソッド名
        • 貧弱なエラーメッセージ貧弱
        • テストごとにインスタンスを生成するので、static での初期化が必要なことがある
    • JUnit5 を使うのがベスト
      • @TestInstance
      • junit.jupiter.tesinstancelifecycyle.defaut = per_class
      • @Nested でグルーピング
      • バッククォートで読みやすいテスト名
  • おすすめライブラリ
    • どれもそこそこよい
    • おすすめは: JUnit5, mockK, AssertJ
  • mockK 注意
    • モックの生成は重い
    • 一度生成して clearMocks でクリアするのがよい
  • アサーション
    • データクラスのアサーション
      • フィールド毎でなく、データクラスをそのまま assertThat に渡すとよい。Assertion の結果が読みやすくなる

感想

  • 聞きに行く前は Android 関連の話が多いかなと思ってたが、Kotlin Conf ではサーバサイド向けの話が多かったらしい
  • コルーチンがあると並行処理に強くなるし、Kotlin/Native で起動時間も早くなるならコンテナ全盛の時流に乗れるかもしれないな、と思った次第
  • これから結構流行るんじゃないかとも思う
  • オランダのアムステルダムいいところらしい
    • 開催場所としては参加者に割と好評だった様子
    • サンフランシスコとかホテル代もどんどん高くなっているし、アメリカ以外での開催もこれから増えてもいいんじゃないかと思う