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
Kotlinではじめるマルチプラットフォーム開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yuta Tomiyama
July 18, 2020
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlinではじめるマルチプラットフォーム開発
2020/07/18 Zli × DMM 合同LT にて発表
Yuta Tomiyama
July 18, 2020
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
ビルドプロセスをデバッグしよう!
yt8492
2
520
モバイルアプリ開発を始めよう!
yt8492
0
130
Git勉強会
yt8492
0
240
なんでもやってみる勇気
yt8492
0
140
Android Autoが思ったよりしんどい話
yt8492
0
260
apollo-kotlinにcontributeした話
yt8492
0
200
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
1k
今だからこそ知りたいKotlin Multiplatform
yt8492
0
360
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.4k
Other Decks in Programming
See All in Programming
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Domain-Driven Transformation
hschwentner
2
2.3k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
1
300
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
610
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
golang-bob.pdf
iwatsukayura
0
130
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
160
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
WENDY [Excerpt]
tessaabrams
14
40k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Between Models and Reality
mayunak
4
500
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
Documentation Writing (for coders)
carmenintech
77
5.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
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でもできるよ。