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
KMMでマルチプラットフォーム開発を始めよう
Search
akkiee76
June 10, 2023
Technology
280
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
Graph Art with Charts API – Beyond Data Visualization
akkie76
0
240
Meet the Translation API
akkie76
0
490
コードレビューで開発を加速させるAIコードレビュー
akkie76
1
730
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
6.2k
コードレビューを支援するAI技術の応用
akkie76
5
1.3k
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
9.9k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
1.2k
Observationではじめる値監視
akkie76
4
4.9k
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
780
Other Decks in Technology
See All in Technology
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
140
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.3k
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
180
20260619 私の日常業務での生成 AI 活用
masaruogura
1
230
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
200個のGitHubリポジトリを横断調査したかった
icck
0
130
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
150
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
300
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
260
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.5k
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
700
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Tell your own story through comics
letsgokoyo
1
960
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Mobile First: as difficult as doing things right
swwweet
225
10k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
How to build a perfect <img>
jonoalderson
1
5.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Building an army of robots
kneath
306
46k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
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 ご静聴ありがとうございました