モバイル開発におけるクロスプラットフォームの期待と課題降矢大地
View Slide
降矢大地Google Developers Expert@wasabeef_jpwasabeefCA Developer ExpertsDeveloper Productivity 室
•近年、またクロスプラットフォームが人気を集め始めています。現在は主に Flutterと React Native が主要な市場プレイヤーですが、クロスプラットフォームが何をもたらすのかを話します。クロスプラットフォーム
•1. モバイルアプリ開発の現状と課題•2. クロスプラットフォーム分野への期待と課題•3. クロスプラットフォームの注目技術Flutter、Kotlin MPP、React Native、.NET MAUI•4. メディア事業部としての今後の取り組み今日話すこと
モバイルアプリ開発の現状と課題
• モバイルアプリ開発は成熟期でもあるので、致命的な課題もなく可もなく不可もない現状。• Jetpack Compose/Swift UI などの宣言的な UIを構築できる仕組みが来年くらいから安定化されるかも。現状
• iOS/Android の機能仕様ずれ(認識ずれ、SDK・ライブラリ差のずれ)• Androidエンジニア不足の課題(例)• 開発期間の長期化課題
Androidエンジニア不足の課題(例)
弊社も例外ではなく、Android と iOS のエンジニア数でバランスが取れておらず Android アプリの開発が遅れることがあるiOS 50 ਓAndroid 40 ਓAndroidエンジニア不足の課題(例)
iOS 50 ਓAndroid 50 ਓ経営課題その差、iOS 3 人で 1 プロダクトのアプリを作るとするとプロダクト 3 つ分の差がある
多くの会社が Android エンジニアの中途採用は年間 1 人するのもやっとの状態であり、弊社も去年から中途採用も即戦力より第二新卒を狙っていく方向にしたりしてみたが、大きな採用効果は得られていない+ 10 ਓAndroid Λ࠾༻ʁiOS 49 ਓAndroid 37 ਓ難題経営課題
クロスプラットフォーム分野への期待と課題
• アプリ動作の安定性 (クロスプラットフォーム <= ネイティブ)• 将来性、先行き不安• iOS/Android で共通の UI(悪くも)• iOS/Android の新機能への追従の遅れ?課題
•開発元の企業がいかに大企業だろうとエンジニアコミュニティに受けが良くないと廃れていった将来性、先行き不安
• アプリ動作の安定性がかなり向上 (60 fps)• エンジニアのリソース確保• 開発期間短縮• 2020年、開発コミュニティの急速的な拡大• iOS/Android で共通の UI(良くも)期待
エンジニアのリソース確保
エンジニアのリソース確保サーバエンジニアiOS エンジニアWeb エンジニアAndroid エンジニアこれまでの Swift/Kotlin アサインスタイル
ཧతͳΫϩεϓϥοτϑΥʔϜͷΞαΠϯελΠϧサーバエンジニアアプリエンジニアWeb エンジニアアサインプールとりあえず1人以上いれば iOS/Android アプリ両方開発可能エンジニアのリソース確保
サーバエンジニアアプリエンジニアWeb エンジニアアサインプール他のPJへ余剰エンジニアのリソース確保ཧతͳΫϩεϓϥοτϑΥʔϜͷΞαΠϯελΠϧ
開発コミュニティの急速的な拡大
• 世界的に200万人以上のエンジニアが Flutter を使っていて毎月10%増加している• 利用数上位5地域は インド、中国、米国、EU、ブラジル• Google Play に既に100,000個、毎月10,000個以上のFlutter アプリがアップされている開発コミュニティの急速的な拡大
Flutter の採用事例(国内)
• 社内初事例(国内?)• 2018 年 6 月サービス開始(Flutter stable 1.0 のリリースは2018年 12 月)• 担当アプリエンジニア 2 人REQU
Flutter の採用事例(国外)
༽ (Idle Fish)• アリババ傘下のフリマアプリ• カメラ機能で商品検索• アプリ評価 ★ 4.6 DAU 2000万• Flutter 事例でユーザ数が世界最大級
クロスプラットフォームの注目技術
クロスプラットフォームの注目技術• Flutter• Kotlin Multiplatform projects• React Native• .NET Multi-platform App UI (MAUI)
• Google によって開発• 2018 年 12 月リリース• まだ現在も Breaking Changes はある• Dart• ステートフルホットリロード (高速開発)• 独自 UI (豊富で良く動く)Flutter
• グラフィックライブラリ• Android, Chrome, Firefox, Blink, Flutter で採用されている• Skia は Vulkan をバックエンドエンジンとして変更可能• Android 9 以降、デフォルトのレンダラーは Skia になっている(8 と 9 でUIが変わったのはそのため)。Flutter にするとレイヤーが増えるもののレンダラーは同じFlutter and Skia
Flutter and Skia対応プラットフォーム• Windows 7, 8, 8.1, 10• macOS 10.10.5 or later• iOS 8 or later• Android 4.1 (JellyBean) or later• Ubuntu 14.04+, Debian 8+, openSUSE 13.3+, or Fedora Linux 24+• もちろん iOS でも Windows でも動作する
• Swift/Kotlin で良い開発体験をしてきたエンジニアには Dart という言語は弱い。よく言えば簡単。• アーキテクチャの議論が活発(良くも悪くも)• 各 SaaS の SDK が無い場合があるFlutter の悪い点
• 2016 年に突如発表された• Zircon kernel ベースの OS• Android の負債を全てゼロするべく開発されたと言われている• Google Nest デバイスは Fuchsia が乗っておりアプリは Flutter で作られているFlutter and Fuchsia
• Facebook によって開発• JavaScript• 2015 年 3 月リリース• ホットリロード (高速開発)• 既に成熟した大きなコミュニティ• それぞれのネイティブ UI を呼ぶ• EXPO によるホットリリース(審査なし)React Native
• Web 色が強すぎた打ち出しだったために iOS/Androidエンジニアからほとんど見向きもされていない。• JavaScript !-> Native 呼び出しのブリッジが非同期実装で扱いづらく、全てのモジュールをオープン状態でまっていないといけない。※今年内部実装変える発表あったので、また変わるかもReact Native の悪い点
• JetBrains によって開発• UI の共通化はせず、ビジネスロジックの共通化に特化している• 認証、ログなどの共通化• 表に出てるサーバ側の Kotlin であればサバクラでモデルの共通化Kotlin Multiplatform
JetBrains の野望としてはクラサバのロジックを全て共通化すること。将来的には UI にも手を出しそうな情報を小出ししている。Kotlin MultiplatformKotlin/LLVMKotlin/JVM Kotlin/JVMKotlin/JSCommon code
Kotlin/Native - Target PlatformsiOS (arm32, arm64, simulator x86_64)macOS (x86_64)Android (arm32, arm64)Windows (mingw x86_64, x86)Linux(x86_64, arm32, MIPS, MIPS LE, Raspberry Pi)WebAssembly (x86_64)
• iOS エンジニアコミュニティに刺さってない。• iOS のエンジニアも Kotlin と Gradle を覚えないといけない。• 以前は、Dispatchers.Main しか指定できなくてメインスレッドしかなかったけど、1週間ほど前に PRマージされてたので、もう改善されてるかも。Kotlin Multiplatform の悪い点
• Microsoft が開発• 宣言的 UI• まだ今年の 5 月に発表されたばかりでこれからに期待• MVU アプリアーキテクチャはモバイルアプリ界隈にとっては新しい風• ステートフルホットリロード (高速開発).NET Multi-platform App UI
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠