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
Kotlin Multiplatform Projectを導入してみて
Search
Yasuhiro Shimizu
December 21, 2020
Programming
1.2k
1
Share
Kotlin Multiplatform Projectを導入してみて
トランスクリプト:
https://www.yslibrary.net/2020/12/26/review-kmp-in-production/
Yasuhiro Shimizu
December 21, 2020
More Decks by Yasuhiro Shimizu
See All by Yasuhiro Shimizu
Jetpack Composeから始める、頑張らないVRT
yshrsmz
0
1.2k
BIP39について
yshrsmz
0
190
Android Fireside Chatまとめ
yshrsmz
3
2.3k
RxJava1からRxJava2へ
yshrsmz
0
110
Other Decks in Programming
See All in Programming
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
690
Make GenAI Production-Ready with Kubernetes Patterns
bibryam
0
110
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
120
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.8k
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
160
アーキテクチャモダナイゼーションとは何か
nwiizo
17
4.9k
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
150
RSAが破られる前に知っておきたい 耐量子計算機暗号(PQC)入門 / Intro to PQC: Preparing for the Post-RSA Era
mackey0225
3
130
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
240
3分でわかるatama plusのQA/about atama plus QA
atamaplus
0
140
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
230
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
230
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3k
Believing is Seeing
oripsolob
1
110
Thoughts on Productivity
jonyablonski
76
5.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
It's Worth the Effort
3n
188
29k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
Fireside Chat
paigeccino
42
3.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
120
Transcript
Kotlin Multiplatform Projectを導入してみて
自己紹介 清水泰博 アプリ書いたり フロントエンド書いたり その他 の運営とか
今日話すこと 一人 一人のチームで で 新規アプリを作り コードはどれくらい共通化できたのか アーキテクチャをざっくり のメリット デメリット 上記を
エンジニアの視点から
今日話さないこと についての基本的なこと 技術の詳細 気になった点があったらぜひ質問を
アプリについて
アプリについて ポイント管理 交換アプリ は 参照系メイン 更新系はごく一部
まずはこれ
コード内訳
KMP: 68% Android(Kotlin): 16% iOS(Swift): 16% と は古の社内ライブラリなので除外 レイアウトファイル等は除外 純粋なコードのみ
調べ
アーキテクチャ
レポジトリ構成 モノレポ を一つのレポジトリで管理 共通コードの読込方法考えたくない
CI それぞれで の設定をするだけ 向け 、 向け より軽量な の で とか実行
KMPコードのアーキテクチャ レイヤードアーキテクチャ プレゼンテーション層から下はすべて共通 ユースケース レポジトリ、リモート ローカルデータ 単方向データフロー な 一時的なイベントは別管理
ViewModelのI/F
ViewModelのI/F は から直接使うことができない
iOS向けのラッパー 向けには をコールバックに変換するラッパークラスを用意
iOS向けのラッパー 向けには をコールバックに変換するラッパークラスを用意
共通化できないコードを共通コードで使う 各 固有の機能とか、 とかライブラリを使いたい時 を使う を で定義して、各プラットフォームで実装クラスを用意して テストがしづらいので の利用は最小限にとどめ、 での
書き分けと をメインに
利用しているKMPのライブラリ 非同期 通信 ローカルキャッシュ 環境変数的なやつ ログ
KMPのメリット
使い慣れた言語で書ける エンジニアにとっては使い慣れた エンジニアにとっては新言語なのであんまりかも 似てるとは言われるけど ?
工数削減 以外は同じものを使い回せる 単純計算で 以下にかけていた工数が半分になる ※効果には個人差があります 自分が 側の を作っているときに の人が別画面の を作っている
用語/仕様に差が生まれない 余計なコミュニケーションコストが減る 画面名が異なるとか モデルクラスの名前が異なるとか ビジネス的にクリティカルな部分はすべて共通 「え、これ では実装してないです 」
Viewを各プラットフォームで書ける は それぞれの方法 デザインで 最新 の機能も自由に使える 将来的には が に対応するかも ?
導入する範囲を選べる たとえばリモート クライアントだけ、とか アプリから見ると普通のライブラリなので、既存コードへの導入はしやすい からは のライブラリ からは
KMPのデメリット
学習コスト の人に を学んでもらう必要がある はいろいろ とは違うので も苦戦する 主にスレッド周り 向けを念頭に、テスト書きながらすすめれば大体 でも動く 日本語の資料がまだ少ない
英語を読む覚悟が必要 のチャンネルは結構活発
KMPはまだα版 とはいえ結構安定しているし、プロダクション投入している会社も多い とはいえ破壊的変更もたまにある から がマルチスレッド対応の 必須に 将来的に のメモリ管理モデルは完全にリプレースされることが決定している たまに が真っ赤になる
ライブラリが少ない 逆にチャンスでもある
まとめ
KMPを使ってよかったか コードの共通化を無理なく、使いやすい言語で 工数の削減 ビジネスロジックのみ共有したい場合には有効な選択肢になりうる 既存プロジェクトへの導入も容易
KMPをオススメできるか 条件付きで ある程度自分で調べる力が必要 実装を読んだり の を調べたり 英語の記事読んだり でコミュニケーションとったり 経験の浅い人が多いチームなら もっと安定するのを待ったほうがいいかも
の方がリソースは多いし日本人コミュニティも大きい あるいは素直にそれぞれ個別に実装して経験を積むべき
以上