DroidKaigi 2024に参加してきました
本記事は2024年9月11〜13日にベルサール渋谷で開催されたDroidKaigi 2024の参加レポートです。
はじめに
こんにちは、先日開催されたDroidKaigi 2024にアプリチームより砂田とシーンが参加してきました!
日本最大級のAndroidカンファレンスということで開催とても楽しみにしてました!
参加レポートとして気になったセッションなどを紹介させていただきます!
公式アプリへのコントリビュート
DroidKaigiといえば、公式アプリをみんなでコントリビュートして作り上げていくのも目玉の1つですね!
自分も2件PRを出してアプルーブしてもらえました🥳
お祭りや文化祭の準備段階のような楽しさがありますね!
コントリビュートへの案内も丁寧で参加しやすく開発者体験が良かったです。
リポジトリやアプリのコードもすごく勉強になります。今年のアプリはCompose Multiplatformを採用していたり実験的・挑戦的な内容が多かった印象です。また改めてコードリーディングさせていただきます。
GitHub - DroidKaigi/conference-app-2024: The Official Conference App for DroidKaigi 2024
Day1 Workshop Day
1日目はワークショップでCompose MultiplatformとKotlin Multiplatformについて学ぶハンズオンです。
JetBrainsからSebastian Aignerさんが講師を務めて下さいました。
タイトル「From 0 to 100 with Kotlin & Compose Multiplatform」ということでKMP, CMPについての網羅的な内容となりました。
ハンズオンを通じてKMP, CMPの実戦投入も検討したくなりました。以下、実際に導入するかを考えたときに気になったポイントです。
良さそうな点
-
デスクトップNativeアプリをモバイルのアプリケーションのソースコード一本で一貫して作成できる
弊社のサービスでは、PCで利用するユーザーが多いため、デスクトップNativeアプリの開発をして、よりサービスへのアクセスのしやすさへの貢献を視野に入れることもできると思いました。 -
少ない開発リソースで複数のプラットフォームのサービスを開発可能
現在弊社ではiOS/Androidの両プラットフォームで4人体制で開発しており、この恩恵を大いに享受できると思いました。
懸念点
-
スケーラビリティ
以前弊社では、旧アプリReact Nativeを使用して開発を試みた結果、機能面で実現したいことが中々実現できず、Nativeでの開発(Android → Kotlin, iOS → Swift)に切り替えました。そのため、スケールしてきたフェーズでも変わらず使用できるのか、は気になりました。 -
キャッチアップの労力がありそう
Androidエンジニアであれば、常日頃からKotlinを使用しているため、キャッチアップする必要はないですが、iOSエンジニアにとっては、少し慣れるまでに時間がかかりそうだと感じました。
Day2
Day2からは各セッションの聴講と協賛ブースを周っていきました。
セッションと気になった点についていくつか紹介していきます。
宣言的UIを学ぶ際に知っておくべき重要なコンセプト
近年のWeb開発の宣言的UIのトレンドを追うようにモバイルアプリ開発においても宣言的UIがJetpack Composeしかりホットになっています。このセッションではモバイルアプリ開発における各ツールキットの宣言的UIの違いや共通するコンセプトについて、React, SwiftUI, Jetpack Composeを比較して説明をしてくれました。
比べて整理してみるとJetpack ComposeとReactが似ていてコンポーネントの構文やSideEffectに共通点の多さに驚きでした。
また、Reactによって宣言的UIが広がっていったという点からも学べることが多いとして、今後の状態管理の手法に関してReactコミュニティより提唱され出しているSWR (State-While-Revalidate) についても紹介されました。これも気になったのでまた詳しく調べてみようと思いました。
オフライン・ファーストなアプリの実例: ガーナの農家アプリ
確立したネットワーク環境がなくても使用できるアプリの内部構造をご説明いただきました。Webアプリケーションでは、基本的にオンラインであることが前提条件なので、このようなことができるのがNativeアプリの魅力であると、改めて感じる機会になりました。
最も印象に残った点としては、アプリを作成して、現地でベータ版を使用してテストしたが、開発拠点では現地ガーナのネット環境が100%再現できず、現地テスト時になって色々気づいた点も多かったとのこと。近年リモートでメンバーが開発をすることが多いと思いますが、こちらのセッションを通して、その場に行って、一次情報を把握することの大切さを改めて学びました。
いまあるAndroidスキルでフルスタックデベロッパーになる💙
Kotlinを用いれば、Server-side Kotlinでバックエンド開発やKMPでマルチプラットフォームのフロント開発、さらにはデータサイエンスまでできるということで、本当になんでもできるなと驚いたセッションでした。
特にデータサイエンスへの活用が印象に残りました。IntelliJ IDEA UltimateのプラグインでKotlin Notebookのプラグインを使うことで、Jupyter Notebook同様の使い心地でノートブックをIDEA上で動かし、さらにはKotlinのランタイムで実行できてしまうということでした。
活用方法として、GitHubのリポジトリにデータ分析の結果をプッシュすることでリポジトリ内でグラフなども見ることができるので、プロジェクトの管理をモノレポでできるというのはかなり魅力的でした。
Day3
オープニング
公式アプリのコントリビュート参加者の一覧が紹介され自分のアイコンも載っていました!嬉しいです😊
データに基づく意思決定を支える、Google Analytics for Firebase のイベント送信
Androidアプリにおいてユーザー行動や画面遷移の分析を行うときにまず利用するのがFirebase Analyticsだと思います。これを用いる際のイベント送信やデータ分析の際の注意点が紹介されていました。
特にすごいと感じたのは、iOS / Androidでイベントの仕様を揃えたり、チームを超えてモバイルエンジニア以外にPdMなどとも仕様を共有して把握するための仕組みまで考えられていたことでした。
モバイルアプリケーションとRAG(検索拡張生成)
LLMを利用した技術にRAGというものがあります。LLMにプロンプトを投げる際に別のドキュメントなどからタスクに関連した文章を引っ張ってきてプロンプトに渡すことで、生成結果の精度を上げるというものです。これを100%On-DeviceのAndroid端末ローカルで完結した実装ができるのかというセッション内容でした。
一般にパラメータ数が多いほどLLMの性能が良いのですが、生成を行うにもメモリにLLMモデルが収まらないといけないというハードルなどがあります。サーバーサイドで実行してしまうのも解決策ですがローカルで実装するメリットもあり、RAGで用いる情報に端末上から引っ張ってきて通信をしなくても動かすこともできるようになってきます。
RAG実装する上ではLangchain4jというフレームワークが便利そうでした。また、LLMモデルをデバイス上に乗せる上でMediaPipeでは次元数の制限と利用できるモデルが少ないこともあり、セッション内ではONNXに変換をしたとのことでした。
まだまだ実装のハードルは高い状況に感じましたが、実装に取り組んだからこその知見が詰まっており、個人的にOn-DeviceのLLM実装に興味があったのでとても良い内容でした!
2Dアプリに3Dの輝きを
UIをリッチにする上で3Dオブジェクトを活用したいという時があると思います。そうなった時Andoridで作るかUnityで作るか、3Dオブジェクトを画像に書き出すかなど考えるかと思います。
Googleが提供するFilamentというライブラリを用いると簡単に3Dオブジェクトを描画ができ、簡単な回転や拡大などの操作もできるという内容でした。
これまで自分の知る限り3Dオブジェクトを用いるにはUnityプロジェクトをAndroidアプリに埋め込むUnity as a Libraryなどが選択肢になると思いますが、プロジェクトがかなり重くなるという欠点もありますしゲームエンジンが必要なほどではないというケースが多いと思います。その点Filamentは気軽に3Dオブジェクトを載せることができそうで使ってみたいと思いました。
協賛ブース
今年もたくさんの協賛ブースが出展しており、どれも目を引くものばかりでした。とても楽しませていただいとと同時に今後ブース出展をする際の参考にとてもなりました。
LINEヤフーさんのコードの改善点を探す問題やWEDさんのComposeで描いたデザインがレシートとして印刷されたり、Hondaさんの車やバイクの実物の展示がとても印象に残っています。
毎年、ブースを回るだけで抱えきれないほどたくさんのノベルティをいただけるのもとても楽しいです!
最後に
節々に運営のすごい取り組みが見えたカンファレンスでした。
例えば、各セッションの録画がなんと最速当日中に公式Youtubeチャンネルにアップロードされています。会場で見切れなかったセッションや見返したい資料が無数にあるのでとてもありがたいです。
色々なセッションを見たり、オフラインで参加し社外の人とも交流を交わすことで得られることがたくさんありました。普段の業務だけでは得られる情報の幅が違い、AndroidやKotlinでこんなことまでできるのかと思わせてもらうことができました。他社の活動や文化を見ることで自分たちのチームを顧みるにもとても良い刺激になりました!
Discussion