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 を使った話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
keigomichi
April 22, 2023
Technology
0
260
はじめての個人開発で、Jetpack Compose を使った話
第3回 iOS&Android学生エンジニアLT
https://sandbox-style.connpass.com/event/280469
keigomichi
April 22, 2023
Tweet
Share
More Decks by keigomichi
See All by keigomichi
技術書典 14 戦利品紹介
keigomichi
0
42
魔法のスプレッドシートの裏側
keigomichi
0
150
Thundercard - 名刺のようなSNSアプリ
keigomichi
0
76
QR I/O - 読み取りも、作成も。
keigomichi
0
94
Capture The Task - 写真を撮ってタスク管理
keigomichi
0
66
CouponRoll - 店舗アプリを気軽に導入
keigomichi
0
71
Other Decks in Technology
See All in Technology
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
360
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
410
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
20260204_Midosuji_Tech
takuyay0ne
1
160
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
850
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
210
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
190
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Exploring anti-patterns in Rails
aemeredith
2
250
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
The untapped power of vector embeddings
frankvandijk
1
1.6k
A better future with KSS
kneath
240
18k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Faster Mobile Websites
deanohume
310
31k
Transcript
はじめての個人開発で、 Jetpack Compose を使った話 第 3 回 iOS & Android
学生エンジニア LT 2023/04/22 @keigomichi 1
TOC 自己紹介 春インターンに参加 Jetpack Compose どうして Compose を使ったの? Compose 導入で使ったライブラリ等
まとめ 2
自己紹介 はじめまして、keigomichi です 広島大学情報科学部情報科学科 B3 Web フロントエンド・Flutter・Kotlin インターンやハッカソンに出没 趣味は、のりもの ・おいしい食事
3
春インターンに参加 Android 向け育成型インターンに参加しました。 4
Android 向け育成型インターン 2 週間で、「1 人でアプリを開発しリリースできるようになる」ことが目標 プロフィール交換アプリを個人で開発 メンター社員の方に質問し放題 5
完成したアプリ 6
Jetpack Compose Compose を使用しました。 7
どうして Compose を使ったの? React や Flutter を使用していたので、宣言的 UI に慣れていた 主に
Kotlin だけで開発を進めることができ、コード削減 プレビュー機能が充実 "Recommendations for Android architecture" でも Recommended に 8
Compose 導入で使ったライブラリ等 Compose Destinations Showkase Accompanist androidx.compose.ui.viewinterop 9
Compose Destinations Navigation Compose だと面倒な画面遷移の実装をシンプルに 型安全な引数 KSP によるコード生成 10
基本的な用法 画面 Composable に @Destination アノテーションをつける @RootNavGraph(start = true) @Destination
@Composable fun HomeScreen( navigator: DestinationsNavigator, ) { // ... } 11
基本的な用法 "build/generated/ksp/debug/kotlin/" 以下にビルドされる HomeScreenDestination.kt public object HomeScreenDestination : DirectionDestination {
public operator fun invoke(): Direction = this @get:RestrictTo(RestrictTo.Scope.SUBCLASSES) override val baseRoute: String = "home_screen" override val route: String = baseRoute // ... } 12
基本的な用法 "build/generated/ksp/debug/kotlin/" 以下にビルドされる DestinationNavHost.kt public object NavGraphs { public val
root: NavGraph = NavGraph( route = "root", startRoute = HomeScreenDestination, destinations = listOf( HomeScreenDestination, ) ) } 13
基本的な用法 生成された Destination オブジェクトを使って画面遷移 @RootNavGraph @Destination @Composable fun ProfileDetailScreen( navigator:
DestinationsNavigator ) { navigator.navigate(HomeScreenDestination) } DestinationsNavHost を呼び出す DestinationsNavHost(navGraph = NavGraphs.root) 14
引数を渡す(画面 Composable 内で引数を使用する場合) Composable 関数に引数を追加する @RootNavGraph @Destination @Composable fun ProfileDetailScreen(
id: int ) { // ... } 15
引数を渡す(ViewModel で引数を使用する場合) 引数の data class を定義し、 @Destination に設定 data class
ProfileDetailScreenNavArgs( val id: int, ) @RootNavGraph @Destination(navArgsDelegate = ProfileDetailScreenNavArgs::class) @Composable fun ProfileDetailScreen( navigator: DestinationsNavigator, profileDetailViewModel: ProfileDetailViewModel = hiltViewModel(), ) { // ... } 16
引数を渡す(ViewModel で引数を使用する場合) "build/generated/ksp/debug/kotlin/" 以下にビルドされる ProfileDetailScreenDestination.kt public object ProfileDetailScreenDestination : TypedDestination<ProfileDetailScreenNavArgs>
{ @get:RestrictTo(RestrictTo.Scope.SUBCLASSES) override val baseRoute: String = "profile_detail_screen" override val route: String = "$baseRoute/{id}" // ... override fun argsFrom(savedStateHandle: SavedStateHandle): ProfileDetailScreenNavArgs { return ProfileDetailScreenNavArgs( id = uUIDNavType.get(savedStateHandle, "id") ?: throw RuntimeException("'id' argument is mandatory, but was not present!"), ) } } 17
引数を渡す(ViewModel で引数を使用する場合) ViewModel で SavedStateHandle から引数を取得する @HiltViewModel class ProfileDetailViewModel @Inject
constructor( savedStateHandle: SavedStateHandle, ) : ViewModel() { val navArgs: ProfileDetailScreenNavArgs = ProfileDetailScreenDestination.argsFrom(savedStateHandle) // OR val navArgs: ProfileDetailScreenNavArgs = savedStateHandle.navArgs() } 18
引数を渡す(ViewModel で引数を使用する場合) SavedStateHandle.navArgs() は… NavArgsGetters.kt public inline fun <reified T>
SavedStateHandle.navArgs(): T { return navArgs(T::class.java, this) } 19
その他 ディープリンク Navigation Bar との統合 アニメーション Wear OS のサポートもあるらしい 20
Showkase UI 要素のカタログを 1 つの Activity で生成 @Preview アノテーションをつけるだけ Paparazzi
等々と組み合わせて VRT も可能 (らしい) 21
Accompanist Compose でまだ提供されていない便利な API を提供 e.g. Status Bar, Navigation Bar
/ WebView / Permission androidx.compose.ui.viewinterop AndroidView コンポーザブルを使って、Compose 内で view 要素を扱える 22
まとめ Compose を使ってアプリを作りました Annotation processing library が便利 Compose Destinations -
画面遷移をシンプル・安全に実装できる Showkase - UI カタログを簡単に作れる・VRT にも使える 拡張ライブラリーや相互運用のための API も 23
ご清聴ありがとうございました 👋 24