KotlinConfに参加してきました

こんにちは。ビューティー事業ユニットプロダクト開発グループでエンジニアをしている索手です。主にホットペッパービューティーのAndroid版開発を行っています(言語はもちろんKotlinです)。

11/2~11/3にサンフランシスコで開催されたKotlinConfに参加してきたので、その様子をレポートします。

badge

KotlinConfについて

JetBrainsが主催する、Kotlinをテーマとしたカンファレンスです。

今回が第一回の開催となり、1000人以上のエンジニアが参加していました。

https://www.kotlinconf.com/

セッションについて

セッションは全部で46個、キーノートスピーチなどを加えると計50個のセッションが行われました。

セッションの動画は後日公開される予定です。スライドはまとめを見つけられなかったので、見つけ次第リンクを追加しようと思います。

以下ではカンファレンスを通して、印象に残った内容について触れていきます。

オープニングキーノートの内容についてはKotlinの公式ブログに詳しくまとまっているので、ぜひこちらも御覧ください!

全体感

JetBrainsのマルチプラットフォーム対応への本気を感じました。Kotlin/JSやKotlin/Native自体は前々からリリースされていましたが、サイドプロジェクト程度にしか考えていなかったので驚きました。このトピックについてはこの後の項で詳細に説明します。

また、Kotlinの使い方(スコープ関数やfor, forEachの使い分けとか)についてのセッションが散見され、コミュニティとしてもまだまだデファクトを模索している段階という印象を受けました。

マルチプラットフォーム対応

特に印象に残ったのが、Kotlinを利用したマルチプラットフォーム対応です。

オープニングキーノートではKotlin/NativeのiOS対応が発表され、その他にもKotlin/JSやKotlin/Nativeセッションがあり、マルチプラットフォーム対応への機運の高まりを感じます。

iOSサポート

multiplatform

もともとKotlinでは3種類のコンパイラ(Kotlin/JVM, Kotlin/JS, Kotlin/Native)が提供されていましたが、今回のキーノートでKotlin/NativeのiOSサポートが発表されました!これにより、主要なプラットフォームの開発をすべてKotlinで行うことが可能となります。

ios-llvm

iOSのバイナリは、LLVMを介して生成されます。Kotlin/Nativeで外部のライブラリを利用するにはバインディングを生成する必要がありますが、現時点ではObjective-Cのみのサポートとなっています。ただし、将来的にはSwiftもサポートする見込みとのことでした。

multiplatform-native

またKotlin/Nativeだけで主要なプラットフォーム全ての開発を行う世界観についても紹介されていました。この場合、AndroidはNDK、WebはWebAssemblyを使って動作することになります。

Common Module

Kotlinでのマルチプラットフォーム対応は、各プラットフォーム共通の機能をCommonModule、各プラットフォーム特有の機能をPlatformModuleという形で分割して実装することができます。この機構を利用することで共通の機能を言語ごとに実装する手間を削り、開発を効率化することが可能です。

CommonModule内ではKotlinのstdlibのみを利用でき、各プラットフォームに依存する部分はインターフェースのみを定義、実装は各PlatformModule内で定義するというアプローチをとります。ワンソースで各プラットフォームに対応というわけではなく、現実的なアプローチに好感が持てます。

参考:https://kotlinlang.org/docs/reference/multiplatform.html

実装サンプル

KotlinConfの公式アプリは2つあるのですが、どちらも全プラットフォームがKotlinで開発されておりソースコードが公開されています。

前者は各プラットフォームに対応したコンパイラを利用しており、後者はなんとKotlin/Nativeオンリー(!)で開発されています。

Android

Androidエンジニアとしては気になるのはAndroid ✕ Kotlinのセッションです。全体として多くはなかったのですが、2つのセッションを聞いてきました。

A View State Machine for Network Calls on Android

MVPにViewStateという概念を取り入れてはどうか?という趣旨のセッションでした。

通常のMVPではUI機能の変更時にViewとPresenterの両方に変更を加える必要があり、OCP(開放/閉鎖原則)を違反してしまいます。そこで、ViewState(+ ViewModel)の2層をViewとPresenterの間に挟むことで、OCPに違反しないアーキテクチャを実現できるということでした。通常のMVPでは何がダメなのか、それをどう解決するのかが明確に語られており非常に勉強になりました。

Kotlin Static Analysis with Android Lint

近々Android Lint2.0をリリースするらしく、その機能について説明するセッションでした。

lint

Lint2.0の主な目標は、Kotlinのサポートとアプリ開発者向けのAPIを安定させることのようです。現状あまりドキュメントがないLintですが、2.0のリリースによって整備されるのかもしれません。弊社でもKotlinの静的解析手法については模索し続けているため、今後の動きに注目していきたいところです。

また、Lintの最新情報は関しては以下のGoogleグループで情報を追えばいいそうです。

https://groups.google.com/forum/#!topic/lint-dev

そもそもLintにバージョニングがあったことすら初耳で、知らないことが多くとても楽しいセッションでした。

おまけ

KotlinConfのアフターパーティーにて、他の日本人参加者と共にかのJakeWharton神の写真を取ることができました!(写真中央がJake, 一番右が自分)

jake

Androidエンジニア冥利に尽きるできごとで、最高の体験になりました。

一緒に写真を撮ってくれたみなさま、ありがとうございました 🙇

さいごに

非常に楽しい2日間でした!単独 && 初アメリカということもあり言語の壁や時差に苦しめられましたが、それもいい経験だったと思っています。

引き続き、マルチプラットフォーム開発を夢見ながら、KotlinでのAndroid開発を楽しみたいと思います!