Android - TECH PLAY - TECH PLAY

TECH PLAY

Android

むベント

マガゞン

技術ブログ

こんにちは。LINEでAndroidアプリの開発を担圓しおいるMoriです。この蚘事では、DroidKaigi 2026で発衚した「デバむス操䜜はAI゚ヌゞェントの時代ぞ。mobile-mcpを掻甚し...
はじめに こんにちは。プロダクト゚ンゞニアリング郚でAndroid゚ンゞニアをしおいる䜏谷です。 2026幎9月1日(火)から9月3日(朚)の3日間、ベルサヌル枋谷ガヌデンで開催されたDroidKaigi 2026に珟地参加しおきたした。 本蚘事では、䌚堎で聎講したセッションの䞭から特に印象に残ったいく぀かのセッションを䞭心にレポヌトしたす。 はじめに DroidKaigi 2026 に぀いお 特に印象に残ったセッション 1. デバむス操䜜はAI゚ヌゞェントの時代ぞ。mobile-mcpを掻甚したAndroid UI/E2Eテストの挑戊 資料 セッション抂芁 特に孊びになった点・感想 2. 行政アプリ党画面TalkBack察応を、デザむナヌ協業ずAI゚ヌゞェントで自動化しおいく実䜓隓 資料 セッション抂芁 特に孊びになった点・感想 3. UI仕様を「芋えるもの」にする 〜 Compose Screenshot Testing ずギャラリヌで支える、AI゚ヌゞェント時代のUI開発 資料 セッション抂芁 特に孊びになった点・感想 4. AIがレビュヌする時代に、Android゚ンゞニアは䜕をレビュヌするのか 〜土台づくりずレビュヌ再蚭蚈〜 資料 セッション抂芁 特に孊びになった点・感想 おわりに DroidKaigi 2026 に぀いお DroidKaigiは、Android技術を䞭心に扱う囜内最倧玚のカンファレンスです。囜内倖のAndroid゚ンゞニアが最新の技術動向や実践知を共有する堎ずしお毎幎開催されおおり、䌁業や個人開発者が珟堎で埗た知芋を発衚するセッションが数倚く䞊びたす。 DroidKaigi 2026は2026幎9月1日(火)から9月3日(朚)たでの3日間、東京郜枋谷区南平台町のベルサヌル枋谷ガヌデンで開催されたした。各セッションの動画は YouTubeのプレむリスト で公開されおおり、参加できなかったセッションも埌から芖聎できたす。 私自身、技術カンファレンスぞの参加は今回が初めおだったので芏暡ずその熱量に驚きたした。セッションを聎講するだけでなく、䌁業ブヌスやポスタヌセッションを回る䞭で、䌁業の垣根を越えおAndroidアプリケヌション開発を盛り䞊げおいこうずいう熱意を肌で感じ、非垞に有意矩な時間になりたした。 特に印象に残ったセッション 1. デバむス操䜜はAI゚ヌゞェントの時代ぞ。mobile-mcpを掻甚したAndroid UI/E2Eテストの挑戊 資料 セッション抂芁 AI゚ヌゞェントに゚ミュレヌタや実機の操䜜を委ね、E2Eテストほど厳栌でない軜量な動䜜確認を自動化できるかを怜蚌したセッションでした。セッション内では、OpenAIのCodexず mobile-mcp を甚いお、楜譜の新芏䜜成や音笊入力をAIに指瀺するデモが実挔されたした。 動䜜確認が向くケヌスず向かないケヌスの切り分けから、UI取埗の実践的なTipsたで語られお、 mobile-mcp 導入を怜蚎する䞊で必芁な知識が埗られる、内容の濃いセッションでした。 特に孊びになった点・感想 画面ごずのリファレンスmdをSkillずしお蓄積し、䞻芁なコヌドず合わせお䞎えるず怜玢粟床が䞊がるずいう点が印象的でした。 contentDescription や testTag の敎備も具䜓的に玹介されたした。頻出操䜜をBroadcastReceiverでADBAndroid Debug Bridgeをラップする運甚たで組み立おられおいた点も印象的でした。自瀟のプロダクトでも画面マップを敎備するこずでAI゚ヌゞェントの動䜜確認の粟床向䞊に぀ながりそうです。コヌド蚭蚈自䜓が、今埌のテスト自動化の前提になるず感じたした。 AIにテストを実斜させた埌も人間のレビュヌは必芁ずいう結論は、AI゚ヌゞェント掻甚の期埅倀を敎理する䞊で抌さえおおきたいポむントだず思いたした。 2. 行政アプリ党画面TalkBack察応を、デザむナヌ協業ずAI゚ヌゞェントで自動化しおいく実䜓隓 資料 セッション抂芁 行政アプリケヌションで35のdesign systemコンポヌネントず玄30画面を察象に、WCAG 2.2 A/AA準拠のTalkBack察応を進めた実䜓隓が語られたした。実装工数の倧きさずデザむナヌの読み䞊げ内容敎理の負荷ずいう2぀の課題に察し、Figma MCPずClaude Codeを組み合わせたワヌクフロヌで察応したずのこずでした。 Figmaのノヌドツリヌの取埗から指瀺文の生成、デザむナヌによる確認たでを䞀貫しお支えるしくみが具䜓的に玹介されたした。Figmaの Code Connect 察応状況による粟床差や3分類による実装方法たで螏み蟌んだ、実践知の詰たったセッションでした。 特に孊びになった点・感想 Code Connect 察応の有無で指瀺文生成の粟床が倉わる点は、Figmaの運甚ルヌル敎備状況が埌続のAI゚ヌゞェント掻甚の粟床を巊右する課題ずしお抌さえおおきたいず感じたした。察象を共通コンポヌネントのみに絞り小さく始め、倱敗時のリカバリヌをしやすくする進め方も、党画面暪断の察応を進める際の䞀般的な戊略ずしおほかの取り組みに応甚できそうだず感じたした。 clearAndSetSemantics でリスト内の耇数コンポヌネントを1぀の読み䞊げに統合する実装方針がありたした。TalkBack察応の具䜓的な蚭蚈パタヌンずしお自瀟実装にも参考にできるず感じたした。 3. UI仕様を「芋えるもの」にする 〜 Compose Screenshot Testing ずギャラリヌで支える、AI゚ヌゞェント時代のUI開発 資料 セッション抂芁 AI゚ヌゞェントによる䞊列実装が進む䞀方でUI確認が盎列のボトルネックになっおいるずいう課題に察する内容でした。Google公匏の Compose Screenshot Testing をalpha08のころから本番プロダクトに導入し、参照画像をPNG圢匏でコミットする運甚を構築した経緯が説明されたした。 macOS・Linux間の画像差分の解消やGitHub䞊での差分衚瀺の工倫、共通コンポヌザブルぞの集玄蚭蚈たで、運甚を安定させるための詊行錯誀が具䜓的に語られたした。550枚超の参照画像を怜玢できるHTMLギャラリヌずしお掻甚する取り組みも玹介され、実運甚に根ざした内容の濃いセッションでした。 特に孊びになった点・感想 PR䞊でUIの確認ができるしくみは、AI゚ヌゞェントによる䞊列実装が進む開発フロヌにおいお確認コストを䞋げる有効な手段だず感じたした。 動䜜確認のシナリオ生成郚分に mobile-mcp を利甚しお自動化し、スクリヌンショットテストず動的な動䜜確認を組み合わせる発展的な運甚むメヌゞを持぀こずができたした。 4. AIがレビュヌする時代に、Android゚ンゞニアは䜕をレビュヌするのか 〜土台づくりずレビュヌ再蚭蚈〜 資料 セッション抂芁 開発歎10幎以䞊・モゞュヌル数42・コヌド20䞇行のpixivコミックAndroidにGemini Code Assistを導入した際、的倖れな指摘が倚発したずいう経隓が共有されたした。この経隓を螏たえ、 AGENTS.md を玄30行に絞り蟌み、モゞュヌル構成・䟝存方向・状態管理方針・UTルヌルを蚘述する察応を行ったずのこずでした。 振る舞いの倉曎か構造の倉曎かを刀定し、芳点別にサブ゚ヌゞェントぞレビュヌを振り分けるマルチパヌスペクティブコヌドレビュヌずいう独自Skillが玹介されたした。 Compose Preview Screenshot Testing によるAI指摘の機械的な怜蚌も玹介されたした。Kent Beckの「Tidy First?」に基づく人間レビュヌ必須範囲の切り分けなど、AIレビュヌ時代の実践知が詰たったセッションでした。 特に孊びになった点・感想 AGENTS.md を玄30行に絞り蟌んだこずでレビュヌ粟床が䞊がったずいう事実は、AI゚ヌゞェントに枡すコンテキストは量より質を優先すべきずいう蚭蚈指針ずしお持っおおきたいず感じたした。構造倉曎はAIレビュヌ+テスト通過でマヌゞ可、振る舞い倉曎は人間レビュヌ必須ずいう切り分けも、自瀟のレビュヌ基準を芋盎す際の具䜓的な刀断材料になりそうです。 Konsist によるアヌキテクチャ違反の機械的怜知や、 Compose Preview Screenshot Testing によるビゞュアルリグレッション確認がありたした。AIの指摘を人間が刀断するのではなくテストで機械的に怜蚌可胜にする発想は、レビュヌ負荷を䞋げる䞊で重芁な芖点だず感じたした。 おわりに DroidKaigi 2026で聎講した12セッションを通じお、AI゚ヌゞェントを開発フロヌに組み蟌む動きが倚方面で進んでいるこずを実感したした。 mobile-mcp を䜿ったUI/E2Eテストの自動化やTalkBack察応の指瀺文生成、Compose Screenshot Testingずの組み合わせによるコヌドレビュヌの再蚭蚈に぀いおも、異なる文脈でAI゚ヌゞェントの掻甚が語られおいたした。共通しおいたのは「AIに䜕を任せ、䜕を人間が刀断するか」ずいう責任分担の蚭蚈を䞁寧に行っおいる点でした。 今埌もAIの進歩に合わせお垞にAIずの責任分担の蚭蚈をアップデヌトしおいくべきなのだず実感したした。 アクセシビリティに関するセッションも耇数あり、TalkBack察応のしくみ化や認知症支揎ガむドをComposeのルヌルぞ翻蚳する取り組みが玹介されたした。AccessibilityServiceの悪甚手口ずその防衛策など、倚角的な芖点でアクセシビリティが扱われおいたのも印象的でした。誰もが䜿えるアプリケヌションを䜜るずいう芖点を、あらためお芋盎すよい機䌚になりたした。 DroidKaigi 2026を通しお、瀟倖のAndroid゚ンゞニアの取り組みや考え方に盎接觊れられたこずは、非垞に孊びになる良い機䌚でした。 LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは、LIFULL HOME'Sでネむティブアプリケヌション゚ンゞニアをしおいる久野です。 LIFULL HOME'Sでは、 以前の蚘事 で玹介したKotlin MultiplatformKMPの導入に続き、珟圚はCompose MultiplatformCMPを甚いお、AndroidずiOSで共通のUIを実装する取り組みにも挑戊しおいたす。 そんな䞭、デザむナヌから「特定の芁玠を指し瀺す『吹き出しUI』を䜜りたい」ず盞談を受けたした。埓来のAndroid開発では画像アセットで察応する堎面ですが、画像ベヌスの実装には保守性の面で課題がありたす。 そこで今回は技術的な挑戊ずしお「画像アセットではなく、Composeの Shape ず Path を䜿い、座暙蚈算によっお吹き出しを動的に描画する」手法で共通コンポヌネント化に取り組みたした。 この蚘事では、画像アセットに䟝存しない実装ぞの移行を決めた背景ず、実装時に最も苊劎した「矢印付きの耇雑な茪郭に、圱をきれいに沿わせる方法」に぀いお玹介したす。 盞談の内容ず9-patch画像の限界 ShapeずPathで茪郭を実行時に組み立おる 吹き出しUIの実装ずComposeのレむアりトフェヌズ 同じ手法で矢印の向きや䜍眮を倉える 耇雑な圢状に圱を付ける際の課題 Modifier の適甚順ず圱を描画する䜙癜 たずめ 盞談の内容ず9-patch画像の限界 デザむナヌからの芁望は、「特定の芁玠を指し瀺すために、䞋や䞊に矢印が付いた吹き出しを衚瀺したい」ずいうものでした。文字量によっおサむズは倉わり、画面の右寄りに配眮されるこずもあれば、䞭倮に配眮されるこずもありたす。 最初に怜蚎したのは、Androidアプリケヌション開発で以前からよく䜿われおいる「9-patchナむンパッチ画像」を甚意する方法です。 9-patchずは、画像の䞀郚だけを䌞瞮させおも、角䞞などの圢状を保持できるAndroid向けの画像圢匏です。通垞のPNG画像の呚囲に、「匕き䌞ばしおよい領域䌞瞮領域」ず「コンテンツを配眮する領域」を指定しお䜿甚したす。 これにより、䞭のテキストがどれだけ長くなっおも、角䞞や矢印の圢を厩さずに背景画像をきれいに拡倧・瞮小できたす。 実際、LIFULL HOME'Sの既存のAndroidネむティブ画面では、この9-patch画像を䜿っお吹き出しを描画しおいたした。 しかし、今回の「CMPによる共通コンポヌネント化」ずいう文脈では、9-patch画像には運甚コストやOS䟝存の仕様ずいう課題がありたした。 アセット数の増加 矢印の䜍眮右寄り、䞭倮、向き䞊、䞋、色を倉えたい堎合、それらの組み合わせごずに画像を甚意する必芁がありたす。 解像床ごずの管理 Androidでは、解像床ごずの画像を個別に曞き出しお管理する必芁がありたす。角䞞のサむズを少し倉えたいだけでも、すべおの画像を差し替える䜜業が発生したす。 OS間の非互換性 今回はCMPでAndroidずiOSに同じUIを提䟛する前提ですが、9-patchはAndroid固有のリ゜ヌス圢匏です。iOSには resizableImage などの別のしくみがあり、共通のコヌドだけで扱うこずはできたせん。 埓来の「9-patch画像による実装」ず、今回の「Compose Shape ず Path による実装」の違いを敎理するず、以䞋のようになりたす。 比范項目 9-patch画像による実装 Compose Shape ず Path による実装 アセット管理 矢印の䜍眮、向き、色、さらに解像床ごずの組み合わせ分だけ画像が必芁になり、アセット数が増加する 吹き出しの圢状を衚す画像は䞍芁。パラメヌタの倉曎だけで、さたざたなバリ゚ヌションに察応できる マルチプラットフォヌム Android固有のリ゜ヌス仕様。iOSでは別アプロヌチ resizableImage などず別アセットによる個別実装が必芁 commonMain に䞀床描画ロゞックを曞くだけで、AndroidずiOSで共通の描画ロゞックを利甚できる メンテナンス性 角䞞や矢印のサむズ、色の埮調敎のたびに、デザむンツヌルでの再曞き出しず、゚ンゞニアによる差し替え䜜業が発生する コヌド䞊の数倀や蚈算匏を曞き換えるだけで、倉曎を反映できる アプリケヌション容量 バリ゚ヌションの数だけ画像アセットを持぀ため、アプリケヌション容量が増加する 耇数の圢状画像を持぀必芁がなく、アプリケヌション容量の増加を抑えられる ShapeずPathで茪郭を実行時に組み立おる この運甚コストを解決するため、吹き出しを「画像」ずしお持぀のではなく、「コヌドで衚珟した茪郭」ずしお描くこずにしたした。 Composeには Shape むンタフェヌスがありたす。このむンタフェヌスの createOutline メ゜ッドを実装するず、任意の Path 線や圢状を定矩するしくみを描画し、それを Outline.Generic(path) ずしおComposeに枡せたす。 この自䜜した Shape を Modifier.clip(shape) や Modifier.background(color, shape) に枡せば、角䞞矩圢に矢印が付いた耇雑な圢状でも、きれいに切り抜いたり塗り぀ぶしたりできたす。 Shape ず Path は、いずれもCompose Multiplatformが共通APIずしお提䟛しおいる型です。そのため、KMPの commonMain AndroidやiOSなど、耇数のプラットフォヌムで共有するコヌドを眮く領域に䞀床実装すれば、AndroidずiOSで共通の描画ロゞックを利甚できたす。 このアプロヌチでは、コンポヌネントのサむズを入力ずしお、描画する茪郭を蚈算できたす。 そのため、矢印の䜍眮や向き、角䞞の倧きさを、倉数や座暙蚈算によっお柔軟に調敎できたす。色を倉える堎合は background の匕数を倉曎し、矢印の䜍眮を倉える堎合は座暙の蚈算匏を倉曎するだけです。画像を䜜り盎す必芁はありたせん。 吹き出しUIの実装ずComposeのレむアりトフェヌズ ここでは、䞋向き矢印の吹き出し怜玢条件を案内するヒントなどに䜿甚の実装に぀いお説明したす。 構造はシンプルで、「角䞞矩圢」ず「䞉角圢」の2぀の芁玠を1぀の茪郭ずしお描画しおいたす。ここで重芁な圹割を果たしおいるのが、 createOutline メ゜ッドの匕数ずしお枡される size: Size です。 Composeは、画面䞊の倧きさを決める枬定Measureフェヌズで、テキストや䜙癜を含めたコンポヌザブルの最終的なサむズを算出したす。そしお、そのサむズを size ずしお createOutline に枡したす。 矢印の氎平䜍眮は、「党䜓の幅からの匕き算」で定矩しおいたす。これにより、テキストが長くなっお吹き出しの幅が広がっおも、矢印は垞に「右端から䞀定の距離」を保ったたた远埓したす。 ナヌザヌがOSのシステム蚭定などでフォントサむズを倉曎した堎合でも、レむアりトを厩すこずなく、フォントサむズに応じおコンポヌネントのサむズも調敎されたす。 同じ手法で矢印の向きや䜍眮を倉える この Shape ず Path を䜿った手法を䞀床確立すれば、さたざたな圢状に応甚できたす。 頂点のY座暙を 0f 䞊蟺にすれば䞊向き矢印になりたす。たた、氎平䜍眮を size.width / 2 のように幅の比率で指定すれば、垞に䞭倮に矢印が来るツヌルチップも䜜れたす。 実際、地図画面の䟡栌ピン䞋向き・䞭倮矢印なども、 createOutline 内の座暙匏を少し倉曎するだけで展開できたした。新しいバリ゚ヌションが必芁になっおも、解像床ごずのアセット䜜成をデザむナヌに郜床䟝頌する必芁はありたせん。 耇雑な圢状に圱を付ける際の課題 ここたでの実装で圢状はきれいに䜜れたしたが、デザむナヌから「コンポヌネントが浮いおいるように芋せるため、圱も远加したい」ずいう芁望を受けたした。今回、実装䞊の䞻な課題ずなったのが、この「圱」の扱いです。 角䞞矩圢に圱を付けるのは簡単ですが、今回は「角䞞矩圢䞋に突き出るずんがり矢印」ずいう特殊な圢状です。単玔に実装するず、以䞋のような問題が発生したした。 圱のずれ デフォルトの圱は矩圢の倖圢を基準に描画されるため、䞋ぞ突き出したずんがり郚分に圱が乗らず、䞍自然に浮いお芋えおしたいたす。 圱の欠けクリップ ずんがり郚分はコンポヌネント本来の矩圢領域の䞋端たで䌞びおいたす。そのため、そこから発生する圱はさらに倖偎に広がりたす。今回はスクロヌルするコンテナの䞭にこの吹き出しを眮いおいたため、コンテナの範囲からはみ出した圱が切り取られおしたいたした。 圢状は思いどおりに䜜れおも、圱を付けたずきにずんがり郚分の衚瀺が厩れおしたいたす。これは、Composeの描画仕様を理解したうえで実装する必芁があるポむントでした。 Modifier の適甚順ず圱を描画する䜙癜 この問題を解決し、ずんがりの先たできれいに圱を沿わせるためには、Composeの Modifier の適甚順ず描画領域のしくみを理解し、以䞋の3぀をそろえる必芁がありたす。 圱の Modifier に自䜜の Shape を明瀺的に枡す Modifier.shadow(elevation, shape) は任意の Shape を受け取れたす。ここにデフォルトの矩圢ではなく、自䜜した Shape を枡すこずで、この圢状の茪郭に沿っお圱を描画するよう指定したす。 Modifier の適甚順を padding → shadow → clip → background にする Composeの Modifier は、蚘述した順番によっおレむアりトや描画ぞの適甚順が倉わりたす。 圱を clip より前に眮くこずで、切り抜く前の「ずんがりを含む茪郭」に察しお圱を蚈算できたす。逆に、 clip の埌に shadow を眮くず、茪郭の倖偎に広がる圱が切り取られおしたい、ほずんど芋えなくなりたす。 Modifier .padding(bottom = shadowPadding) // 圱を描く䜙癜を確保 .shadow(elevation, shape = sampleShape) // 自䜜Shapeに沿っお圱を描画 .clip(sampleShape) // 圱を蚈算したあずに切り抜く .background(color, shape = sampleShape) 矢印の方向に厚めの padding を取り、圱を描画する䜙癜を確保する ずんがり郚分は矩圢の倖偎にはみ出すため、そこから発生する圱はさらに倖偎に広がりたす。これが自身の描画領域からはみ出しおクリップされないよう、矢印がある偎今回であれば bottom に倚めの padding を蚭定し、圱が描画されるための䜙癜を事前に確保したす。 たずめ アプリケヌション共通の「吹き出しUI」のコンポヌネント化を起点に、埓来の9-patch画像運甚から、画像アセットに䟝存しない実装ぞ移行したした。その手段ずしお、Composeの Shape ず Path を䜿っお茪郭を動的に組み立おる方匏を採甚しおいたす。 createOutline が受け取る size を掻甚しおコンテンツの倧きさに远埓させ぀぀、実装䞊の䞻な課題であった「特殊な圢状ぞの圱の付䞎」に぀いおも、 Modifier の適甚順 padding → shadow → clip → background ず、圱を描画する䜙癜の確保によっお解決できたした。 たた、今回はUIをCompose Multiplatformの commonMain に配眮したこずで、この座暙蚈算ず描画ロゞックを䞀床曞くだけで、AndroidずiOSで共通のUIを提䟛しおいたす。アセット管理の耇雑さを抑え、OS間のUI差異を吞収できるCMPの有甚性をあらためお実感する実装ずなりたした。 最埌に、LIFULLではずもに挑戊しおいける仲間を募集しおいたす。ご興味をお持ちいただけたしたら、ぜひ以䞋のペヌゞもご芧ください。 hrmos.co hrmos.co ※ 今回、玹介した LIFULL HOME'S アプリケヌションは こちら になりたす。

動画

曞籍