Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlinではじめるマルチプラットフォーム開発

 Kotlinではじめるマルチプラットフォーム開発

2020/07/18 Zli × DMM 合同LT にて発表

Yuta Tomiyama

July 18, 2020
Tweet

More Decks by Yuta Tomiyama

Other Decks in Programming

Transcript

  1. Kotlin/MPPではじめる
    マルチプラットフォーム開発
    2020/07/18 Zli × DMM 合同LT

    View Slide

  2. 自己紹介
    HN: マヤミト
    会津大学26期 (学部3年)
    Zli 現代表
    GitHub: https://github.com/yt8492
    好きな技術: Android, Kotlin, gRPC
    最近、Kotlin/JSでポートフォリオサイトを作りました
    https://yt8492.com
    Twitter: yt8492

    View Slide

  3. そもそも従来のクロスプラットフォーム開発
    とどう違うのか?

    View Slide

  4. 従来のクロスプラットフォーム開発
    - 基本的に一つのコードでAndroidとiOS(とWeb)が動く
    - ビジネスロジックもUIも共通化
    - プラットフォーム固有の処理をさせたいときに若干面倒
    ビジネスロジック
    UI

    View Slide

  5. Kotlin/MPP
    - プラットフォームに関わらず共通の処理をKotlinで書くことができる
    - UIは各プラットフォームごとに実装する(基本的にそれぞれのネイティブ)
    - UIの実装を各プラットフォームごとに書く必要がある分手間はかかるが、ネイティブ
    で実装できることは基本的になんでもできる
    ビジネスロジック
    UI

    View Slide

  6. Kotlin/MPPのしくみ
    - KotlinのコードをJavaScriptやObjective-Cなどにトランスパイルし、それを各プラッ
    トフォームのコードから利用する
    - 各プラットフォームのラッパーライブラリが用意されている場合はKotlinだけで完結
    する(Kotlin/JS向けのReactラッパーなど)

    View Slide

  7. Kotlin/MPPのしくみ
    iOS POSIX

    View Slide

  8. Kotlin/MPPのメリット・デメリット
    メリット
    - プラットフォーム固有の処理に悩む必要がなくなる
    - (ラッパーが用意されている場合)学習コストがライブラリ部分のみで済む
    デメリット
    - そもそも情報が少ない
    - 各プラットフォームの知識が必要

    View Slide

  9. 電卓アプリを作って考えてみる

    View Slide

  10. 電卓アプリに必要な要素
    - 計算式を入力する
    - 式を評価し、計算を行う
    - 計算結果を出力する

    View Slide

  11. 電卓アプリに必要な要素
    - 計算式を入力する
    - 式を評価し、計算を行う
    - 計算結果を出力する
    「式を評価し、計算を行う」のはプラットフォームに依存しない処理
    -> Kotlin/MPPで共通化できる!

    View Slide

  12. 開発の流れ
    計算部分をKotlinで実装

    Android, iOS, Webフロント, CLIのプロジェクトから共通モジュールとして参照、UI部分
    のみプラットフォームごとに実装

    View Slide

  13. プロジェクトのおおまかな構成
    Calculator
    ├── common // 共通モジュール(Kotlin/MPP)
    ├── android // Androidネイティブ(Kotlin/JVM)
    ├── ios // iOSネイティブ(Swift)
    ├── webfront // React(Kotlin/JS)
    └── cli // Windows, Linux, Mac(Kotlin/Native)

    View Slide

  14. 共通モジュールの実装
    操車場アルゴリズムを用いて計算処理を実装
    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

    View Slide

  15. Androidアプリの実装
    共通モジュールをそのままKotlinのライブラリとして読み込み、通常のアプリ開発と同じ
    流れで開発

    View Slide

  16. iOSアプリの実装
    共通モジュールをiOS向けのライブラリとしてビルド、Objective-Cのライブラリとして読み
    込み、今回はSwiftUIを用いて開発
    (時間がなくてUIが汚いけど許して…)

    View Slide

  17. Webフロントの実装
    共通モジュールをKotlinのライブラリとして読み込み、Kotlin/JSとkotlin-reactを用いて実
    装したものをWebpackでビルド

    View Slide

  18. CLIアプリの実装
    共通モジュールをKotlinのライブラリとして読み込み、実装したものをWindows, Linux,
    Mac向けにバイナリをビルド

    View Slide

  19. 計算ロジックを共有して
    プラットフォーム毎に実装できた

    View Slide

  20. リポジトリ
    yt8492/Calculator
    https://github.com/yt8492/Calculator

    View Slide

  21. 感想
    - Kotlinは表現力の高い言語なので、プラットフォームに依らない処理を書くのに向い
    ていると感じた
    - JSやTSの知識なしでReactなどを扱えるのはKotlin/MPPならではの利点だと思う
    - ビジネスロジックをKotlin/MPPで書いてAndroidとiOSから使うのは十分に現実的
    だと思う
    - iOS以外はまだまだ情報が少ないので実戦投入は厳しいかも?
    - もしガッツリKotlin/MPPを採用しているチームがあれば僕を働かせて下さい

    View Slide

  22. ありがとうございました!
    Kotlin/JSについてLTした過去の資料もよかったら見て
    みてください!
    Webフロント開発?それ、 Kotlinでもできるよ。

    View Slide