Timee Product Team Blog

タイミー開発者ブログ

droidcon San Francisco 2023レポート 〜セッション紹介編〜

こんにちは、Androidエンジニアのはる(@ haru2036)とシャム(@arus4869)です!

私たちは2023年6月8-9日にアメリカ合衆国サンフランシスコで開催されたdroidcon San Francisco 2023に参加してきました。

前回のイベント報告編に引き続き、実際のセッションを紹介していきたいと思います。

tech.timee.co.jp

特に気になったセッション(haru編)

Mobile Feature Flags and Experiments at Uber

はじめに取り上げるのはUberのMahesh HadaさんとArun Babu A S PさんによるUberでのFeature Flag運用に関するセッションです。

Uberでは大量のFeature FlagやExperimentalなFeatureを管理するために独自のFeature Flag自動生成などの取り組みを行っているそうで、そういったFlagのFetchをするタイミングもサービスの性質上「大きく位置情報が変化したとき」など特殊なものがあるということでした(日本から渡航してきたばかりの私の端末上でもそれをトリガーとしたFlagのFetchが走ってたんだなあ、と謎の実感を持ちながら聞いていました)。

また、そういったFlagによって問題が起きた時にできる限り早くロールバックするためにFCMを用いて緊急ロールバック用メッセージを送信しているという話を聞いた時はなかなか衝撃を受けました。

タイミーでもFirebase Remote Configなどを使ったFeature Flag管理を行っているのですが、それとは桁外れに大規模で即時性の高い管理が行われていてさすがだなと思いました。

上記の緊急ロールバックの話など、世界で展開している大きなサービスならではの手法を知ることができたセッションでした。

Unlocking the Power of Shaders in Android with AGSL and Jetpack Compose

次に取り上げるのはRikin MarfatiaさんのAGSLをJetpack Composeで使うセッションです。

AGSLはAndroid上で利用できるシェーダ言語で、GPUを使用して画面を描画することができます。

私は趣味でUnityなどでシェーダを扱っていたのですが、それとよく似た記法のAGSLを用いることで視覚的にリッチなUIを実現することができるそうでした。

実際にデモとして紹介されていたUIはボタンが電球のように光ったり、写真ギャラリーの切り替え時に色収差を発生させるなどのとても派手な表現でしたが、それをCompose上で簡単に実現できることに感動しました。

AGSLについてはこちら↓

developer.android.com

Reimagining text fields in Compose

最後に取り上げるのはGoogleのZach KlippensteinさんによるJetpack ComposeにおけるTextFieldの成り立ちとこれからについてのセッションです。

多くのプロダクトと同様に、MVPから始めてユーザースタディを繰り返しながら開発していったそうなのですが、これまた多くのプロダクトと同様に現在では技術的負債も貯まってきてしまっているそうです。

そこで、それを解消すべく大きくAPIを変更したBasicTextField v2を開発しているそうです。ユーザースタディ参加者も募集中だよ!とのことです。参加してみたいなあ。

GoogleでのCompose開発の舞台裏と、TextFieldの未来を同時に知ることができる一粒で二度美味しいセッションでした。

speakerdeck.com

特に気になったセッション(syam編)

次にsyamが特に気になったセッションを紹介していきます!

ADAM GREENBERGさんによるセッションを紹介します。

新しいコードベースを理解し、その知識を活用するための具体的な手法と戦略について深く掘り下げたセッションでした。ADAM GREENBERGさんは、自身の経験を基に、コードベースの理解、ドキュメンテーションの作成、そしてその知識の共有という3つの主要なステップを中心にお話ししていました。

以下にセッションで触れた3つの重要なステップについて触れます。

1. コードベースの理解

新しいプロジェクトや既存のコードベースに取り組む開発者にとって、コードベースの理解は非常に重要なステップである。コードベースの理解を促進させるためにはアーキテクチャ図の作成やデバッグツールの使用などが重要であると話していました。

2. ドキュメンテーションの作成

ドキュメンテーションをすることは、学んだこと振り返ったりを他の人々と共有するための重要なステップであると説いています。アーキテクチャ図の作成、重要な機能の説明、特定のコードスニペットの説明など必要に応じてドキュメンテーションする必要があると話していました。

3. 知識の共有

他の開発者が自分の知識を利用し、コードベースをより効果的に利用するための重要なステップです。このステップがチーム全体の生産性と効率を向上させ、個々の開発者が自身の理解を深めるのに役立つと述べました。

このセッションは、新しいコードベースを効果的に理解し、その知識を活用・共有するために大事なポイントをお話ししていました。

ちょうど僕たちのチームもオンボーディングや共通認知をとるためのREADMEを作成していることもあり、当たり前のことかもしれませんが、改めて聞くことができたのでこのセッションは有用でした。

Find your way with GoogleMap() {}

次は、BRIAN GARDNERさんによるセッションを紹介します。

このセッションでは、その可能性を具体的に示すために、マップの表示、マーカーの追加、そしてクラスタリングといった基本的な機能がどのように簡単に実装できるのかを学びました。

特に印象的だったのは、大量のマーカーを効率的に表示するためのクラスタリング機能です。マーカーの数が増えると、地図が混雑し、ユーザーが特定のマーカーを見つけるのが難しくなります。しかし、クラスタリングを使用することで、近接するマーカーを一つのクラスタとして表示でき、地図の見やすさとパフォーマンスを向上させることができるとのことです。

また、このセッションでは、具体的な実装方法を確認するためのソースコードも提供されました。

JetpackComposeのGoogleMapを使用する際にいくつか注意点も述べていました。

クラスタリングについての注意点として、MarkerをClustering内で使用しないようにとの警告がありこれは、IllegalStateExceptionを引き起こす可能性があるそうです。

また、パフォーマンスを向上のためにMapsInitializer.initialize(context, MapsInitializer.Renderer.LATEST)を使用して、最新のレンダラーを利用することを推奨していました。

さらに、Paparazziテストで、特にプレビューモードでの早期リターンを利用して、レイアウトを保持するためのBoxを返すと良いとのことでした。

ANR問題についても触れられていましたが、具体的な解決策は聞き取れなかったので、調べてみようかなと思います。

ちょうどGoogleMap周りをコンポーズ化している時だったので、とても有り難かったです。

セッションスライド

speakerdeck.com

ソースコード

github.com

Animating content changes with Jetpack Compose

最後にKINNERA PRIYA PUTTIさんによるセッションを紹介します!

Jetpack Compose for Desktopを使ってスライドを作っており、随所にアニメーションが動くすごいプレゼンテーションでした!

KINNERA PRIYA PUTTIさんは自身の実践を踏まえ、UIアニメーションをより魅力的にするための各種アニメーションテクニックについて語ってくれました。

以下にセッションで紹介された注目すべきテクニックについて触れていきます。

1. CrossFadeによるコンテンツ間の切り替え

新旧の画面や要素間のトランジションを滑らかにするCrossFadeは、ユーザーがアプリの使用中に感じる違和感を軽減するための非常に重要な要素です。彼は、これがいかに自然なユーザー体験を生むかについて語っていました。

2. animateContentSizeによるコンテンツサイズのアニメーション化

コンテンツのサイズを変更する必要がある場合、animateContentSizeを用いるとその変更がなめらかになります。これは、ユーザーが自由にコンテンツのサイズを調整できるようにするための重要なステップであると彼は指摘していました。

3. 各種UI要素に対するアニメーションの追加

リスト、詳細画面、ナビゲーションドロワー、ボトムシート、ダイアログなどのUI要素にアニメーションを追加することで、ユーザーフレンドリーなUIを実現する方法について具体的に語られました。

このプレゼンテーションは、Jetpack Composeを活用して、ユーザーにとって使いやすく、魅力的なUIアニメーションを創出するための重要なポイントを提供していました。

我々のチームもUI開発におけるアニメーションの活用に取り組んでおり、このような新たな視点やアイデアを得られることは非常に有意義でした。

まとめ

今回はセッションの内容をいくつか抜粋して紹介させて頂きました。

もしより詳しい内容や海外カンファレンスの様子に興味を持っていただけたら、カジュアル面談でお話しすることもできますので是非一度お話ししましょう!

devenable.timee.co.jp