こんにちは、DevRelブロックのikkouです。2024年9月11日から13日の3日間にわたり「DroidKaigi 2024」が開催されました。ZOZOはゴールドスポンサーとして協賛し、12日と13日の2日間にわたりスポンサーブースを出展しました。
本記事では「Androidエンジニアの視点」でZOZOから登壇したセッションと気になったセッションの紹介、そして「DevRelの視点」で協賛ブースの様子と各社のブースコーデのまとめをお伝えします。
- 登壇内容の紹介
- Androidエンジニアが気になったセッションの紹介
- ZOZOブースの紹介
- DroidKaigi 2024協賛企業のブースコーデまとめ
- おわりに
登壇内容の紹介
今年のDroidKaigiではセッションに2名が採択され、パネルトークに1名が登壇しました。会場で発表されたセッションとパネルトークについて紹介します。
Jetpack Compose Modifier徹底解説
DevRelブロックのゐろは(@wiroha)は昨年の『よく見るあのUIをJetpack Composeで実装する方法〇選』に続き、今年もJetpack Composeをテーマとした内容で登壇しました。今回はピックアップした全47種のModifierをコードとアニメーションを用いてわかりやすく説明しました。
講演のアーカイブは公開され、発表資料はアニメーションを確認できるようGoogle スライドで公開しています。当日見逃した方はもちろん、会場で目にした方も改めて見ると発見があるかもしれません。
ゐろはからのコメント
昨年に続き、今年もJetpack Composeのお話をさせていただきました。Ask the Speakerなどで質問・感想をいただいて交流できるのがとても楽しかったです! みんなでAndroidのコミュニティを盛り上げていきたいです!
2024年最新版!Android開発で役立つ生成AI徹底比較
ZOZOTOWN開発1部 Android1ブロックのにしみー(@nishimy432)とゐろはは生成AIをテーマとして共同登壇しました。今回はChatGPT、GitHub Copilot、そしてGeminiの3つについて、Android開発ならではのシナリオを交えながら比較して紹介しました。
話題のテーマということもあってか登壇後のAsk the Speakerも盛り上がっていました。こちらも講演のアーカイブと発表資料をぜひご覧ください。
にしみーからのコメント
今年はAndroid開発における生成AIツールの実践的な使い方についてお話しさせていただきました。発表を通じて、開発のヒントや新たな視点を提供できていれば嬉しいです!
ゐろはからのコメント
Android開発を前提にしつつも他の技術分野にも活用できる内容だったため、幅広い方々が聞いてくださっていました! 満席で入れなかった人もいたそうで、スライドや動画を見ていただけると嬉しいです。
パネルトーク 〜Androidエンジニアのキャリアとスキルアップ〜
会場とライブ配信のハイブリッド形式で開催されたパネルトークにAndroidエンジニアのテックリードを務めるいわたん(@iwata_n)が登壇しました。「Androidエンジニアのキャリアとスキルアップ」をテーマとして、3名のパネラーが様々な質問に答える形で実施されました。
x.comJellyfishで開催中のパネルトークの様子です!
— DroidKaigi (@DroidKaigi) 2024年9月12日
Androidアプリ開発者としてのキャリアやスキルアップの話題について色々質問していきます!#DroidKaigi pic.twitter.com/6VGjTU6gai
いわたんからのコメント
パネルトーク楽しかったです! 2017年から運営に関わってますが、実はDroidKaigi初めての登壇でした。誰かのためになるような話が出来ていたら幸いです。
Androidエンジニアが気になったセッションの紹介
ZOZOのAndroidエンジニアが気になったセッションをいくつか紹介します。
仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
ZOZOTOWN開発1部 Android2ブロックの高橋です。Sumio Toyama (sumio_tym)さんの『仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう』を紹介します。
このセッションはJetpack ComposeのPreview関数を活用したVRT(Visual Regression Test)の概要と導入方法を紹介するという内容でした。VRTを導入するためのステップや、それぞれのステップで使用するツールの使い方が詳細に説明されており、VRTを基礎から学べるセッションでした。また、このセッションでは様々なバリエーションでのVRT/スクリーンショットテストを実施するための実践的な手法も紹介されており、見落としがちなパターンのリグレッション検知にも大変役立ちそうな内容でした。
では、セッションの中から個人的に重要だと感じた点をいくつか紹介します。
まず、セッション中における「スクリーンショットテスト」と「VRT」という用語の定義についてです。どちらもスクリーンショットを使用したUIのテストですが、スクリーンショットテストはスクリーンショットを撮影して保存するまでを自動化します。一方、VRTでは画像の撮影と保存に加え、過去に撮影したスクリーンショットとの比較までを自動化します。どちらのテストについても最終的なスクリーンショットおよび差分の確認は人間が行います。
次に、Preview関数を収集する方法についてです。Preview関数を使用したスクリーンショットを撮影するには、プロジェクト内からPreview関数を収集する必要があります。その際に利用できるのがShowkaseです。ShowkaseはAirbnb社が公開しているオープンソースのライブラリで、プロジェクト内にあるJetpack ComposeのUI要素を整理する機能を提供しています。Showkaseではプロジェクト内のPreview関数を収集するAPIが提供されているため、VRT/スクリーンショットテストにも活用できます。しかし、@Preview
アノテーションに渡すことができる設定値は部分的にしか取得できません。そのため、Preview関数で設定された値を使用して様々なバリエーションのスクリーンショットを撮影するには代替となるツールを選択する必要があるようでした。
最後に、スクリーンショットの撮影方法についてです。スクリーンショットの撮影には、ComposeTestRuleとRobolectric、Roborazziを使用します。ComposeTestRuleはJUnitのTestRuleで、Composableのテスト環境を構築するために使用します。RobolectricはAndroid端末やエミュレータを使用することなく、Androidフレームワークに依存したコードをテストするためのフレームワークです。Robolectricを使用することで開発用PCやCI環境のJVM上でテストを実行できるため、インストゥルメンテーションテストより高速にテストの結果を得ることができます。RoborazziはRobolectricを使用してVRT/スクリーンショットテストをするためのライブラリです。これらのツールと前述のShowkaseを組み合わせることで、様々なバリエーションスクリーンショットを撮影できます。セッションではツールの具体的な導入方法がコードと合わせて解説されているため容易に導入できそうでした。
Android端末にはフォントサイズやダークモードなどの様々な設定があり、普段の開発の中ですべてのバリエーションの動作を確認することは難しいです。このセッションを参考にVRTやスクリーンショットテストを導入すれば多くのバリエーションのUIを効率的に確認できるため、アプリの品質向上・維持に役立ちそうだと感じました。
WebADBを使用したAndroid専用端末化への自動キッティング手法
ZOZOTOWN開発1部 Android2ブロックの高橋です。Hisamoto Kunimineさんの『WebADBを使用したAndroid専用端末化への自動キッティング手法』を紹介します。
このセッションはADBをブラウザ上から使用できるようにし、非エンジニアでも簡単に利用できるキッティングやデバッグ用のツールを作成する方法を紹介するという内容でした。ADBはAndroidアプリの開発やデバッグにおいて非常に便利なツールです。しかし、環境構築やコマンドでの操作が必要であり、非エンジニアが使用するにはハードルが高いものでした。このセッションで紹介されている方法を用いれば、Androidエンジニア以外でもWebアプリを介してADBを簡単に使用できます。
このセッションでは「任意のAPKをインストールし、端末のフォントサイズを2段階大きくする」という操作を例として、adbコマンドを実行するWebアプリの作成方法を説明していました。
まずは、実行する必要があるadbコマンドを整理します。端末のフォントサイズを変更するには、「APKをインストールする」「フォントサイズの設定画面を開く」「フォントサイズを大きくするボタンを2回タップする」という操作が必要になります。これを実現するには下記のコマンドを使用します。
adb install [APKファイル]
- APKをインストールする
adb shell am start -a android.settings.ACCESSIBILITY_SETTINGS
- ユーザー補助の設定画面を開く
adb shell input touchscreen tap [タップするX座標] [タップするY座標]
- 画面をタップする
これらのコマンドを組み合わせることで端末を目的の状態にできます。しかし、タップ操作のコマンドは瞬時に実行されるため画面遷移を伴うタップ操作をすると、画面遷移の完了前に後続のタップ操作が実行されてしまいます。そのため、sleep
などのコマンドを活用して操作のタイミングを制御する必要がある点に注意が必要のようでした。また、セッションではadbコマンドでの座標指定ではない方法で端末をタップ操作する方法も紹介されていました。
次に、adbコマンドを実行できるWebアプリを作成します。ブラウザからadbコマンドを実行するには、TangoというADBクライアントが利用できます。Tangoを使用して前述に作成したadbコマンドを実行することで、Webアプリを介して端末を目的の状態にできます。
セッションではadbコマンドのスクリプトを作成する際の注意点やTangoの使用方法がコードや動画を交えて紹介されており、実際にツールを作成するイメージが湧く内容となっていました。
今後デバッグツールを作成する際にはこのセッションの内容を参考にしたいと思います。
Android StudioのGeminiでコーディングの生産性を高める
ZOZOTOWN開発1部 Android1ブロックの高田です。私が聴講したAdarsh FernandoさんとChris Sincoさんによるセッション『Android StudioのGeminiでコーディングの生産性を高める』についてご紹介します。
まず最初に、以下ではGoogle AIであるGeminiを「Gemini」、Geminiとの質問履歴や文脈を「コンテキスト」、Geminiへの質問内容や質問の行動自体を「プロンプト」と記載します。
セッション全体を通して、Android StudioのGeminiを活用し、Android開発のライフサイクル全体で生産性を向上させる手法が、ライブデモを交えて発表されました。
魅力的な3つのポイント
個人的に特に魅力的だったポイントは以下の3つです。
- Android Studio内でシームレスに利用可能:GeminiはAndroid Studioという既存のIDE上で簡単にセットアップでき、違和感なく使用できます
- 既存のプロジェクトに追加する形で使用:Geminiは既存のプロジェクトに上乗せしてサポートする形で使えます。これにより、開発フローを中断せずに導入が可能です
- 無料で使用可能:Geminiの基本的な機能は無料で利用できる点も大きなメリットです
Geminiの誕生背景
セッションの冒頭では、Geminiが開発された背景として以下の3つのテーマが掲げられていました。
- 開発者がユーザー体験の向上につながる創造的な側面に集中できるようにする
- 高品質なコードをサポートし、より健全なエコシステムを構築する
- 最新技術を活用しやすくする
セキュリティ機能:.aiexcludeファイル
Gemini使用時のセキュリティ対策として、.aiexclude
ファイルが紹介されました。AIツールを使用する際にはプライバシーやセキュリティ面が気になるところですが、このファイルを使用することで、Geminiに読み取らせたくないファイルやディレクトリを制御できます。設定は.gitignore
ファイルと同様の文法で記述できるため、機密情報を柔軟に保護できる点が非常に重要です。
デモプロジェクト:Compose Pokedexer
セッションのデモ部分では、PokeAPIを使用した初代ポケモン図鑑のプロジェクトをベースに、Geminiを活用してお気に入りフィルタリング機能を追加する手順がライブコーディング形式で紹介されました。
特に注目したGeminiの機能
- Custom Code Transformation
コードの特定部分を選択し、そのままGeminiに分析させることができます。プロンプトを与えることで、さらに精度の高い変更を提案してもらえます - 変数の一括リネーム機能
コード全体の文脈を考慮し、適切な変数名を提案してくれます。また、どの変数に適用するか選択も可能です - Unitテストのシナリオ自動生成
Unitテストのシナリオを自動生成してくれる機能もあります - Crashlyticsサポート
CrashlyticsとVitalsのデータに基づいて、Geminiがバグやクラッシュの原因と修正方法を提案します
今後の機能追加予定
今後、Multiple Chat SessionsやPrompt Libraryといった機能も開発予定と紹介されました。これにより、複数のコンテキストを持つプロンプトを同時に管理したり、プロンプトをセットで保存したりできるようになる予定です。
まとめ
セッション内でも指摘がありましたが、Geminiはまだ開発途中であり、改善の余地があります。例えば、コールバック引数の渡し漏れが発生することや、部分的に提案されたコードを手動でコピー&ペーストする必要がある場合もあります。しかし、今後のアップデートでこれらの問題も解消されていくと期待されています。
Android開発では、複雑なUIやライフサイクル管理など、多くの課題に直面します。しかし、Geminiの活用によって、それらの課題が解決される未来を期待できます。セッションを通じて、私自身も今後Geminiを積極的に活用し、開発効率をさらに向上させていきたいと感じました。
Jetpack Compose Modifier徹底解説
ZOZOTOWN開発2部 Androidブロックの勝木です。wirohaさんの『Jetpack Compose Modifier徹底解説』を紹介します。
私は、約2年前にプログラミングのことが一切わからない状態で全く異なる業種からAndroidエンジニアの道を進み始めました。幸いなことに毎日教えていただきながら現在ではJetpack Composeも少しずつ学んでいます。そんな中、今回wirohaさんのセッションは私にとって非常に魅力的な内容だったため紹介したいと思います。
このセッションでは、基本的なCompose Modifierから普段使わないようなCompose Modifierまで約50種類のCompose ModifierをZOZOのプロダクトであるZOZOTOWN、WEAR、FAANSを交えて紹介するという内容でした。
まず、プロダクト内ではどのようなCompose Modifierが多く使われているかの集計がされていました。多く使用されているCompose Modifierの中でカテゴリごとにピックアップし、ひとつずつどういった挙動なのか画像やアニメーションを用いて視覚的にも非常にわかりやすい内容でした。また、カテゴリはaction、alignment、border、drawing、padding、pointer、semantics、size、testに分けられて説明されていたため「このCompose Modifierはこういう時に使えそうかも」とイメージが湧きやすかったです。
中には使用回数が少ないけれど「個人的に好きで」や「面白かったので紹介した」というマイナーなCompose Modifierの紹介もあり、聴講していてどんどん興味が湧いてくるような内容でした。一部抜粋するとtransformableやbasicMarqueeなどが紹介されており、transformableはユーザのジェスチャー(ピンチイン/アウト、回転など)に応じてComposableのサイズや回転を変更できるようになるもので「こんなModifierがあるんだ!」、と見ていて面白いCompose Modifierでした。またbasicMarqueeに関しては、幅が広すぎて利用可能なスペースに収まらないテキストの場合、文字が流れるような動きのあるもので視覚的にお洒落で、使える機会があればぜひ活用してみたいと思うCompose Modifierでした。
最後にプロダクトの1位〜54位のModifier関数の使用回数総合ランキングが紹介されていました。1位〜3位のpadding、height、fillMaxWidthにおいては1000回以上と圧倒的に使用回数が多かったり、逆に1回しか使用されていないCompose Modifierもいくつかありました。1回しか使用されていないCompose Modifierは一体どういった箇所で使用されているのか、またどういった要素のものなのか個人的に深掘りしたくなりました。
wirohaさんの『Jetpack Compose Modifier徹底解説』は、初学者から熟練者まで幅広く活用できる内容だったと思います。今まさに初学者である自身がより知識を深めたいと思う内容に当てはまっていたため、収穫の多いセッションでした。今後こちらを参考にしながら様々なCompose Modifierを活用していきたいと思います。
Debugging: All You Need to Know
ZOZOTOWN開発2部 Androidブロックの小林です。Jumpei Matsudaさんの『Debugging: All You Need to Know』を紹介します。
このセッションは、Debugスキルを広く学べる内容となっています。Debugスキルは、不具合の原因特定や修正、問い合わせ対応はもちろん、新機能の開発時にコードの挙動を確認する際にも用いる汎用的なスキルです。このセッションでは、Android Studioの機能やDebug用オプションを使うテクニックが説明されており、Androidエンジニアから見て取っ付きやすく、かつデバッグ手法や効率的なデバッグ方法が学べる内容でした。
セッションの中から、個人的に驚いたポイントを2つ紹介します。
1つ目は、ブレークポイントの様々なオプションです。ブレークポイントには、ロギングや条件付きブレークポイントと言ったオプションがあります。ロギングはブレークポイントが通過したらメッセージを表示できます。ログの形式はいくつかのパターンがあり、ブレークポイントのヒット表示、スタックトレース、式の評価と結果のログがあります。また、条件付きブレークポイントは、アプリの中断を頻発させたくない時に活用できます。条件は、評価式、通過数、ブレークポイント間の依存などがあります。評価式の場合、評価式がtrueを返すときだけブレークポイントを機能させます。通過数は指定した回数分、通過した時にブレークポイントを起動できます。ブレークポイント間の依存は、別のブレークポイントがすでに機能していることを起動条件にできます。このような、ブレークポイントのオプションを活用することでアプリの処理を追いかける時に効率的なデバッグが可能になります。
2つ目は、特定のスレッドだけを中断できる機能です。例えば、Coroutineのデバッグ時に活用できます。CoroutineNameクラスとCoroutineデバッグモードを使うと良いです。Coroutineデバッグモードが有効の時、Coroutineごとにユニークな名前が振られます。suspend functionでも問題なく動きますが、最適化によってsuspend function内の変数が解放されてしまうことがあります。その場合は、-Xdebugオプションをコンパイラに渡すことで、デバッグ時のみ最適化をオフにできます。最適化を外すとメモリリークのリスクがあるので、デバッグ時のみこのオプションを使うように気を付ける必要があります。特定のスレッドを追いかけたいといった時に便利に活用できそうです。
今まではブレークポイントを使っていたものの、普段使わない機能ばかりでした。このセッションで得たデバッグ手法はすぐに使える内容でもあり、デバッグスキルの向上に役立つ内容でした。
KSPの導入・移行を前向きに検討しよう!
FAANS部 フロントエンドブロックの田中とZOZOTOWN開発1部 Android1ブロックの愛川です。shxun6934さんの『KSPの導入・移行を前向きに検討しよう!』を紹介します。
このセッションでは、KSPとkaptの違いや移行時の注意点、KSP2の使用法が紹介されています。田中が所属するFAANSでもKSPへ移行しているものの、まさしく「導入・移行・実装したことあるけど、あんまりわかってない」状態だったため、とても興味をひくセッションでした。
このセッションのおすすめポイントは以下の3つです。
1. KSPとkaptの詳細な比較
KSPとkaptの位置付けから特徴、さらにはコード生成の仕組みまで詳細に説明されていました。まず、両者の位置付けと特徴について、Compiler PluginやAnnotation Processorから順を追って説明されており、各要素の関係性が分かりやすく図示されていました。また、普段Androidネイティブの開発がメインなのであまり意識していなかったのですが、KSPはKotlin Multiplatformでも使えると知り、KSPの有用性に驚きました。kaptのコード生成を紹介するパートでは、コードサンプルを使用して生成時の流れが説明されており、スタブやmetadataといった普段の開発で中々意識できない点まで知ることができました。
2. 混在した時のビルド時間の比較
KSPを使用した場合にどのくらい早くなるのか、また混在している時にどう影響が出るのかを数字で簡潔に示してくれていました。混在している場合はビルド時間が逆に延びてしまうため、一気に移行する or モジュール単位で移行・導入するのがおすすめとのことでした。
3. K2との関係性
最後に、K2 Compiler上で動くKSP2の説明があり、特に、エントリポイントを別プログラムから呼べるという話には衝撃を受けました。セッションの中では、実際に単体テストを実行するまでの一通りの流れが紹介されており、自分でも試してみたくなりました。
自身が所属するプロジェクトでもKSPへの移行を少しずつ進めているものの、KSPがどういったものなのかを理解し切れないまま作業するタイミングが多々ありました。このセッションを参考に、KSPの理解を深めながら移行作業を進められればと思います。
ZOZOブースの紹介
会期中はAndroidエンジニアを中心として10名以上のZOZOスタッフが入れ替わりながらブースに立っていました。DroidKaigi 2024でもiOSDC Japan 2024と同じように、ZOZOブースでは今年5月にリニューアルした「WEAR by ZOZO」の「ファッションジャンル診断」をメインコンテンツとして展示していました。
この「ファッションジャンル診断」は、WEARに投稿されている好みのコーディネートを5枚以上選ぶことで、AIがファッションジャンルを診断し、おすすめのコーデを教えてくれる機能です。
ブースに訪れた方々には、お手元の、またはデモ用に用意したAndroid端末で「ファッションジャンル診断」を体験してもらいました。iOSDC Japan 2024でもそうでしたが、興味を持って体験していただく方が多く、とても嬉しい気持ちになりました。この「ファッションジャンル診断」は、WEARを初めてインストールした方も起動直後にユーザー登録の必要もなく試せるため、今回のようなブース出展との相性が良かったと考えています。
ブースで「ファッションジャンル診断」を体験または診断結果を見せてくれた方には、その診断結果にあわせた診断結果ステッカーをお渡ししました。ステッカーの種類は全部で144種類ありますが、全種類のステッカーを用意していることに驚かれている方もいました。各ジャンルのステッカー枚数は均一ではなく、一般的な傾向として出やすいシンプルやラフを多めに用意しています。その他のジャンルはZOZOエンジニアの傾向と先行するiOSDC Japan 2024の傾向を加味して足りなくなりそうな分を少し多めに用意していました。
ブースに立っていると様々なAndroid端末を目にしました。まだ見かける機会がそう多くないGoogle Pixel 9 Pro FoldやGalaxy Z Fold6などのFold端末も、ここDroidKaigi 2024の会場では持っている方が目立ちました。サービスの特性上、積極的にFold端末への対応を進めている企業もあり、学びがありました。
ノベルティはiOSDC Japan 2024と同様のものを配布しました。特にZOZOTOWN公式キャラクターである箱猫マックスくんのステッカーはDroidKaigi 2024でも人気で、一部のアイテムは会期中に在庫切れとなりました。これを機に箱猫マックスくんのことを知った方は、ぜひ絶賛配信中のLINEスタンプ「箱猫マックス Vol.4からVol.9」もご覧ください!
また、デザイナー発案の「“一合一会”米」「“失敗を水に流す”トイレットペーパー」に続く「洒落の効いたアイテム」である「色“縁”ぴつ」も特定の条件を満たした方にお渡ししていました。来年はきっと別のZOZOならではのノベルティが登場していることでしょう!
改めてDroidKaigi 2024でZOZOブースに訪れていただいた皆様ありがとうございました!
DroidKaigi 2024協賛企業のブースコーデまとめ
あっすーです。DroidKaigi 2024の協賛企業ブースを回りながら、各社のコーデを撮影しました!(iOSDC Japan 2024で撮影した協賛企業のコーディネートはこちら)
先日協賛したiOSDC Japan 2024では拝見しなかった企業をメインに注目しました。DroidKaigiならではのデザインが目立つ今回も、ファッションテック企業ZOZOの視点でお届けします。
協賛ブースというとブースの出し物や装飾に目がいきがちですが、各社コーディネートを含めて工夫を凝らしているのがわかりますね! お忙しい中ご協力いただいたブースの皆さん、本当にありがとうございました!
おわりに
ZOZOは毎年DroidKaigiに協賛し、ブースを出展していますが、多くの方との交流を通して今年も有意義な時間を過ごせました。実行委員会の皆さんに感謝しつつ、来年もまた素敵な時間を過ごせることを楽しみにしています!
ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。
また、会期中は混雑していることも多く、じっくりとお話しする時間が取れなかったので、もう少し詳しく話を聞きたい! という方はカジュアル面談も受け付けています。
それではまた来年のDroidKaigiでお会いしましょう! 現場からは以上です!