Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Jetpack Compose + Decomposeで始めるクロスプラットフォーム開発
Search
Yuta Tomiyama
July 10, 2021
Programming
510
1
Share
Jetpack Compose + Decomposeで始めるクロスプラットフォーム開発
Zli 夏の大LT 2021 にて発表
Yuta Tomiyama
July 10, 2021
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
ビルドプロセスをデバッグしよう!
yt8492
2
440
モバイルアプリ開発を始めよう!
yt8492
0
100
Git勉強会
yt8492
0
200
なんでもやってみる勇気
yt8492
0
130
Android Autoが思ったよりしんどい話
yt8492
0
240
apollo-kotlinにcontributeした話
yt8492
0
180
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
970
今だからこそ知りたいKotlin Multiplatform
yt8492
0
330
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
Other Decks in Programming
See All in Programming
Running Swift without an OS
kishikawakatsumi
0
860
NakouPAY説明用
annouim0
0
280
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
360
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
190
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.7k
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
170
実用!Hono RPC2026
yodaka
2
280
From Formal Specification to Property Based Test
ohbarye
0
470
感情を設計する
ichimichi
5
1.6k
CDK Deployのための ”反響定位”
watany
5
900
Spec-driven Development: How AI Changes Everything (And Nothing)
simas
PRO
0
400
Vibe NLP for Applied NLP
inesmontani
PRO
0
520
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
530
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
My Coaching Mixtape
mlcsv
0
110
From π to Pie charts
rasagy
0
170
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
540
Raft: Consensus for Rubyists
vanstee
141
7.4k
Transcript
Jetpack Compose + Decomposeで始める クロスプラットフォーム開発 2021/07/10 Zli 大LT
自己紹介 HN: マヤミト ID: yt8492 会津大学 学部4年 去年までZliの代表やってました GitHub: https://github.com/yt8492
趣味: Kotlin, Twitter, ウマ娘に狂う 後輩に完全にTwitterの人と認識されてしまっており、謎 深夜帯が賑やかなアカウント Twitter: yt8492
Jetpack Compose使ったことある人
Android以外のCompose使ったことある人
Jetpack Composeって何? - Android のネイティブ UI を構築するための最新のツールキット(公式より) https://developer.android.com/jetpack/compose - Kotlinと宣言的UIでAndroidのネイティブ開発ができる
- そろそろstableリリースされる - 最近Android界隈で流行っているので調べると記事が結構出てくると思います
Compose for 〇〇 の登場 - 去年11月、Compose for Desktopが登場 - Kotlin/JVMで動く
- Swing上でSkiaを動かしている - 今年5月、Compose for Webの登場 - Kotlin/JSで動く - DOMベース - Android, Desktop, WebでUIのコード共有が可能に(ココ重要)
UIコード共有の例
UIコード共有の例 common android desktop web
問題点 - ルーティングをどうするか - Androidにはnavigation-composeがある - AndroidのNavigationの仕組みに依存している - DesktopとWebどうする🤔 -
ルーターがないとキツイ - 既存のライブラリのラッパーを書く? - 自分で実装するのはしんどい
Decompose - Kotlin/MPP向けの、プラットフォームに依存しないlifecycle-awareなビジネスロ ジックコンポーネント+ルーターを提供するライブラリ - https://github.com/arkivanov/Decompose - 豊富な対応target - Android
- JVM - iosX64, iosArm64 - macosX64 - tvosX64, tvosArm64 - watchosArm32, watchosArm64, watchosX86, watchosX64 - JavaScript
Decomposeでルーティングを実装する - ルーティングを表す型を定義する - 直和型を使うと便利 - ルーティングに引数をもたせたい場合はここで定義する - ルーティングごとのビジネスロジックコンポーネントを定義する -
ViewModelみたいな役割にするとよさそう? - ルートのコンポーネントでルーティングの型からコンポーネントへのマッピングをす る - ルートのComposable関数でコンポーネントからページごとのComposable関数 へのマッピングをする
TODOアプリを実装してみよう
ルーティングを表す型を定義する
ルーティングごとのコンポーネントを定義する
ルーティングの型からコンポーネントへマッピングをする
コンポーネントからComposable関数へのマッピング
今回のリポジトリ - 全てを解説していたらLTではなくセッションになってしまうため - https://github.com/yt8492/todoCompose - 公式のサンプルよりシンプルに作っています - 時間なくてもろもろ雑だけどゆるして……
時間があればデモ
使ってみた感想 - Jetpack Composeで型安全にルーティングが実現できて最高〜〜〜〜〜 - navigation-compose、文字列でのルーティングなのしんどくないすか? - Androidだけのプロジェクトでもこれ使いたいレベル - Kotlinでのクロスプラットフォーム開発の夢が広がるわね
- ビジネスロジックのコンポーネントの名前がComponentなのちょっとだけしんどい - 宣言的UIだとUIの部品にもcomponentという名前使いがち - 初見でどっち?となる - 思い切ってViewModelという命名にしてしまうのもアリ?
まとめ - Jetpack Composeでクロスプラットフォーム開発をするにはDecomposeがよさそ う - Jetpack Compose、iOSにも対応してくれという気持ち - Kotlin/MPPで全てを実装する未来はすぐそこに(ほんまか?)
あわせて読みたい - 過去の登壇資料 - Kotlin/MPP関連でいっぱい登壇してるのでぜひ参考にしてください - https://speakerdeck.com/yt8492