タケハタのブログ

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

KotlinConf 2019参加レポート 〜ワークショップ編〜

去る12/4〜12/6にデンマークのコペンハーゲンで開催された、KotlinConf 2019に参加してきました。 今回はその中で、初日のWorkshop Dayに参加してきたレポートを書きたいと思います。

受けてきたワークショップは「Go multiplatform with Kotlin」。

kotlinconf.com

ここで学んだKotlin Multiplatformの使い方はまた別の記事で今月中に書こうと思っているので、この記事は会場の雰囲気とかざっくりやったこと、学びや所感などを紹介します。
ワークショップは参加したことのある方も少ないと思うので、雰囲気を知ってもらえればと。

概要

Kotlin Multiplatformは、KotlinのコードでiOS、Android、Webなど複数のプラットフォームそれぞれで使えるライブラリを作り、ビジネスロジックなどでのコードの共有を可能とする機能です(現在はまだExperimental)。

参考 kotlinlang.org

今回は実際にKotlin Multiplatformでライブラリを作り、マルチプラットフォームでKotlinのコードを共有する、というのを体験するワークショップ。

①Kotlin Multiplatformでのプロジェクト作成
②ライブラリの作成
③iOS、Android、Web(JavaScript)など各プラットフォームから作成したライブラリを呼び出す
④実践的なアプリケーションでKotlin Multiplatformを使う

といった流れでした。

会場の様子

会場はベラ・センターというカンファレンスセンターでした。

f:id:take7010:20191210224842j:plain f:id:take7010:20191210224928j:plain f:id:take7010:20191210224956j:plain

写真暗いですが朝8時前です笑
デンマークの日の出は8時過ぎてからという衝撃。

登録、朝食

初日なのでまずは登録。
パスポートを見せれば名前から探してパスを出してくれます。

f:id:take7010:20191210225158j:plain

そして朝食。

f:id:take7010:20191210225232j:plain

これは毎日置いてあります。
これを食べてコーヒー飲みながら開始時間まで待機。

ワークショップ会場

こういう感じの会議室でした。
人数は20〜30人くらい?

f:id:take7010:20191210225329j:plain f:id:take7010:20191210225305j:plain f:id:take7010:20191210225318j:plain

講師の方は2人で、Web上に手順とか載せた資料を用意してくれているので、基本的にはそれに沿って作業していきます。
一定の区切りごとに講師の人がスライドで説明して、「じゃあここまでやってみよう」となってひたすら手を動かしていく感じ。

後半の方になると実践編になってくるので、ほとんどの時間はひたすら作って、分からない部分は質問するという形でした。

ワークショップ内容

前述の通り細かい技術的な内容は別記事で書くので、今回はざっくりやったことだけ。

Kotlin Multiplatformでライブラリを作る

まずはKotlin Platformでプロジェクトを作り、簡単なサンプルのコードとテストを実行して動作確認。
そのあと各プラットフォーム向けのライブラリのコードを実装します。

そしてテストコードを作って、各プラットフォームのコードをテストして、通ったらOK。
(動作確認にテストコードをサンプルとして用意してくれているのは、個人的にとてもホスピタリティ高く感じました)

最後にbuildして、各プラットフォーム向けのライブラリファイルを作成します。

作ったライブラリを各プラットフォームのアプリケーションから呼ぶ

Android、iOS、Webそれぞれでプロジェクトを作成し、それぞれに作成したライブラリのファイルを配置します。
AndroidはAndroid Studioで作成したKotlinのプロジェクト、iOSはXcodeで作成したSwiftのプロジェクト、WebはIntelliJ IDEAで作成した静的Webのプロジェクトです。

ここでSwiftやJavaScriptからKotlinで作成したライブラリのファイルを呼ぶことが体験できます。
この辺で「おお、なるほど!」とこの技術の可能性を感じ始めました。

ここまでが基礎編。

Ktorサーバーに通信するKtorクライアントの処理をMVPパターンのMultiplatformライブラリで作る

基礎編でやった知識を使って、実践的なアプリケーションを作ります。
作ったのはアドレス帳のアプリケーションで、こちらもAndroid、iOS、Webでそれぞれ。

共通ライブラリ

内容的にはKtorでのHTTPクライアントの実装を、Multiplatformライブラリとして作るというものでした。
通信のパラメータで使うデータくらすや、通信のインターフェース部分を共通化するイメージ。

実装にMVPパターンを使っていて、その紹介のパートもありました。

サーバープラグラム

HTTPで通信する先のサーバープログラムは用意されていて、それをGitHubからCloneしてきてローカルで起動して使用。
こちらもKtorで作られていました。

各プラットフォームのクライアントプログラム

あとiOS、Android、iOS、WebのそれぞれのコードもViewの部分は用意されていて、GitHubからCloneして使用。
API通信の部分だけTODOになっていて、それを作成したライブラリを呼び出す形に変更するという形でした。

なのでライブラリがちゃんと作れていれば、書き換えて起動するだけでアドレス帳のアプリが動くようになっています。

Kotlin Multiplatformで使えるライブラリの紹介

ここはExtra的な感じですが、Kotlin Multiplatform向けのライブラリの紹介です。
マルチプラットフォームという特性上、使えないKotlinのライブラリもあるのですが、ここではKotlin Multiplatformの実装にも対応しているライブラリを紹介しています。

DIライブラリのKodein-DIと、時刻ライブラリのKlockが紹介されていました。
(ここは時間が残り少なかったのであんまりちゃんとやってないです)

学び

Kotlinのマルチプラットフォーム展開の可能性

もともとKotlin/JSやKotlin/Nativeの存在はもちろん知っていたし、興味で触ってみたこともありました。
ただ今回実際に1日ガッツリとやってみて、完全に別言語で作っているiOSやWebのアプリでもKotlinで実装したロジックを共有するという体験ができて、マルチプラットフォームでの使用に対するイメージがすごく具体的に湧きました。

このワークショップではやらなかったですが、もちろんサーバープログラムとの共有もできます。
今まで「サーバーとクライアントの言語を統一することでロジックを共有する」という発想はありましたが、それをせずKotlin、Swift、JavaScriptというクライアントのメジャー言語とロジック共有できるのは、かなり可能性を感じました。

僕は本職がサーバーサイドなので慣れない部分もありましたが、勉強になったし今後も情報を追いかけていきたいと思います。

英語力が低くてもついて行けたし勉強になった

僕は正直英語を全然話せない人なので、今回のワークショップはかなり不安もありました。
「セッションを聴くだけならなんとかなっても、ワークショップで会話しながら進めるのは難しいのでは?」と。

しかし、実際に行ってみると資料は読みながら進められるものがしっかりと用意されているし、講師の人も割と分かりやすい英語で話してくれていたので、全然問題なくついて行くことができました。
質問とかは全然できなかったですが、それでも前で説明してくれたりしてるのを見てるだけでも、手順だけ見てやるのよりだいぶ理解が早かったです。

それにワークショップという環境で、一日に大量の情報をガリガリ手を動かしながらインプットできたのもかなり良かったです。
もし仮に資料の内容を土日とかに一人でやろうとしても、多分2ヶ月はかかるだろうと思います笑

KotlinConfへ参加する際はぜひワークショップも!

ワークショップのチケットは649ユーロとなかなかお高いので迷ったのですが(セッションのチケットが445ユーロ)、「せっかく行くなら全部体験しないともったいない!」と思い申し込んで大正解でした。
もし現地に行くことがあれば、ぜひワークショップも参加されることをオススメします!

おまけ:アダプタのタイプは注意

デンマークの電源はCタイプなのですが、これに対応したアダプタを用意するのを忘れていました。
(大きい変圧器は用意していたのですが)

f:id:take7010:20191210225502j:plain

Macはこのプラグの部分だけ付け替えることもできるので、これをどこかで用意しておけば良かったんですね。

やむなく拙い英語で講師の人に貸してもらえないか聞いたところ、予備を持っていて無事借りることができました。感謝。
IntelliJ IDEA、Android Studio、Xcodeを同時起動する凄まじくバッテリーを使うワークショップだったので、非常に助かりました。