Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Kotlinではじめるマルチプラットフォーム開発
Yuta Tomiyama
July 18, 2020
Programming
0
140
Kotlinではじめるマルチプラットフォーム開発
2020/07/18 Zli × DMM 合同LT にて発表
Yuta Tomiyama
July 18, 2020
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
39
Compose for Webを始めよう
yt8492
0
130
Compose Multiplatform 1.0.0
yt8492
0
52
Kotlin/NativeからCの標準ライブラリを呼び出そう
yt8492
0
54
2021年のKotlin入門
yt8492
0
130
Jetpack Compose + Decomposeで始めるクロスプラットフォーム開発
yt8492
1
170
Kotlin/MPPでブログを作った話
yt8492
0
460
サキドリJetpack Compose for Web
yt8492
0
78
Kotlin/JSでもSSGしたい!
yt8492
1
83
Other Decks in Programming
See All in Programming
Modern Android Developer ~ 안내서
pluu
1
580
IE Graduation (IE の功績を讃える)
jxck
20
12k
エンジニアによる事業指標計測のススメ
doyaaaaaken
1
180
Voiceflowではじめる音声アプリ・チャットボット開発〜2022年版〜 / Introduction to Developing Voice Apps & Chatbots with Voiceflow
kun432
0
170
Running Laravel/PHP on AWS (AWS Builders Day Taiwan 2022)
dwchiang
0
130
Airflowはすごいぞ!
hankehly
0
370
Custom Design Systems in Compose UI
rharter
5
510
Keeping your team in top shape with the Gradle Enterprise API
runningcode
3
120
Angular‘s Future without NgModules: Architectures with Standalone Components @enterJS
manfredsteyer
PRO
0
180
Value and Record Types
hschwentner
0
540
The strategies behind ddd – AdeoDevSummit 2022
lilobase
PRO
4
230
GDG Seoul IO Extended 2022 - Android Compose
taehwandev
0
280
Featured
See All Featured
Happy Clients
brianwarren
89
5.6k
How GitHub (no longer) Works
holman
296
140k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
Designing with Data
zakiwarfel
91
3.9k
Ruby is Unlike a Banana
tanoku
91
9.2k
The Invisible Customer
myddelton
110
11k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
The Art of Programming - Codeland 2020
erikaheidi
32
9.8k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Statistics for Hackers
jakevdp
781
210k
Web development in the modern age
philhawksworth
197
9.3k
BBQ
matthewcrist
74
7.9k
Transcript
Kotlin/MPPではじめる マルチプラットフォーム開発 2020/07/18 Zli × DMM 合同LT
自己紹介 HN: マヤミト 会津大学26期 (学部3年) Zli 現代表 GitHub: https://github.com/yt8492 好きな技術:
Android, Kotlin, gRPC 最近、Kotlin/JSでポートフォリオサイトを作りました https://yt8492.com Twitter: yt8492
そもそも従来のクロスプラットフォーム開発 とどう違うのか?
従来のクロスプラットフォーム開発 - 基本的に一つのコードでAndroidとiOS(とWeb)が動く - ビジネスロジックもUIも共通化 - プラットフォーム固有の処理をさせたいときに若干面倒 ビジネスロジック UI
Kotlin/MPP - プラットフォームに関わらず共通の処理をKotlinで書くことができる - UIは各プラットフォームごとに実装する(基本的にそれぞれのネイティブ) - UIの実装を各プラットフォームごとに書く必要がある分手間はかかるが、ネイティブ で実装できることは基本的になんでもできる ビジネスロジック UI
Kotlin/MPPのしくみ - KotlinのコードをJavaScriptやObjective-Cなどにトランスパイルし、それを各プラッ トフォームのコードから利用する - 各プラットフォームのラッパーライブラリが用意されている場合はKotlinだけで完結 する(Kotlin/JS向けのReactラッパーなど)
Kotlin/MPPのしくみ iOS POSIX
Kotlin/MPPのメリット・デメリット メリット - プラットフォーム固有の処理に悩む必要がなくなる - (ラッパーが用意されている場合)学習コストがライブラリ部分のみで済む デメリット - そもそも情報が少ない -
各プラットフォームの知識が必要
電卓アプリを作って考えてみる
電卓アプリに必要な要素 - 計算式を入力する - 式を評価し、計算を行う - 計算結果を出力する
電卓アプリに必要な要素 - 計算式を入力する - 式を評価し、計算を行う - 計算結果を出力する 「式を評価し、計算を行う」のはプラットフォームに依存しない処理 -> Kotlin/MPPで共通化できる!
開発の流れ 計算部分をKotlinで実装 ↓ Android, iOS, Webフロント, CLIのプロジェクトから共通モジュールとして参照、UI部分 のみプラットフォームごとに実装
プロジェクトのおおまかな構成 Calculator ├── common // 共通モジュール(Kotlin/MPP) ├── android // Androidネイティブ(Kotlin/JVM)
├── ios // iOSネイティブ(Swift) ├── webfront // React(Kotlin/JS) └── cli // Windows, Linux, Mac(Kotlin/Native)
共通モジュールの実装 操車場アルゴリズムを用いて計算処理を実装 https://ja.wikipedia.org/wiki/%E6%93%8D%E8%BB%8A%E5%A0%B4%E3%82% A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0 計算式を構成するトークン、文字列をトークンのリストにパースするパーサ、トークンのリ ストを受け取り計算する計算機をKotlinで実装 文字列のパースにはKotlin/MPP対応のパーサライブラリを使用 https://github.com/h0tk3y/better-parse
Androidアプリの実装 共通モジュールをそのままKotlinのライブラリとして読み込み、通常のアプリ開発と同じ 流れで開発
iOSアプリの実装 共通モジュールをiOS向けのライブラリとしてビルド、Objective-Cのライブラリとして読み 込み、今回はSwiftUIを用いて開発 (時間がなくてUIが汚いけど許して…)
Webフロントの実装 共通モジュールをKotlinのライブラリとして読み込み、Kotlin/JSとkotlin-reactを用いて実 装したものをWebpackでビルド
CLIアプリの実装 共通モジュールをKotlinのライブラリとして読み込み、実装したものをWindows, Linux, Mac向けにバイナリをビルド
計算ロジックを共有して プラットフォーム毎に実装できた
リポジトリ yt8492/Calculator https://github.com/yt8492/Calculator
感想 - Kotlinは表現力の高い言語なので、プラットフォームに依らない処理を書くのに向い ていると感じた - JSやTSの知識なしでReactなどを扱えるのはKotlin/MPPならではの利点だと思う - ビジネスロジックをKotlin/MPPで書いてAndroidとiOSから使うのは十分に現実的 だと思う -
iOS以外はまだまだ情報が少ないので実戦投入は厳しいかも? - もしガッツリKotlin/MPPを採用しているチームがあれば僕を働かせて下さい
ありがとうございました! Kotlin/JSについてLTした過去の資料もよかったら見て みてください! Webフロント開発?それ、 Kotlinでもできるよ。