Kotlin Fest 2024に参加してきました!
はじめに
「ニフティ不動産」アプリのAndroid版の開発を担当している、TS-Elfenです。Kotlin Fest 2024は、「Kotlinを愛でる」をビジョンにした、Kotlinファンの交流の場を提供する技術カンファレンスです。今回はそのKotlin Fest 2024に初めて参加しました!参加した感想や一部セッションについて紹介します。
Kotlin Fest 2024の概要
今回のKotlin Fest 2024は、2024年6月22日の9:30-18:30に開催されました。当日は、2つの会場にわかれてセッションが進行。会場近くには「Ask the Speaker」というコーナーが設けられ、登壇後のスピーカーに詳しくお話を聞くこともできました!
会場の外ではスポンサー企業がブースを構え、それぞれ事業紹介やノベルティ配布などを行っていました。企業ブースの近くではドリンクやお菓子が提供されており、みなさん気軽に軽食を楽しみながら講演を聴講したり、Kotlinファン同士で交流を深めたりしていました。


講演の一部の感想
それでは、私が聴講したトークの一部について、その内容と感想を紹介します。
Compose Multiplatformに関する2題についての感想
今回は、Compose Multiplatformというフレームワークに関して、以下の2つの発表がありました。
Compose Multiplatformとは?
- Kotlin Multiplatformという枠組みが以前からあり、KotlinだけでiOS/Android/Web/PCアプリで共通するロジックを書くことが出来た。
- しかし、UI部分の実装に関しては共通して実施することができなかったので、個別実装するしかなかった。
- Compose Multiplatformは、UIの実装もまた、iOS/Android/Web/PCアプリで共通化するUIフレームワーク。簡単にいうと、Jetpack ComposeでiOSのUIも作れるという仕組み。
- ただし、現在iOSとWeb版はまだ完全版ではないので注意。
- 公式ホームページにプロジェクトテンプレートがあり、簡単に試すことが出来る。
どんなことが出来るのか?
- ViewModelを用いたUIStateの共有・管理
- actual/expect funによって、iOS固有の実装・Android固有の実装を分けて作る
- Ex1. )JetpackComposeでアラートを作成するとマテリアルデザインに準拠してしまうが、iOS側ではiOS標準のアラートを出したい
- Ex2.) データ保存用の枠組みがiOSはUserDefaults、AndroidはSharedPreferenceなどがあるので分けたい
- 既存のUIKitやAndroidViewで作成したUIをそのまま活かす
- Jetpack Compose上にコンポーネントとして、 AndroidView{}や UIKitView()があるので、そこに既存のViewを配置することが可能
- Navigation-Composeなどを用いた画面遷移の実装
- 各プラットフォームの環境でテストできるUIテスト
Tips・お役立ち知識
- Android/iOS共用の部品のプレビューがAndroidStudioでうまく表示されない
- 情報のキャッチアップは、JetBrainsの公式などで行える
- 使えるライブラリなどは、kmp-awesomeなどが参考になる
感想
- Kotlinはサーバーサイドでも使用している言語なので、Kotlin一つでアプリからWebまで全部作れたらジョブローテーションなどには便利そうだなと思いました!
- まだβ版ではあるが、もう特別な仕様を必要としない実装であればiOS/Android共通の部品として作ることができるようになっているんだな、と驚きました。
JetpackCompose: 効果的なComposable関数のAPI設計
Jetpack Compose: 効果的なComposable関数のAPI設計
Composableをどれくらい柔軟に作る必要があるか
①
@Composable
fun UIButton(
val text: String
)
②
@Composable
fun UIButton(
@Composable val text: () -> {}
)
例えば、色々な所で利用できるように、UIButtonというコンポーネントを作ることを想定します。その場合に、引数を①と②のどちらで定義するかという話です。
①の場合は、このボタンには Stringが受け渡され、関数の内部で受け渡された文字列を用いたボタンのUIを作るシンプルな作りになります。②の場合は、コンポーネントそのものを受け取る作りになっており、例えばボタンの内部に画像を置いてみたり、Columnなどで組まれた複雑な要素を渡すことも可能です。
Jetpack Composeでは、このような小さなコンポーネントを組み合わせてUIを作っていくので、小さな部品ほど使い回されやすいです。例えば、今回作ったボタンを行方向に並べて、リストのようにしたいということを考えます。そうすると、「特定のボタンだけ任意のアイコンをつけたい」、「特定のボタンだけ画像ボタンにしたい」と言った要望が出てくると、それらのユースケースに応じた新たなコンポーネントを作る必要があります。もし、色々なUIで使うような共通部品であれば今後のために汎用的な設計にしてもいいかもしれません。
ステートレスCompose/ステートフルComposeの使い分け
①ステートフルCompose
@Composable fun Counter (
) {
var count by remember {
mutableStateOf(0)
}
}
②ステートレスCompose
@Composable fun Counter (
val count : Int
) {
// countは親で管理する
}
例えば、数を数えるCounterのコンポーネントを作るとして、①のようにCounterの内部でcountの状態を管理するか、②のように引数でcountを渡すことで呼び出し元で管理するか、という問題があります。
①をステートフルCompose、②をステートレスComposeと呼びます。この設計方針については、コンポーネントが持つ状態が他のコンポーネントに影響する場合は、ステートレスにした方が良いでしょう。例えば、Counterを複数置いていて、そのいずれかに数が入っている場合に完了ボタンを押せるようにする、という風に実装したい場合は、内部に状態を持つより、呼び出し元で管理すべきです。
感想
- ステートフル/ステートレスなComposeの使い分けについて、言語化してもらったことで使い分けがより説明しやすくなりました。
- また、デフォルト引数や引数にデータクラスを渡すことの是非についてなど、綺麗にコンポーネントを作る方法について様々な手法が紹介されており、今後の読みやすい設計の指針となりそうです。
全体を通しての感想
ビジョンに「Kotlinを愛でる」とあり、上級者向けのセッションが多いのかな・・・と少し不安に思っていましたが、タイムテーブルをご覧になるとわかる通り、初心者向けのセッションも多く用意されていました。例えば、パフォーマンスと可読性を両立:KotlinのCollection関数をマスターというセッションでは、ListやMapなどのCollectionの変換関数などについて具体的なコードや使い道が示されていて、始めたばかりの人でも聴講しやすい内容となっていると思います。
弊社ではiOSDCやDroidKaigi、AWS Summitといった最新の技術を取り扱うカンファレンスへの参加を積極的に支援しています。気になった方はぜひ採用情報をご覧ください。
掲載内容は、記事執筆時点の情報をもとにしています。