タケハタのブログ

プログラマの生き方、働き方、技術について雑多に書いていくブログです。

KotlinConf 2019参加レポート 〜セッション編〜

去る12/4〜12/6にデンマークのコペンハーゲンで開催されたKotlinConf 2019の参加レポート。
今回はDay2、Day3に行われたセッション編になります。

セッション一個一個の細かい内容は長くなるので書きませんが、観てきた中で良かったセッションをピックアップしてざっくりと概要を紹介。
最後に全体を通しての所感を書きます。
興味を持った方は動画なども観ていただければと。

ワークショップ編のレポートはこちら↓ blog.takehata-engineer.com

会場の様子

Day2からセッションが始まり、いよいよここからが本番という感じ。
まだ人が少なかったWorkshop Dayと比べ、かなり活気に溢れてます。 f:id:take7010:20191215114343j:plain

JetBrainsやGoogleのブースがあったり、グッズのストアがあったり。

f:id:take7010:20191215114407j:plain f:id:take7010:20191215114418j:plain f:id:take7010:20191215114428j:plain

会場の様子についてはまた別の記事で詳しく紹介します!

良かったセッションをざっくり紹介

観てきた中で、良かったセッションをパラパラと書いていきます。
動画のリンクを貼ってあるので、興味ある方はそちらも観ていただけると良いかなと思います。

Kotless - Kotlin Serverless Framework

kotlinconf.com

Kotlinのサーバーレスフレームワーク、Kotlessの紹介。
サーバーレスとは?の説明からKotlessを使ってのデモなどがあります。

Kotless DSLでTerraformのコードを生成し、デプロイするGradleスクリプトを作ってデプロイしたりするところまで見せてくれます。
今後はAWS Lambdaなどにも対応する予定はあるとのこと。

動画

https://youtu.be/f6_M7LyrZMU?t=4167

Coroutines Case Study - Cleaning Up An Async API

kotlinconf.com

名前の通りCoroutinesのケーススタディ。
launchとasyncの対比とかから始まり、エラーハンドリング、デバッグ方法など色々と。

スライド上でコードを動かしながら説明してくれるので、割と分かりやすいセッションだと思います。

動画

https://youtu.be/f6_M7LyrZMU?t=10450

Building microservices with Kotlin and gRPC

kotlinconf.com

gRPCとは?というところからProtocol BuffersやHTTP/2などの説明、そしてKotlinでの実装の説明。
Kotlin×gRPCは僕もこれまでやってきている内容なので、海外での事例も聞けて良かったです。
ここで紹介されていた例では、Springを使わず生でgrpc-javaを使っての方法だったので、よりピュアなgRPCでの実装が見れます。

さらにCoroutinesを使っての通信の実装や、grpc-kotlinkroto-plusといったKotlinでgRPCを扱う時に使えるライブラリの紹介もあり、発展型としても参考になる内容でした。

話も面白いセッションでした。

動画

https://youtu.be/F2Der7xDNVM?t=18596

Bootiful GraphQL with Kotlin

kotlinconf.com

Kotlin×GraphQLの話。
gRPCのセッションと同じくGraphQLとは?という説明から始まり、Kotlinでの実装方法を紹介しています。
こちらはSpring Bootを使っての実装。

ライブコーディングをしながら実行して見せてくらたりしてたので、英語分からなくてもとても分かりやすいセッションだと思います。

動画

https://youtu.be/F2Der7xDNVM?t=22199

The state of Kotlin support in Spring

kotlinconf.com

Spirng FrameworkのKotlinへの最新のサポート状況などについての話。
Springは常に使っているので知っていることが多いかと思いきや、さすが国際カンファレンス、最新バージョンでの情報など知らないことも多く、日本ではあまり聴けないような話も聴けました。

主にCroutines含め非同期処理周りの話が勉強になりました。
あとは「Kofu」というKotlin DSLを使ったSpring Bootの設定についての話もあります。

動画

https://youtu.be/Ij9guIZ-vBY?t=4201

Testing with Coroutines

kotlinconf.com

kotlinx.coroutines.testでのCoroutinesを使った実装のテストコードについての話。
ライブコーディングではないですが、スライド上でコードを演出付きで動かしながら説明してくれるので、意図とかも含めとても分かりやすいです。

動画

https://youtu.be/nfb6lDnvtKQ?t=10382

The power of types

kotlinconf.com

Kotlinの強力な型システムについて。
プログラミング言語の歴史みたいなところから型の話をしつつ、Kotlinの型システムの使い方とか、コンパイルした時の扱いやパフォーマンス面のコストの話とかをしています。

型システムの話なので小難しいかと思いきや、分かりやすくて実戦でも活かせそうないいセッションでした。

動画

https://youtu.be/Ij9guIZ-vBY?t=14099

Kotlin puzzlers, vol 3

kotlinconf.com

クロージングセッションを除いた最後のコマでやっていた、毎年恒例(3年連続でやっているのでvol 3なのです)のKotlin puzzlers。
Kotlinについてのめちゃくちゃ難しいクイズをどんどん出して、聴講者がアプリで答えていきます。
手を挙げコメントすると、お土産がもらえたりもします。

多分ほとんどの人が全然答えられないですが、面白いのでぜひチャレンジしてみることをおすすめします。

動画

https://youtu.be/E4F0YU8Jd5g?t=26505

その他の観てきたセッションたち

前述したものも含め、観てきた全てのセッションたちです。
基本的にサーバー系の話、とCoroutinesとか言語自体の内容のものを観ました。
気になるセッションあれば聞いてもらえれば(覚えてる範囲で)答えます。

Day1

Opening Keynote

Ktor for Mobile Developers: Fear the server no more!

Kotless - Kotlin Serverless Framework

Coroutines Case Study - Cleaning Up An Async API

Kotlin Multiplatform in Action: more than 10 projects for iOS and Android with Shared code

Building microservices with Kotlin and gRPC

Bootiful GraphQL with Kotlin

Building Reactive Pipelines with Kotlin & Spring: How to go from scalable apps to scalable systems

New Product Announcement

Day2

The Shuttle Case

Asynchronous Data Streams with Kotlin Flow

The state of Kotlin support in Spring

Testing with Coroutines

The power of types

Do it in code (not YAML)! Unlock power of Kotlin DSL for Kubernetes

Kotlin puzzlers, vol 3

Closing Panel

全体を通してみて感じたこと

サーバーサイドでもCoroutineがスタンダード

昨年Kotlin1.3がリリースされてから初めてのKotlinConfだったこともあるかもしれませんが、Coroutinesに関するセッションは非常に多かったです。
また、それ以外のセッションの中でもCoroutinesを使った実装方法などの紹介はかなり多く、もうどの分野でも当たり前のように使われているのを実感。

特にサーバーサイド関連のセッションでもよく出てきたのが印象的でした。
Androidの実装では日本でも既によく使われているのではと思いますが、サーバーサイドでCoroutinesを使用した事例は日本だとほぼ聞いたことがありません。

個人的な考えで言うと、もともとサーバーサイドの非同期処理はクライアントに比べると少なく、I/Oの処理なども「非同期にした方が早くはなるけど、非同期にするコストを考えるとやらなくてもパフォーマンスは十分」とやっていなかったところがあります。

ただ、今回色々な事例を聴いていると、そもそも「非同期処理にするコスト(処理やテストの複雑性など)」がかかるというのを考え直さないとマズいかなと感じました。

そこを大きなコストと考え過ぎず、よりパフォーマンスの良い実装を不具合なくできてこそいいエンジニアだとは思うので、考え方を改めていこうと思いました。

設定ファイルとかをKotlin DSLをにする事例もよく見受けられる

僕の観てきたセッションの中で言うとDo it in code (not YAML)! Unlock power of Kotlin DSL for Kubernetesがそれに当たるのですが、YAMLなどで定義する設定ファイルをKotlin DSLで書くという事例もいくつか見られました。

build.gradleをktsでというのはもともとよくありますが、このKubernetesのYAMLをKotlin DSLで書けるようにしたりというのは、面白い発想だと思いました。
理由として恐らく多いのがYAMLやXMLのような設定ファイルだと「型がない」「IDEで参照先にジャンプできない」などの部分に不満を感じ、Kotlinで書けるようにすることで解消しようという考えです。

個人的にはYAMLはそんなに嫌いではないのですが、効率や品質を上げるための考え方の一つとして持っておきたいとは思いました。

Kotlin MPP(Multiplatform Project)が推されている

タイムテーブルを観るとKotlin Multiplatformに関するセッションも多かったと思います(特にDay1)。
僕はワークショップで一通り聴いてきたこともあり、セッションの方は一つしか行かなかったのですが、JetBrainsとしても力の入れどころなのが伝わってきました。

Kotlin/Nativeがまだベータ版だったり、Kotlin/JSも頻繁に改修が行われていたりとマルチプラットフォーム展開はまだ道半ばですが、Kotlinの次の大きな目玉、ポイントとなるのはここなのかなと思います。