2020/07/18 Zli × DMM 合同LT にて発表
Kotlin/MPPではじめるマルチプラットフォーム開発2020/07/18 Zli × DMM 合同LT
View Slide
自己紹介HN: マヤミト会津大学26期 (学部3年)Zli 現代表GitHub: https://github.com/yt8492好きな技術: Android, Kotlin, gRPC最近、Kotlin/JSでポートフォリオサイトを作りましたhttps://yt8492.comTwitter: 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/Calculatorhttps://github.com/yt8492/Calculator
感想- Kotlinは表現力の高い言語なので、プラットフォームに依らない処理を書くのに向いていると感じた- JSやTSの知識なしでReactなどを扱えるのはKotlin/MPPならではの利点だと思う- ビジネスロジックをKotlin/MPPで書いてAndroidとiOSから使うのは十分に現実的だと思う- iOS以外はまだまだ情報が少ないので実戦投入は厳しいかも?- もしガッツリKotlin/MPPを採用しているチームがあれば僕を働かせて下さい
ありがとうございました!Kotlin/JSについてLTした過去の資料もよかったら見てみてください!Webフロント開発?それ、 Kotlinでもできるよ。