Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
KMMでマルチプラットフォーム開発を始めよう
Search
akkiee76
June 10, 2023
Technology
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
KMMでマルチプラットフォーム開発を始めよう
akkiee76
June 10, 2023
More Decks by akkiee76
See All by akkiee76
EmptyViewは本当に“空”なのか?
akkie76
0
31
Graph Art with Charts API – Beyond Data Visualization
akkie76
0
270
Meet the Translation API
akkie76
0
520
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
790
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
6.2k
コードレビューを支援するAI技術の応用
akkie76
5
1.3k
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
10k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
1.3k
Observationではじめる値監視
akkie76
4
4.9k
Other Decks in Technology
See All in Technology
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.4k
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
420
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
230
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
8
7.8k
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
350
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
3
980
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
340
Claude Code本って、 読む必要あるの?
oikon48
2
380
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
120
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
130
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
170
Webとヘルスデータ
yukukotani
1
370
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Designing Experiences People Love
moore
143
24k
Technical Leadership for Architectural Decision Making
baasie
3
560
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Fireside Chat
paigeccino
43
4k
A Tale of Four Properties
chriscoyier
163
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
270
Transcript
ランチタイムLT会 #1 ©2023 RAKUS Co., Ltd. KMMで始めるマルチプラットフォーム開発 @akkiee76 ランチタイムLT会 #1
ランチタイムLT会 #1 Akihiko Sato / 株式会社ラクス Lead Engineer / @akkiee76
SaaS 開発 (Backend, Frontend) / Mobile 開発 (iOS, Android) 上流工程、コードレビュー、チームの課題改善など コールドブリューコーヒー☕ / パン作り🍞 / あんバターフランス🥐 自己紹介
ランチタイムLT会 #1 会社紹介 株式会社ラクス 「ITサービスで企業の成長を継続的に支援します」 をミッションに、お客様の課題解決やビジネスの成 長をを継続的に支援するクラウドサービスを提供し ています。
ランチタイムLT会 #1 今日伝えたいこと Kotlin Multiplatform for Mobile (KMM) を活用したクロスプラットフォーム開発の導入
ランチタイムLT会 #1 クロスプラットフォーム開発とは? 1つのコードベースを使用して複数のモバイルプラットフォーム向けに アプリを開発する手法。開発者は、異なるプラットフォームごとに独立したア プリを作成する必要がなくなり、開発時間とリソースを節約することも。 ・ React Native ・
Flutter ・ Unity
ランチタイムLT会 #1 クロスプラットフォーム開発とは? メリット ・ 開発 / メンテコストの削減 👑 デメリット
・ ネイティブアプリ固有の機能が実装しにくい ・ プラグインが必要だったり・・・ ・ UIがネイティブに劣る
ランチタイムLT会 #1 クロスプラットフォーム開発の悩み 1. 開発速度・コスト重視でクロスプラットフォームを選定 2. 片手落ち感があっても、ひとまずリリース 3. ネイティブの機能要求が増えて来る 4.
プラグインだと機能拡張に限界を感じる(EOLを迎えることも) 5. やっぱりネイティブにしよう
ランチタイムLT会 #1 Kotlin Multiplatform for Mobile (KMM) JetBrainsが開発したKotlinベースのクロスプラットフォーム 開発フレームワーク。1つの共通のKotlinコードベースを使用して、 iOSとAndroidの両方のプラットフォーム向けにネイティブアプリを
開発することができる点が特徴。
ランチタイムLT会 #1 Kotlin Multiplatform for Mobile (KMM) フレームワークイメージ
ランチタイムLT会 #1 Kotlin Multiplatform for Mobile (KMM) アーキテクチャイメージ Compose Multiplatform
ランチタイムLT会 #1 ここからは導入手順を紹介します
ランチタイムLT会 #1 KMM開発に必要な環境 ・ macOS ・ Android Studio ・ Xcode
・ JDK ・ Kotlin Multiplatform Mobile plugin ・ Kotlin plugin あとは brew install kdoctor を実行するだけ brew install kdoctor
ランチタイムLT会 #1 Android Studio からプロジェクト作成
ランチタイムLT会 #1 プロジェクト構成
ランチタイムLT会 #1 プロジェクトビルド
ランチタイムLT会 #1 KMMによって出力されたコード(Android) class MainActivity : ComponentActivity() { override fun
onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApplicationTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background ) { GreetingView(Greeting().greet()) } } } } } @Composable fun GreetingView(text: String) { Text(text = text) } MainActivity.kt
ランチタイムLT会 #1 KMMによって出力されたコード(iOS) ContentView.swift import SwiftUI import shared struct ContentView:
View { let greet = Greeting().greet() var body: some View { Text(greet) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
ランチタイムLT会 #1 KMMによって出力されたコード(iOS) Shared.h __attribute__((objc_subclassing_restricted)) __attribute__((swift_name("Greeting"))) @interface SharedGreeting : SharedBase
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer)); + (instancetype)new __attribute__((availability(swift, unavailable, message="use object initializers instead"))); - (NSString *)greet __attribute__((swift_name("greet()"))); @end
ランチタイムLT会 #1 KMMによって出力されたコード(shared) /commonMain/kotlin class Greeting { private val platform:
Platform = getPlatform() fun greet(): String { return "Hello, ${platform.name}!" } } interface Platform { val name: String } expect fun getPlatform(): Platform class IOSPlatform: Platform { override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion } actual fun getPlatform(): Platform = IOSPlatform() class AndroidPlatform : Platform { override val name: String = "Android ${android.os.Build.VERSION.SDK_INT}" } actual fun getPlatform(): Platform = AndroidPlatform() /iosMain/kotlin /kotlin
ランチタイムLT会 #1 個人的な初感 ・ Jetpack Compose、Swift UI といったモダンフレームワークが採用 ・ Kotlinで実装する共通ロジックは、柔軟に設計ができる
・ Android、iOS 両方のアーキテクチャの知見が必要 ・ これまでのマルチプラットフォーム開発より難易度高い印象 ・ 使いこなせたら生産性が爆上がりしそう
ランチタイムLT会 #1 まとめ KMMは今後も期待が高まるフレームワークです。 使いこなす難易度は高そうですが、 新規開発の機会があれば導入を検討しようと思います!
ランチタイムLT会 #1 ご静聴ありがとうございました