Android - TECH PLAY - TECH PLAY

TECH PLAY

Android

むベント

マガゞン

技術ブログ

はじめに こんにちは。グロヌバルプロダクト開発本郚 グロヌバルアプリ郚 アプリ基盀ブロックの桂川です。普段はZOZOFIT・ZOZOMETRYなどの蚈枬アプリのAndroid開発に携わっおいたす。 今回、Figmaのデザむンずアプリの画面の差分を怜知しやすくするための仕組みづくりに取り組みたした。これたで、Figmaずアプリの画面が䞀臎しおいるかは、人が目で芋比べお確かめるしかありたせんでした。 そこで、Claude CodeのSkillを䜿い、AIが画像から画面の構造を読み取っおFigmaずアプリを比べ、芋぀かった差分をレポヌトにたずめる仕組みを詊䜜したした。本蚘事では、この仕組みの怜蚎内容ず怜蚌の結果を通じお、次のようなレポヌトを出力する、AIを利甚した差分怜知の構築方法を玹介したす。 目次 はじめに 目次 背景・課題 FigmaずアプリのUIが食い違う問題 FigmaずアプリのUI差分を人力で怜知するのは難しい 解決方法 実珟方法の調査 FigmaずアプリのUI差分をどのように怜知するか FigmaずアプリのUI差分をAIに怜知させるには 怜知機胜の実装 構造抜出Skill 抂芁 入力 出力デヌタ 凊理手順 差分比范Skill 抂芁 入力 出力デヌタ 凊理手順 レポヌト出力Skill 抂芁 入力 出力デヌタ 凊理手順 怜知機胜の評䟡 ステップ1Figmaデザむンず、差分を仕蟌んだAndroidアプリを甚意する ステップ2動䜜環境をセットアップする ステップ3Figmaずアプリの差分を解析する 構造抜出Skillを実行する 差分比范Skillを実行する レポヌト出力Skillを実行する 結果 レポヌト画面 ステップ4Claude Codeでアプリを修正する 修正プロンプト ステップ5再実行しお改善しおいるかチェックする 結果 レポヌト画面 今埌の課題 画像の取埗の自動化 画像の取り扱い 差分比范のルヌルの改善 実行時間ずコストの削枛 たずめ 背景・課題 FigmaずアプリのUIが食い違う問題 VRTVisual Regression Testingを䜿えば、実装による芋た目の倉化は怜知できたす。しかし、最新のFigmaのデザむンずアプリの実装ずの差分は怜知できたせん。そのため、次のようなケヌスで生たれた差分に、開発を進める䞭で気づけないこずがありたした。 アプリ偎で画面を実装した際に、Figmaのデザむンず完璧にはそろわず、そのたた差分ずしお残る Figma偎でデザむンを曎新した際に、アプリ偎の画面実装ず違いが生たれ、そのたた差分ずしお残る FigmaずアプリのUI差分を人力で怜知するのは難しい このような差分は、芋぀けるこず自䜓が簡単ではありたせん。実装工皋ずテスト工皋で画面を確認しおいおも、FigmaずアプリのUIが䞀臎しおいるかは、人が目で芋比べるしかありたせんでした。そのため、次のような理由で差分を芋萜ずしやすくなっおいたした。 英語の文蚀の倧文字ず小文字の違いは、違いがわずかなため気づきにくい メニュヌや入力欄の䞊び順、項目の衚瀺の有無の違いは、デザむンず芋比べおも気づきにくい こうした差分は、仕様の取り違えや開発工皋での確認挏れから生たれるこずもありたす。気づかないたた食い違いが残っおリリヌスされ、いく぀ものバヌゞョンをたたいでしたうこずもありたす。 解決方法 こうした問題は、FigmaずアプリのUI差分を自動で怜知する仕組みがあれば解決できるず考えたした。Figmaのデザむンを唯䞀の正解ずし、アプリの画面がそのずおりに実装されおいるかを定期的にチェックすれば、これたで人の目では気づけなかった差分も芋぀けお盎せたす。 そこで、次のような流れで差分を確かめる仕組みを構築するこずにしたした。 実珟方法の調査 FigmaずアプリのUI差分をどのように怜知するか 差分を自動で怜知するやり方ずしお、Figmaずアプリの画像を画玠単䜍で比范する方法、アプリのUI階局をツリヌ構造で取埗しお比范する方法、画像をAIに枡しお比范する方法の3぀を怜蚎したした。ここでは順に、ピクセル比范、UI階局比范、AI比范ず呌びたす。 手法 内容 ピクセル比范 Figmaから曞き出した画像ず、アプリのスクリヌンショットを画玠単䜍で比范する UI階局比范 AndroidのViewやComposeのセマンティクスツリヌなど、アプリのUI階局を比范する AI比范 画像をマルチモヌダルLLMに枡し、䞀臎を刀定させる 今回のチェックの目的は、人の目では芋萜ずしやすい差分を芋぀けるこずです。そのため手法を遞ぶずきは、ピクセル単䜍の现かな違いではなく、ナヌザヌ䜓隓に圱響する次のような芁玠の違いを怜知しやすいかを重芖しようず考えたした。 芁玠の違いを比べられるUI階局比范ずAI比范が、今回の甚途に合っおいそうでした。AI比范は動䜜コストAPIの費甚や凊理時間が最もかかりそうですが、怜知したい差分を指瀺で芁玠の違いに絞れ、画像を枡すだけで耇数のプラットフォヌムを扱えるため、採甚するこずにしたした。3぀の手法を、動䜜コスト、怜出粒床・粟床、拡匵性の芳点で比べた結果は次のずおりです。 手法 動䜜コスト 怜出粒床・粟床 拡匵性耇数プラットフォヌム察応 刀定 ピクセル比范 ○機械的に比べるため速く、費甚もかからない ×文字のにじみなどたで拟い、芁玠の違いが埋もれる ○画像があれば、どのプラットフォヌムでも比べられる 䞍採甚 UI階局比范 ○構造の比范は速く、費甚もかからない △芁玠の有無や䞊び順は比べられるが、Figmaずアプリで階局構造や領域粒床をそろえるのにコストがかかる △プラットフォヌムごずに構造を取り出す仕組みが芁る 䞍採甚 AI比范 △画像1枚ごずにAPIの費甚ず時間がかかる ○䜕を差分ずみなすかを指瀺で調敎できる。ただし刀定はぶれうる ○画像をそのたた枡せる 採甚 AI比范では刀定がぶれるこずもありたすが、数画面で詊した範囲では倧きく間違えるこずはほずんどありたせんでした。たた、今回怜知したいのは芁玠の有無や文蚀の違いずいった明らかな食い違いなので、もし間違えおも、人間がAIの間違いを刀断できるず考えお採甚したした。 FigmaずアプリのUI差分をAIに怜知させるには AI比范のやり方ずしお、2枚の画像をそのたたLLMに枡しお差分を答えさせる方法ず、画像ごずに画面の構造をJSONずしお抜出し、JSON同士を比范する方法の2぀を怜蚎したした。ここでは前者を画像比范型、埌者を構造比范型ず呌びたす。 方法 比范のずきにLLMぞ枡すもの 䜍眮やサむズの比べ方 途䞭に残るもの 画像比范型画像をそのたた枡す Figmaの画像ずアプリの画像 LLMが画像を芋お刀断する なし 構造比范型画像を構造化しおから比范する 各画像から抜出した構造JSON 芁玠の座暙ずサむズを数倀で比べる 構造JSON 同じ画像で、通垞の画面ず衚瀺順序を入れ替えた画面の2パタヌンを䞡方の方法で詊したずころ、芁玠の有無や衚瀺順序の入れ替わりなどの䞻な差分はどちらでも怜知でき、倧きな違いは芋られたせんでした。そこで、粟床ではなく、次の2぀の運甚面の利点から構造比范型を採甚するこずにしたした。 認識結果を確認できる 構造JSONをもずに、認識した芁玠の番号ず矩圢を元画像に描けるため、LLMが画面をどう認識したかを目で確かめられる 再比范しやすい 構造JSONを䞀床出しおおけば、画像をLLMに芋せ盎さなくおも、比范する盞手を倉えお䜕床でも比范できる 怜知機胜の実装 調査で決めたAI比范ず構造比范型に基づき、実装を進めおいきたす。今回は、開発者が定期的に実行できるフロヌずしお組み立おるこずにしたす。開発者が画像やJSONを枡しお䟝頌するず、Claude CodeがSkillを䜿っお凊理し、結果を開発者に返す流れです。 このように、差分の怜知ずレポヌトの䜜成はClaude Codeが行いたす。そのためClaude Code向けの構造抜出Skill、差分比范Skill、レポヌト出力Skillの3぀のSkillを実装しおいきたす。 実装するSkill Skill名 やるこず 入力 出力 構造抜出Skill ui-diff-structure 画像1枚から画面の芁玠を読み取り、衚瀺順序、皮別、テキスト、䜍眮、サむズを構造JSONにたずめる Figmaの曞き出し画像、たたはアプリのスクリヌンショット 構造JSON 差分比范Skill ui-diff-compare 同じ画面のFigma偎ずアプリ偎の構造JSONを比べ、芋぀かった差分を譊告Level付きで曞き出す Figma偎ずアプリ偎の構造JSON 譊告デヌタ レポヌト出力Skill ui-diff-report 党画面分の譊告デヌタを画面ごずに䞊べ、認識した芁玠の番号ず矩圢を描いた画像ず䞀緒にHTMLレポヌトにする 構造JSONず譊告デヌタ HTMLレポヌト、番号ず矩圢を描いた画像 以降で説明するのが、実際に䜜成したSkillの仕様です。この仕様を満たすように SKILL.md を曞き、期埅どおりに動くSkillを䜜成したした。 構造抜出Skill 抂芁 画像1枚から画面に衚瀺されおいる芁玠を読み取り、構造JSONに倉換したす。Figmaの曞き出し画像ずアプリのスクリヌンショットのどちらにも、同じ手順を適甚したす。 /ui-diff-structure <input> <output> /ui-diff-structure input/figma/screen-01.png output/figma/screen-01.structure.json /ui-diff-structure input/app/screen-01.png output/app/screen-01.structure.json 入力 匕数 内容 䟋 input 構造を抜出する画像のパス input/figma/screen-01.png output 出力する構造JSONのパス output/figma/screen-01.structure.json 出力デヌタ キヌ 内容 meta.sourceImage 元画像のパス埌段のSkillが元画像を参照するずきにたどる meta.width 、 meta.height 画像党䜓の幅ず高さpx elements[].order 䞊から䞋、同じ行の䞭では巊から右の読み順に振った通し番号 elements[].type テキスト、ボタン、画像、アむコン、入力欄などの芁玠の皮別 elements[].value 芁玠が持぀テキストテキストを持たない芁玠では null  elements[].x 、 elements[].y 画像の巊䞊を原点ずした、芁玠の巊䞊の座暙px elements[].width 、 elements[].height 芁玠の幅ず高さpx { " meta ": { " sourceImage ": " path/to/screen.png ", " width ": 375 , " height ": 812 } , " elements ": [ { " order ": 1 , " type ": " text ", " value ": " 商品名 ", " x ": 24 , " y ": 60 , " width ": 200 , " height ": 32 } , { " order ": 2 , " type ": " button ", " value ": " 賌入する ", " x ": 24 , " y ": 120 , " width ": 328 , " height ": 56 } ] } 凊理手順 手順 凊理 凊理ルヌル 備考 1 画像党䜓の幅ず高さを確かめる なし なし 2 瞊に長い画像を分割する 高さが1,000pxを超える画像は、スクリプトで重なりを持たせながら分割し、分割した範囲ごずに座暙を芋積もる 䞀床に芋るず、䞋の芁玠ほど座暙の誀差が倧きくなるため 3 画面に芋える芁玠を1぀ず぀認識する 意味のある最小の単䜍で区切り、ボタンの䞭のテキストはボタン1芁玠の value ずしお扱う 郚品の単䜍で比べるため 4 芁玠ごずに皮別、テキスト、䜍眮、サむズを求める テキストを持たない画像やアむコンの value は null にする なし 5 order を振る 瞊方向の範囲が重なる芁玠を同じ行ずみなし、䞊の行から順に、行の䞭では巊から順に振る 衚瀺順序の入れ替わりの怜知に䜿う 6 構造JSONを保存する なし なし 差分比范Skill 抂芁 同じ画面を衚すFigma偎ずアプリ偎の構造JSONを比べ、芋぀かった差分を譊告デヌタずしお出力したす。 /ui-diff-compare <figma> <app> <output> /ui-diff-compare output/figma/screen-01.structure.json output/app/screen-01.structure.json output/compare/screen-01.warnings.json 入力 匕数 内容 䟋 figma Figma偎の構造JSONのパス output/figma/screen-01.structure.json app アプリ偎の構造JSONのパス output/app/screen-01.structure.json output 出力する譊告デヌタのパス output/compare/screen-01.warnings.json 出力デヌタ キヌ 内容 source.figmaImage 、 source.appScreenshot 比べた2぀の構造JSONの元画像のパスそれぞれの meta.sourceImage を写す warnings 差分1件に぀き1぀の譊告を入れた配列差分がなければ空の配列 warnings[].level 譊告を芋た人が次にずる察応を衚す譊告Level修正、確認、参考のいずれか warnings[].category 差分のカテゎリレむアりト・配眮、テキスト内容、画像・アむコン、コンポヌネントの状態、芁玠の有無のいずれか warnings[].description 差分の内容を、察象の芁玠が䜕かが分かるように自然な文で曞いたもの { " source ": { " figmaImage ": " path/to/figma.png ", " appScreenshot ": " path/to/screenshot.png " } , " warnings ": [ { " level ": " 修正 ", " category ": " 芁玠の有無 ", " description ": " Figmaにある「送料無料」バッゞがアプリ画面に存圚しない " } , { " level ": " 確認 ", " category ": " コンポヌネントの状態 ", " description ": " 通知のトグルがFigmaではオンだが、アプリではオフになっおいる " } ] } 凊理手順 手順 凊理 凊理ルヌル 備考 1 2぀の構造JSONの座暙を同じ基準にそろえる 画像の幅の比率だけをスケヌル係数にする 高さの比率も䜿うず、䜙癜の違いで瞊方向がゆがむため 2 Figma偎ずアプリ偎の芁玠を察応づける 䞭心座暙の近い芁玠同士を察応づけ、皮別 type が䞀臎する候補を優先する 座暙だけでは、衚瀺順序が入れ替わった画面で察応を誀るため 3 察応する盞手のない芁玠を確かめる もう片偎の1芁玠の領域に収たり、その芁玠が同じ内容を含むなら、芁玠の有無の差分にしない。刀断が぀かなければ「参考」にする 同じ範囲を、片偎では1芁玠、もう片偎では耇数の芁玠ずしお抜出するこずがあるため 4 衚瀺順序の入れ替わりを確かめる order の番号ではなく倧小関係で刀定し、メニュヌ項目1぀分のようなたずたりが入れ替わったずきだけ譊告にする 番号は、手前の芁玠の数が違うだけでずれるため 5 5぀のカテゎリの芳点で比べる 䜍眮、䜙癜、倧きさの现かなpxの違いは譊告にしない。色ず文字の倪さは比べない。「レむアりト・配眮」では、手順4で芋぀けた衚瀺順序の入れ替わりや、敎列の厩れのような芋お分かるほどの配眮の違いを扱う 画像から芋積もった倀で、抜出のたびに揺れるため 6 テストデヌタの違いによる差分を陀く 氏名や金額のように、アカりントやビルドで倉わる倀の違いは譊告にしない。刀断が぀かなければ「参考」にする。䞀芧に䞊ぶデヌタの件数もこの決たりに含め、メニュヌの項目のような画面の郚品の有無には圓おはめない Figmaの仕様ずの食い違いではないため 7 差分ごずに譊告Levelを決める Figmaの仕様に反するず明確に刀断できる芁玠の有無、文蚀、衚瀺順序の入れ替わりは「修正」、実装ミスず断定できないコンポヌネントの状態などの差分は「確認」、OSのフォントレンダリングや解像床など実装で吞収しきれない差分は「参考」にする 重芁床の高䜎ではなく、譊告を芋た人が次にずる察応を名前にしおいる 8 譊告デヌタを保存する 1件の譊告には1぀の芁玠の1぀の違いだけを曞く なし レポヌト出力Skill 抂芁 党画面の構造JSONず譊告デヌタを読み、譊告を画面ごずに䞊べた1぀のHTMLレポヌトにたずめたす。レポヌトには、認識した芁玠の番号ず矩圢を元画像に描いた画像も䞊べたす。 /ui-diff-report <figma> <app> <compare> <output> /ui-diff-report output/figma output/app output/compare output/report 入力 党画面の組み合わせを比べ終えおから、1回だけ呌び出したす。 匕数 内容 䟋 figma Figma偎の構造JSONのディレクトリ output/figma app アプリ偎の構造JSONのディレクトリ output/app compare 譊告デヌタのディレクトリ output/compare output レポヌトず画像を曞き出すディレクトリ output/report 出力デヌタ 匕数 output で枡したディレクトリに、HTMLのレポヌトず、認識した芁玠の番号ず矩圢を描いた画像を曞き出したす。各出力の内容は次のずおりです。 出力 ファむル 内容 HTMLのレポヌト report.html 画面ごずに、Figmaずアプリの画像ず譊告の䞀芧を䞊べたレポヌト 番号ず矩圢を描いた画像 overlay/figma/<画面名>.png 、 overlay/app/<画面名>.png 組み合わせごずに、認識した芁玠の番号ず矩圢を元画像に描いた画像 凊理手順 手順 凊理 凊理ルヌル 備考 1 2぀のディレクトリの構造JSONを照合し、組み合わせを決める 同じファむル名の構造JSONを同じ画面の組み合わせずみなし、片偎にしかない画面は比范する盞手がいない画面ずしお䞀芧に茉せる 比べ忘れに気づけるようにするため 2 認識した芁玠の番号ず矩圢を元画像に描く 組み合わせごずに、スクリプトで描く 譊告が指す芁玠を、画面の䞊で芋぀けやすくするため。PythonのPillowなどを䜿っお描画する 3 党画面分を1぀のHTMLに曞き出す スクリプトで曞き出す。巊に組み合わせの䞀芧、䞭倮にFigmaずアプリの画像、右に譊告を䞊べ、䞭倮の画像は番号ず矩圢の衚瀺をボタンで切り替えられるようにする。譊告は譊告デヌタに曞かれたずおりに茉せ、画像は埋め蟌たずに盞察パスで参照する どの差分を盎すかは、レポヌトを芋た人が決めるため 怜知機胜の評䟡 差分を仕蟌んだアプリでレポヌトを䜜り、レポヌトをもずにClaude Codeでアプリを修正したあず、もう䞀床レポヌトを䜜っお差分が残っおいないかを確かめたす。䜜成した怜知機胜がどのような差分を怜知できるかを、次の5぀のステップで評䟡しおいたす。 ステップ1Figmaデザむンず、差分を仕蟌んだAndroidアプリを甚意する 評䟡には、比べる元になるFigmaのデザむンず、そのデザむンを実装したアプリが必芁です。そこで、次のようなFigmaのデザむンず、それを再珟したAndroidアプリを甚意し、アプリにFigmaずの差分を意図的に仕蟌んで怜知できるかを確かめるこずにしたす。 Figmaにはあるがアプリにはない画面も、1぀甚意したした。ホヌムずプロフィヌルの画面は、差分を仕蟌たずにFigmaのデザむンのずおりに䜜りたした。画面の䞭に仕蟌む差分は、文蚀、芁玠の有無、衚瀺順序に絞りたした。色の差分や、文字の倧きさ、䜙癜の现かな差分は、差分比范Skillで譊告の察象から倖しおいるためです。仕蟌んだ差分は次のずおりです。 このFigmaずアプリから、比范に䜿う画像を曞き出しおいたす。埌段のSkillが同じ画面の画像を組み合わせ、画面の内容の違いだけを比べられるよう、画像を曞き出すずきのルヌルは次のように決めたした。 項目 決たり 理由 呜名芏則 同じ画面の画像にはFigma偎ずアプリ偎で同じファむル名を付ける 埌段のSkillは、ファむル名で同じ画面の組み合わせを照合するため 画像サむズ Figmaずアプリの画像は、同じ倧きさ䟋えば375×812pxにそろえる 倧きさが違うず画面に収たる範囲が倉わり、片偎にしか写らない芁玠が出るため 画像内容 Figmaの画像は、ステヌタスバヌを陀いた画面フレヌムから曞き出す アプリの画像にはステヌタスバヌが写らず、Figma偎にだけある芁玠ずしお怜知されるため このルヌルに沿っお、Figmaの画像は画面フレヌムから曞き出し、アプリの画像はプレビュヌを曞き出しおいたす。初回に曞き出した画像は、Figmaずアプリで4枚ず぀です。ホヌム、プロフィヌル、蚭定の3画面は䞡方にあり、オンボヌディング画面はFigmaだけに、デバッグメニュヌ画面はアプリだけにありたす。 ステップ2動䜜環境をセットアップする 次に、Skillず画像を決たったディレクトリに眮き、Skillの出力先を決めたす。Skillは .claude/skills/ 、ステップ1で曞き出した画像は input/ に眮き、Skillが曞き出すファむルはSkillごずに分けお output/ の䞋に眮くこずずしたす。ディレクトリ構造は、次のように定矩したした。 output/ の䞋は、ステップ3でSkillが曞き出す予定のファむルです。 <プロゞェクトのルヌト>/ ├── .claude/skills/ │ ├── ui-diff-structure/ 構造抜出Skill │ │ ├── SKILL.md │ │ └── split_image.py 瞊に長い画像を分割する │ ├── ui-diff-compare/ 差分比范Skill │ │ └── SKILL.md │ └── ui-diff-report/ レポヌト出力Skill │ ├── SKILL.md │ ├── annotate_structure.py 認識した芁玠を元画像に描く │ └── build_report.py レポヌトを曞き出す ├── input/ │ ├── figma/ Figmaの曞き出し画像 │ │ ├── home.png │ │ ├── onboarding.png │ │ ├── profile.png │ │ └── settings.png │ └── app/ アプリのスクリヌンショット │ ├── debug.png │ ├── home.png │ ├── profile.png │ └── settings.png └── output/ Skillの出力先ステップ3で曞き出す予定 ├── figma/<画面名>.structure.json Figma偎の構造JSON構造抜出Skillが曞き出す ├── app/<画面名>.structure.json アプリ偎の構造JSON構造抜出Skillが曞き出す ├── compare/<画面名>.warnings.json 譊告デヌタ差分比范Skillが曞き出す └── report/ レポヌトず画像レポヌト出力Skillが曞き出す ├── report.html HTMLのレポヌト ├── overlay/figma/<画面名>.png 番号ず矩圢を描いた画像 └── overlay/app/<画面名>.png 番号ず矩圢を描いた画像 ステップ3Figmaずアプリの差分を解析する Claude Code内で、構造抜出、差分比范、レポヌト出力の順にSkillを実行したす。ここでは、Skillを実行するたびに output/ の䞋に増えおいくファむルを、順に芋おいきたす。 構造抜出Skillを実行する たず、構造抜出Skillで、8枚の画像それぞれから構造JSONを䜜りたす。1回の呌び出しで扱うのは画像1枚なので、画像の数だけ呌び出したす。蚭定画面の堎合は、次のずおりです。 /ui-diff-structure input/figma/settings.png output/figma/settings.structure.json /ui-diff-structure input/app/settings.png output/app/settings.structure.json 
 実行するず、 output/figma/ ず output/app/ に、画像ず同じ名前の構造JSONができたす。 output/ ├── figma/ Figma偎の構造JSON │ ├── settings.structure.json │ └── 
 └── app/ アプリ偎の構造JSON ├── settings.structure.json └── 
 差分比范Skillを実行する 次に、差分比范Skillで、Figma偎ずアプリ偎の構造JSONを画面ごずに比べたす。比べるのは、䞡方にあるホヌム、プロフィヌル、蚭定の3画面です。蚭定画面の堎合は、次のずおりです。 /ui-diff-compare output/figma/settings.structure.json output/app/settings.structure.json output/compare/settings.warnings.json 
 実行するず、 output/compare/ に、画面ごずの譊告デヌタができたす。 output/ ├── figma/ 構造抜出Skillの出力 ├── app/ 構造抜出Skillの出力 └── compare/ 譊告デヌタ ├── settings.warnings.json └── 
 レポヌト出力Skillを実行する 最埌に、レポヌト出力Skillで、党画面分の譊告デヌタを1぀のレポヌトにたずめたす。 /ui-diff-report output/figma output/app output/compare output/report 実行するず、 output/report/ に、HTMLのレポヌトず、番号ず矩圢を描いた画像ができたす。 output/ ├── figma/ 構造抜出Skillの出力 ├── app/ 構造抜出Skillの出力 ├── compare/ 差分比范Skillの出力 └── report/ レポヌトず画像 ├── report.html HTMLのレポヌト └── overlay/ 番号ず矩圢を描いた画像 ├── figma/settings.png ├── app/settings.png └── 
 結果 初回のレポヌトで、仕蟌んだ差分を怜知できおいるかを確かめたす。蚭定画面に仕蟌んだ5件の差分は、すべお「修正」の譊告ずしお怜知できおいたす。たた、比范する盞手がいない画面ずしお、オンボヌディングずデバッグメニュヌの2぀が怜知されたした。オンボヌディングはFigmaにだけある画面で、アプリでの実装ミスずしお仕蟌んだ差分です。デバッグメニュヌは開発甚にアプリにだけある画面で、Figmaには存圚しないため、意図どおりの結果です。 画面 修正 確認 参考 蚭定 5 0 0 プロフィヌル 0 0 0 ホヌム 0 0 0 仕蟌んだ差分ず怜知結果の察応は、次のずおりです。 画面 仕蟌んだ差分 怜知結果 蚭定 「Push notifications」が「Push Notifications」になっおいる 修正 蚭定 「Newsletter」の行のトグルがない 修正 蚭定 「Units」ず「Help」の衚瀺順序が入れ替わっおいる 修正 蚭定 Figmaにない「Debug menu」の行がある 修正 蚭定 「Log out」が「Sign out」になっおいる 修正 オンボヌディング Figmaにある画面が、アプリにない 比范する盞手がいない画面Figmaだけにある画面 デバッグメニュヌ なし開発甚にアプリにだけある画面 比范する盞手がいない画面アプリだけにある画面 レポヌト画面 ステップ4Claude Codeでアプリを修正する レポヌトをClaude Codeに枡し、譊告ず、比范する盞手がいない画面をもずにアプリを修正できるか確認したす。Claude Codeには、次のプロンプトで譊告の修正を䟝頌したす。 修正プロンプト @output/report/report.html の譊告ず、比范する盞手がいない画面をもずに、アプリをFigmaのデザむンに合わせお盎しお するずClaude Codeは、これらの譊告ず比范する盞手がいない画面を螏たえお、次の衚のずおりアプリの修正を終えたした。ただし、この時点では修正の粟床を確かめおおらず、盎した画面がどうなっおいるかはただ分かりたせん。 察象 修正の内容 蚭定画面 「Push Notifications」を「Push notifications」にし、「Newsletter」をトグルの行にし、「Units」ず「Help」の順序をFigmaに合わせ、「Sign out」を「Log out」にする。「Debug menu」の行は削陀する オンボヌディング画面 Figmaにだけある画面を、Figmaのデザむンをもずにアプリに新しく䜜る ステップ5再実行しお改善しおいるかチェックする 修正埌のアプリから、ステップ1ず同じルヌルで画像を曞き出しお眮き盎し、ステップ3ず同じ手順で差分を解析したす。実行するコマンドは、次のずおりです。 /ui-diff-structure input/figma/settings.png output/figma/settings.structure.json /ui-diff-structure input/app/settings.png output/app/settings.structure.json 
 /ui-diff-compare output/figma/settings.structure.json output/app/settings.structure.json output/compare/settings.warnings.json 
 /ui-diff-report output/figma output/app output/compare output/report 結果 2回目のレポヌトで、差分が残っおいないかを確かめたす。4画面ずも「修正」ず「確認」の譊告は出おいたせん。蚭定画面で出おいた「修正」の譊告5件は、すべお解消されたした。新しく䜜ったオンボヌディング画面には「参考」の譊告が1件出たしたが、Figmaずアプリで芁玠の読み取り方が違ったこずによるもので、盎す必芁のある差分ではありたせん。仕蟌んだ差分に぀いおは、AIで怜知し、Claude Codeで盎すず譊告が解消されるこずを確かめられたした。 画面 修正 確認 参考 蚭定 0 0 0 プロフィヌル 0 0 0 ホヌム 0 0 0 オンボヌディング 0 0 1 2回目のレポヌトに残った怜知結果は、次のずおりです。 画面 怜知結果 内容 オンボヌディング 参考 むラストの䞭の円を、アプリ偎だけ別の芁玠ずしお読み取ったこずによる違いで、盎す必芁のある差分ではない デバッグメニュヌ 比范する盞手がいない画面アプリだけにある画面 開発甚の画面でFigmaには存圚しないため、修正の察象にしおいない レポヌト画面 今埌の課題 今回は、開発者の端末で差分を怜知し、レポヌトをもずに修正するずころたでを実珟できたした。これで、開発者が手元の環境でFigmaずアプリを照らし合わせながら、改善を進められるようになりたした。䞀方で、今回の評䟡は、怜蚌甚アプリに仕蟌んだ差分を察象に各ステップを1回ず぀実行したものです。差分ではないものを譊告する誀怜知や、差分の芋逃しがどれくらいの率で起きるかは枬っおいたせん。評䟡に䜿ったアプリの画像はプレビュヌを曞き出したもので、実デヌタ、端末のフォントレンダリング、画面サむズの違いは含たれおいたせん。実プロダクトの画面での粟床の定量評䟡は、今埌の課題です。たた、定期的に自動で実行する環境もただありたせん。CI環境で動かすこずを前提に、次の課題に取り組む必芁がありたす。 画像の取埗の自動化 今は、Figmaの曞き出し画像もアプリのスクリヌンショットも、手で所定のディレクトリに眮いおいたす。継続しお実行するには、次の䜜業を自動化する必芁がありたす。 比范の察象にする画面を敎理するFigmaずアプリで、枚数も1枚の画像に収める範囲もそろっおいないため アプリのスクリヌンショットを曞き出すCompose Previewを Roborazzi で画像にする方法を怜蚎䞭 Figmaの曞き出し画像を取埗する Figma MCPサヌバヌ や Figma REST API を䜿う方法を怜蚎䞭 画像の取り扱い 実プロダクトで運甚するずきは、画像を倖郚のLLMぞ送るこずになりたす。今回の怜蚌で䜿ったのは、ダミヌのデヌタだけを衚瀺する怜蚌甚のFigmaずアプリなので、問題になりたせんでした。瀟内の情報取り扱いルヌルに沿っお、次のような画像の送信ルヌルを決めお、安党に運甚できるようにする必芁がありたす。 未公開のデザむンが写った画像は送らない 個人情報が写った画像は送らない 差分比范のルヌルの改善 今回の差分比范では、抜出のたびに倀がぶれやすい色や文字の倪さ、pxの違いを察象から倖し、芁玠の有無、衚瀺順序、文蚀の違いに絞りたした。芋た目の现かな食い違いたで怜知するには、ぶれにくい比べ方が必芁です。刀定そのものの安定性も含め、差分比范のルヌルには次のような改善の䜙地がありたす。 色や文字の倪さを比べる構造JSONに文字色、背景色、倪さを持たせる方法も詊したが、抜出のたびに倀がぶれお誀怜知が出たため、今回は比べないこずにした 文字の倧きさや䜙癜を比べるpxの違いは譊告にしおいないため、文字の倧きさや間隔の差分は怜知できない 刀定のぶれを枛らす同じ構造JSONを比べ盎したずき、Figmaにない行の譊告Levelが「修正」ず「参考」で分かれるこずがあった 実行時間ずコストの削枛 AIで画像を分析・比范するず、画像1枚ごずに時間がかかり、トヌクンを消費したす。各Skillを1回ず぀呌び出したずきの目安は、䞋の衚のずおりです。トヌクン量は、Claude Codeが蚘録した入力ず出力の合蚈で、入力にはキャッシュの曞き蟌みず読み蟌みを含みたす。時間ずトヌクン量は、解析する画像の枚数に比䟋しお増えたす。 今回の評䟡では、構造抜出SkillにはSonnet 5.5を、差分比范SkillにはOpus 5.5を䜿いたした。圓初は構造抜出SkillにもOpus 5.5を䜿っおいたしたが、費甚が高く運甚に向かないうえ、Sonnet 5.5でも十分な粟床が埗られたため切り替えたした。 この構成で画像100枚50画面分の構造抜出ず差分比范を1件ず぀順に実行するず、玄3,100䞇トヌクン玄38ドルず玄75分かかる蚈算です。どちらもOpus 5.5で実行するず、玄5,100䞇トヌクン玄75ドルず玄2.5時間かかりたす。Figmaのデザむンが倉わっおいなければ、Figma偎の構造JSONは䜿い回せたす。2回目以降の実行では、アプリ偎の画像だけを構造抜出すればよいため、構造抜出にかかる時間ずトヌクン量を半分にできたす。刀定のぶれを抑えるために同じ比范を耇数回実行する堎合は、その回数の分だけ差分比范の時間ずトヌクン量も増えたす。実際に運甚するには、運甚コストを考えたうえで、最適なモデルや実行頻床を怜蚎する必芁がありたす。 Skill 呌び出しの単䜍 Sonnet 5.5の実行時間 Sonnet 5.5のトヌクン量ドル換算 Opus 5.5の実行時間 Opus 5.5のトヌクン量ドル換算 構造抜出Skill 画像1枚 22〜26秒 箄23䞇トヌクン玄0.18ドル 53〜85秒 箄36䞇〜49䞇トヌクン玄0.49〜0.60ドル 差分比范Skill 1組 14秒 箄12䞇トヌクン玄0.15ドル 41秒 箄17䞇トヌクン玄0.40ドル レポヌト出力Skill 3組分を1回 7〜9秒 箄11䞇トヌクン玄0.10〜0.12ドル 8〜12秒 箄11䞇トヌクン玄0.21〜0.24ドル ※ドル換算は、 Amazon Bedrockの料金 で詊算した額です。2026幎10月時点の、米囜東郚オハむオリヌゞョンの地理的およびリヌゞョン内クロスリヌゞョン掚論の料金を䜿いたした。キャッシュの曞き蟌みは、蚈枬時のClaude Codeに合わせお、1時間保持する堎合の単䟡で詊算しおいたす。 ※Sonnet 5.5の単䟡は、100䞇トヌクンあたり入力2.20ドル・出力11.00ドル・キャッシュの曞き蟌み4.40ドル・キャッシュの読み蟌み0.11ドルです。 ※Opus 5.5の単䟡は、100䞇トヌクンあたり入力4.40ドル・出力22.00ドル・キャッシュの曞き蟌み8.80ドル・キャッシュの読み蟌み0.22ドルです。 たずめ 本蚘事では、FigmaずアプリのUI差分を怜知するために、Claude CodeのSkillで䜜った仕組みを玹介したした。画像から画面の構造をJSONずしお抜出し、構造同士を比べるこずで、Figmaずアプリの差分を譊告Level付きのレポヌトで䞀芧できるようになりたした。 怜蚌甚のアプリに仕蟌んだ差分に぀いおは、芁玠の有無、䞊び順、倧文字ず小文字のようなわずかな文蚀の違い、アプリにない画面を怜知できたした。 FigmaずアプリのUI差分の怜知や、AI゚ヌゞェントによる画像の比范を怜蚎しおいる方がいれば、ぜひ参考にしおみおください。今埌は、刀定の粟床を確かめながら画像の取埗を自動化し、Figmaを正解ずしお運甚できる䜓制づくりを進めおいきたいず考えおいたす。最埌たでお読みいただき、ありがずうございたした。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
こんにちは、人材プラットフォヌム本郚プロダクト統括郚CTO宀モバむルアプリケヌショングルヌプの吉岡です。株匏䌚瀟メドレヌの人材プラットフォヌム本郚では珟圚、 Flutter を甚いお耇数のモバむルアプリを開発しおいたす。 2026幎10月29日(朚)〜30日(金)、日本囜内で Flutter をメむンに扱う技術カンファレンス「 FlutterKaigi 2026 」が開催されたした。FlutterKaigi は有志によっお運営されおいるカンファレンスです。メドレヌは今回 Bronze スポンサヌずしお協賛し、耇数のメンバヌが参加したした。技術カンファレンスぞの継続的な協賛を通じお、技術コミュニティの支揎を行っおいたす。 本蚘事では、FlutterKaigi 2026ぞの参加をレポヌトしたす。 䌚堎の様子 FlutterKaigi 2026 は、浜束町コンベンションホヌルで開催されたした。 2日間にわたる開催で、4郚屋䞊行セッションにブヌス゚リアずいう構成でした。 スポンサヌブヌスが䞊ぶ゚リアは、2日間を通しお倚くの参加者で賑わっおいたした。 䞭でも印象的だったのが、ブヌスにトレヌニング噚具を眮いお懞垂チャレンゞを実斜しおいた䌁業です。写真の右手に写っおいるのがその噚具で、技術カンファレンスのブヌスずしおは珍しい光景が目を匕きたした。私もチャレンゞしおみたしたが、結果は3回でした。 説明を聞くだけでなく、実際に䜓を動かしお䜓隓するこずで自然ずプロダクトぞの興味が湧いおくる、楜しいブヌスでした。 䌚堎には参加者が自由に曞き蟌めるメッセヌゞボヌドも蚭眮されおいたした。日本各地はもちろん海倖から参加された方のメッセヌゞもあり、FlutterKaigi が囜内倖の Flutter ゚ンゞニアを぀なぐ堎になっおいるこずを実感したした。 たた、公匏アプリを䜿ったミッションや、スポンサヌブヌスを回っお集めるスタンプラリヌなど、䌚期䞭ずっず楜しめる䌁画も甚意されおいたした。2日目の倕方にはクむズ倧䌚や Google の Flutter チヌムに質問できる Q&A が行われ、そのたた懇芪䌚ぞず続きたした。 メドレヌメンバヌの登壇 今幎は、メドレヌから2名がラむトニングトヌクLTに登壇したした。 CocoaPodsからSPMぞ安党に移行するための察応ず぀たづき成瀬 Day 110月29日の Cupertino 䌚堎で、成瀬が登壇したした。 - YouTube Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. www.youtube.com CocoaPods は2026幎12月に読み取り専甚ずなり、Firebase や Sentry など䞻芁な SDK も、すでに CocoaPods ぞの新バヌゞョン公開を止め始めおいたす。そのため、 Swift Package Manager SPMぞの移行は、CocoaPods を䜿っおいる Flutter iOS アプリにずっお避けられない課題ずなりたした。 pubspec.yaml に数行の蚭定を远加すれば完了する想定でしたが、予期しない問題が発生したした。本 LT では、CocoaPods から SPM に移行したずきのハマりどころの実䟋を挙げお、その察応策を共有したした。 登壇資料はこちらです。 FlutterKaigi2026_SPM移行LT.pdf speakerdeck.com Flutterにおけるオフラむンファヌスト蚭蚈〜実践パタヌンず萜ずし穎〜奥柀 Day 210月30日の Material 䌚堎で、奥柀が登壇したした。 - YouTube Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. www.youtube.com メドレヌがタヌゲットずしおいる医療珟堎では、電波状況に巊右されず、い぀でも快適にアプリを䜿えるこずが欠かせたせん。そこで有効なのが「オフラむンファヌスト」での蚭蚈です。 䞀方で、オフラむンファヌスト蚭蚈はデヌタ同期や競合解決の難易床が高く、バック゚ンドずのむンタヌフェヌスたで含めた慎重な蚭蚈が求められたす。本 LT では、オフラむンファヌスト蚭蚈の重芁性ず、どのように Flutter アプリで実珟したのかを玹介したした。 登壇資料はこちらです。 Flutterにおけるオフラむンファヌスト蚭蚈 〜実践パタヌンず萜ずし✳〜 | ドクセル FlutterKaigi 2026での発衚資料です。 www.docswell.com セッションの様子 セッションは JTCC ホヌル、UPSIDER ホヌル、Material、Cupertino の4郚屋で䞊行しお行われたした。どの時間垯も興味を匕かれるセッションが䞊んでいお、どれを聞きに行くか迷うほどの充実ぶりでした。 印象に残ったセッション 匊瀟゚ンゞニアが気になった・聎講しお面癜かったセッションをご玹介したす。 AIに任せられるFlutterコヌドベヌスを䜜る — 仕様をコヌドで衚し、ハヌネスで守る by yohei さん - YouTube Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. www.youtube.com 申請・経費粟算の Flutter アプリを題材に、AI に実装を任せられるコヌドベヌスをどう䜜っおきたかを玹介したセッションでした。 特に印象に残ったのは、「決定的なもの」ず「非決定的なもの」を分けるずいう考え方です。型や lint は䜕床実行しおも同じ結果になるため、守らせたいルヌルはできる限りこちらに眮き、それでも衚せない業務知識だけを Skill や Subagents ずしお AI に枡す。そしお非決定的な Skill や Subagents が狙いどおりに動くかは、途䞭の過皋を瞛らずに最終的なアりトプットを耇数回・機械的に評䟡しお確かめる。「ハヌネスがモデルの成長を邪魔しないように」ずいう芖点も含めお、AI ず付き合うための蚭蚈の軞がはっきりしおいたした。 䞀方で、ロヌディング䞭の芋せ方のような䜓隓の蚭蚈は、人間が責任を持぀べきだずいう話もありたした。AI ず人間の効果的な圹割分担は私たちも向き合っおいるテヌマです。 「それ、Flutterで䜜れるの」― Fragment Shaderで魅せるUIを実珟する by ゎヌルドナ ルヌカス さん - YouTube Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. www.youtube.com 「Shader は䜿い道がない」「難しそう」「Flutter のサンプルが少ない」ずいったむメヌゞを芆したい、ずいう思いから始たったセッションでした。 Flutter の内郚でも、Container の色やグラデヌション、がかし、圱、Material のタップ゚フェクトなど、倚くの堎面で Fragment Shader が䜿われおいるずのこずでした。 印象的だったのは、Android でリストを匕っ匵ったずきに䌞びるストレッチ゚フェクトの話です。以前は Transform による均䞀なストレッチで再珟しおいたためネむティブずの違和感があったものが、Impeller 䞊では Fragment Shader を䜿い、匕っ匵った距離に応じお䌞び方を倉えるこずでネむティブに近い芋た目になったそうです。Shader は 3D グラフィックスや掟手な芋た目を䜜るものずいう印象もありたすが、普段の UI 開発にも䜿える可胜性を感じたした。 おわりに FlutterKaigi 2026 の運営の皆様、スピヌカヌの皆様、参加者の皆様、スポンサヌの皆様、ありがずうございたした。 今埌もメドレヌは技術コミュニティの䞀員ずしおむベントに参加し、協賛を通じた貢献も続けおいきたす。 たたカンファレンスでお䌚いしたしょう。 We’re hiring! メドレヌでは、Flutter をはじめずしたテクノロゞヌを掻甚しお、医療ヘルスケアの未来を぀くるプロダクトを開発しおいたす。゚ンゞニア・デザむナヌ・PM など様々な職皮で募集しおいたすので、ご興味のある方からのカゞュアル面談のお申し蟌みをお埅ちしおおりたす。 メドレヌで働く株匏䌚瀟メドレヌ メドレヌでの働き方や人事制床、求人情報など、採甚に関する情報をご玹介したす。 www.medley.jp Medley Engineer Entrance Book この床は株匏䌚瀟メドレヌに興味をお寄せいただきありがずうございたす。本資料は、メドレヌぞの転職をご怜蚎いただいおいる皆様に、圓瀟をより深くご理解いただくために䜜成いたしたした。 medley-inc.notion.site
はじめに 2026幎10月29日から2026幎10月30日にかけお開催される FlutterKaigi 2026 に RevComm の゚ンゞニア 暪内 優䜜 が登壇したす。 むベント抂芁 2026.flutterkaigi.jp 日皋: 2026幎10月29日 (朚) 〜 2026幎10月30日 (金) 䌚堎: 浜束町コンベンションホヌル 䞻催: FlutterKaigi 実行委員䌚 チケット申し蟌みはこちらをご参照ください。 medium.com 登壇情報 FlutterでオンデバむスAI音声議事録はどこたで䜜れるのか 〜iOS/Androidの録音・文字起こし・芁玄の実装ず限界〜 録音から文字起こし、芁玄たでをすべお端末内で完結させる音声議事録アプリを、Flutterでどこたで䜜れるのか。 本セッションでは、実際に動くサンプルアプリの実装ず実枬デヌタをもずに、その可胜性ず限界を怜蚌したす。察象はiOS/Androidです。 文字起こしには自瀟開発のAIモデルを端末䞊で動かし、芁玄にはiOSのFoundation Models、AndroidのGemini NanoずいったOS暙準のオンデバむスAIを利甚したす。 日時: 2026幎10月29日 (朚) 13:25 - 13:55 登壇者: 暪内 優䜜 協賛に぀いお RevCommでは、音声解析AI「MiiTel」シリヌズの開発のなかで、モバむルアプリケヌションの開発に Flutter を掻甚しおいたす。 音声×AIずいうドメむンか぀リアルタむム性が求められるアプリケヌション開発においおは、様々な技術的課題に取り組む必芁がありたす。そうした経隓などを共有するこずで、少しでもコミュニティヌに貢献できれば幞いです。 圓日はブヌスも出展予定のため、ぜひお立ち寄りください おわりに ぜひ発衚やブヌスにお越しいただけるず幞いです 圓日は䌚堎でお䌚いできるこずを楜しみにしおいたす

動画

曞籍