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
Technology selection for mobile cross-platform
Search
txkxyx
September 08, 2021
Technology
0
100
Technology selection for mobile cross-platform
2021/9/8(水)19:00〜 ラクスR&D Meetup - Flutterでの発表資料です。
txkxyx
September 08, 2021
Tweet
Share
More Decks by txkxyx
See All by txkxyx
Kubernetes導入に備えたGitOpsなCI/CDを構築する/rakus_meetup_202206
txkxyx
0
1k
PostCSSの導入検証 / r&d_meetup_css_t_okkan
txkxyx
0
930
ゲーム開発で始めるオブジェクト指向 / ooltjp_vol3_t_okkan
txkxyx
1
530
itbookslt_vol2_takuyaokamoto
txkxyx
0
15k
Rakusmeetup_20210804_Takuya_Okamoto
txkxyx
0
1.6k
今年やることやらないこと
txkxyx
0
45
クロスプラットフォームの技術選定 ~ライブラリ編~
txkxyx
0
330
Other Decks in Technology
See All in Technology
Wantedly での Datadog 活用事例
bgpat
2
700
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
200
[トレノケ雲の会 mod.13] 3回目のre:Inventで気づいたこと -CloudOperationsを添えて-
shintaro_fukatsu
0
110
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
500
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
27
23k
最近のSfM手法まとめ - COLMAP / GLOMAPを中心に -
kwchrk
4
660
Yahoo! ズバトクにおけるフロントエンド開発
lycorptech_jp
PRO
0
100
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
140
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
180
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
550
.NET 9 のパフォーマンス改善
nenonaninu
0
1.3k
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
300
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Done Done
chrislema
182
16k
Being A Developer After 40
akosma
88
590k
Why Our Code Smells
bkeepers
PRO
335
57k
Gamification - CAS2011
davidbonilla
80
5.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
For a Future-Friendly Web
brad_frost
175
9.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A designer walks into a library…
pauljervisheath
205
24k
Statistics for Hackers
jakevdp
796
220k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Transcript
©2020 RAKUS Co., Ltd. モバイル開発を省力化する クロスプラットフォームツールの評 価 2021/9/8 ラクスR&DMeetup Takuya
Okamoto
Takuya Okamoto • Job ◦ 株式会社ラクス技術推進課に所属 ◦ 先行技術検証(技術推進PJ)の運営 ◦ 非エンジニア向けの技術勉強会の運営
• Career ◦ 2017年〜Webエンジニア ◦ Spring FW、Nuxt.js、AWS ◦ Java研修講師、資格対策本の執筆 • Hobby ◦ 野球 ◦ 筋トレ ◦ アウトドア ▪ 釣り ▪ キャンプ 2
アジェンダ 1. ラクスR&D Meetupの紹介 2. 研究テーマ(モバイルクロスプラットフォーム)の紹介 3. 研究結果 4. 技術選定の実例
3
ラクスR&D Meetup 4
ラクスR&D Meetup ラクスでは継続的にサービスを成長させるために、新しい技術要素を実際に導入する前 に先行検証する「技術推進プロジェクト」というプロジェクトを進めています。 このプロジェクト内で検証した結果については弊社テックブログでも紹介していますが、 勉強会という形式でも共有していこうと思います。 今回は「モバイルクロスプラットフォーム」の導入検証について当社事例を共有いたしま す。 5
研究テーマの紹介 6
• ラクスの課題 ◦ ラクスの開発チームは Webエンジニアがメイン ◦ モバイルアプリの要件が上がると Webエンジニアが開発する可能性 ◦ クロスプラットフォームツールを検証する必要がある
▪ Webエンジニアでもモバイルアプリ開発できる ▪ 開発にかかる工数を削減できる • 想定するゴール ◦ ネイティブ言語での開発と比べて、開発を省力化できるか ◦ 開発を省力化できるなら何を利用すべきか選定する モバイルクロスプラットフォーム 7
研究の結論 1. モバイルクロスプラットフォームを利用すれば、 Web開発者でもモバイルアプリを少ない工数で開発できる 2. まずはFlutterの導入を検討すべき ◦ 弱点が最も少なく汎用性が高い ◦ 開発言語(Dart)がWebエンジニアにとって親和性が高い
8
モバイルクロスプラットフォームの検証 9
ラクスで求められるモバイルアプリ 1. メインのWebサービスのサブシステムとしてのアプリ ◦ モバイル機能(カメラ・NFCなど)をサブシステムとして利用 ◦ 例)楽楽精算アプリ・楽楽精算カードリーダーアプリ 2. Webアプリのモバイル版 ◦
一部のモバイル機能を利用しつつ WebViewでWebアプリを表示する モバイル機能に特化するアプリはあまり要求されない 10
省力化の定義 • ネイティブと同じ開発環境が整っていること • ネイティブより学習コストが低い • ネイティブと同じ機能を実装できる • ネイティブより実装時間、コード量を削減できる ※ネイティブ:iOSとAndroid、ネイティブ言語:SwiftとKotlin
11
選定したツール 主にWeb技術を活かせるかという観点で各ジャンルから選定 • ハイブリット型 Cordova、Ionic Framework、Monacaなど → Ionic Framework • ネイティブ型 Xamarin、React
Nativeなど → React Native • 独自レンダラ型 Flutter、Unityなど → Flutter 12 VS VS
検証方法・比較観点 • 検証方法 ◦ 同じ機能のサンプルアプリを実装 ◦ ネイティブとクロスプラットフォームで実装結果を比較 • 比較観点 ◦
開発環境 ◦ 学習コスト ◦ ネイティブ機能実装 13
結論① Web開発者でもモバイルアプリを少ない工数で開発できる 14
クロスプラットフォームは開発を省力化できる ラクスで求められるモバイルアプリでは省力化できる • 開発環境が整っていること ◦ 同等、または劣っているのの致命的ではない • 学習コストが低い ◦ 1つのネイティブ言語よりも低い、または同等
• 同じ機能を実装できる ◦ 一部実現できないが、事前に把握しツールを選択する • 実装時間、コード量を削減できる ◦ 検証の範囲では1コードで2つのOSに対応できる 15
開発環境 学習コスト 機能実装 16
開発環境の検証結果 17 • Ionic Frameworkはデバッグツール、デザインツールに不安 • React Nativeはデザインツールが劣っているものの、ほぼ同等の開発環境 • Flutterはネイティブと同等の開発環境
Ionic Framework React Native Flutter エディター 〇 Visual Studio Code 〇 Visual Studio Code 〇 Visual Studio Code Android Studio デバッグツール △ Browser DevTools 〇 React Native DevTools 〇 Flutter DevTools デザインツール △ Browser DevTools & Hot reload △ React Native DevTools & Hot reload 〇 Flutter DevTools & Hot reload
開発環境 学習コスト 機能実装 18
学習コストの比較 • ネイティブの2言語(Swift・Kotlin)との比較 • プログラミング言語・ライフサイクルの学習コスト • エンジニアごとに比較 ◦ フロントエンド経験者(FE経験者):Angular、React、Vue.jsの開発経験 ◦
バックエンド経験者(BE経験者):JavaなどのOOP経験 ◦ ラクスはバックエンドエンジニアが多い ※評価者は私(バックエンド経験5年・フロントエンド経験1年) 19
学習コストの検証結果まとめ • フロントエンド経験者 ◦ Web技術で開発できるため、 Ionic FrameworkとReactNativeの学習コストが低い • バックエンド経験者 ◦
DartがOOPでJavaScriptの文法も活かせるので学習コストが低い 20 Ionic Framework React Native Flutter 言語 フレームワーク JavaScript・TypeScript Angular・React・Vue.js JavaScript・TypeScript React Dart Flutter プログラミング言語 学習コスト フロントエンド経験者 〇 〇 △ バックエンド経験者 △ △ ◯ ライフサイクル 学習コスト フロントエンド経験者 〇 〇 △ バックエンド経験者 △ △ △
開発環境 学習コスト 機能実装 21
機能実装の比較 • ネイティブ機能を実装できるか ◦ 実装したサンプルアプリの機能 ローカルデータベース・セキュアストレージ・NFC・カメラ・ Push通知・WebView 22
ネイティブ機能実装結果 • Ionic FrameworkとReact Nativeで実現できなかった機能がある ◦ 特にIonic FrameworkはWebViewを実装できない • Flutterは機能実装では欠点が見つからなかった
23 Ionic Framework React Native Flutter ローカルデータベース 〇 〇 〇 セキュアストレージ 〇 〇 〇 NFC △ △ 〇 カメラ 〇 〇 〇 Push通知 〇 〇 〇 WebView ✕ 〇 〇
実現できなかった機能(NFC) • 事象 ◦ Ionic FrameworkとReact Nativeで、iOSでType-FのICカードを読み込めない • 原因 ◦
ライブラリがNDEFフォーマット以外のフォーマットに対応していない ◦ SuicaやIcocaなどのFelica Standerdのフォーマットに対応したライブラリを 見つけることができなかった • 対策 ◦ ライブラリを自作 or ネイティブ言語で実装 ◦ ライブラリの対応を待つ 24
実現できなかった機能(WebView) • Ionic FrameworkではWebViewを実装できない • WebView上で動作しているため、別のWebViewを起動することができない • Ionic Framewrok上で内蔵ブラウザを表示するできるが、機能が限られる 25
Android OS iOS WebView Ionic Framework 開発者 実装できる範囲 WebView WebView
結論② まずはFlutterの導入を検討すべき 26
Flutterの導入を検討すべき • 特に目立った欠点がなく、汎用性が高く、省力化が期待できる • 質の高いライブラリが提供されている 27 Ionic Framework React Native
Flutter 開発環境 ✕ △ 〇 学習コスト フロントエンド経験者 〇 〇 △ バックエンド経験者 △ △ 〇 機能実現 ✕ △ 〇 ライブラリ数 5656 812 12613 サンプルアプリで使用したライブラリ数 25 29 11 ライブラリ評価機構 ✕ △ 〇
ライブラリ評価機構 • ネイティブ機能の実装はライブラリに大きく依存する ◦ ライブラリの質や選定・運用コスト • ライブラリを評価する仕組みを比較 ◦ Ionic Framework:× 提供されていない
◦ React Native:△ 品質よりも人気度で評価 ◦ Flutter:◯ 品質を評価している 28
ライブラリ評価機構:Ionic Framework • ライブラリを評価する仕組みがない • 公式・コミュニティのライブラリはドキュメントに一覧管理 • 評価できるとすれば ◦ GitHubダウンロード数
◦ 更新頻度 ◦ ドキュメント ◦ 公式 or コミュニティ製 29
ライブラリ評価機構:React Native • React Native Directoryで一覧管理 • Directory Scoreで評価されている •
評価項目 ◦ GitHubリポジトリの評価 ▪ fork ▪ star ▪ download ▪ issue ◦ 最終更新日 • 品質よりも人気度 30
ライブラリ評価機構:Flutter • pub.devで一覧管理 • pub pointsで評価されている • 評価指標 ◦ ライブラリ情報の公開
▪ 依存関係の明記、CHANGELOGファイル、LICENSEファイル、READMEファイル ◦ ドキュメントを提供しているか ▪ publicなAPIのリファレンスの網羅率、Sampleコード ◦ Dartコードの静的解析結果 ◦ DartとFlutterの最新StableのSDKで動作するか • ライブラリの品質を評価している項目が多い 31
Ionic Frameworkの所感 • 長所 ◦ 開発速度が速い ▪ Web標準技術やReact, Vueを使用できる ◦
UIの自由度が高い ▪ ブラウザエンジンで描画されるので、 HTML, CSS, JavaScriptで画面を構築できる ◦ PWAにも対応している ▪ 同じコードをPWAとしてデプロイできる • 短所 ◦ ライブラリの評価機構がない ▪ ドキュメントが不足していて、実装を確認する必要があった ◦ ネイティブ機能の利用が増えるとパフォーマンスが悪くなる ▪ ネイティブ機能はJavaScriptEngineがBridge、負荷がかかりパフォーマンスが遅くなる ◦ WebViewを実装できない ▪ アプリ起動時にWebViewを起動しそ別のWebViewを実装できない 32
React Nativeの所感 • 長所 ◦ 各OSに準拠したネイティブ UIを利用できる ▪ JSXのタグをBridgeして、各OSのネイティブUIを表示できる ◦
Reactの知識を活かせる ▪ Reactで実装したWebのコードを移植・Reactのエコシステムを利用できる • 短所 ◦ 常にBridgeを行っているのでパフォーマンスは遅い ▪ 頻繁にネイティブ機能にアクセス、大量データの表示などで悪化する可能性 ◦ アーキテクチャ変更が予定されており破壊的な変更があるかもしれない ▪ Bridgeへの不安を解消するため ▪ メジャーバージョンが 0であり、仕様も安定しきっていない ▪ Bridgeを廃止した段階でバージョンが 1.0に上がるのでは 33
Flutterの所感 • 長所 ◦ 開発環境が整っている ▪ Android Studioを使用できる、Flutter DevToolsが優秀 ◦
ライブラリの質が高い ▪ pub pointsの高いライブラリはリファレンスが充実しており、実装・選定しやすい ◦ 全体的にパフォーマンスが良好 ▪ Dart VMがUI描画や、ネイティブ機能を実行するので Bridgeする機会が少ない • 短所 ◦ アーキテクチャの議論が活発 ▪ 様々な手法が存在し選定やキャッチアップが必要 ◦ Dartの学習コスト ▪ 他のフレームワークに比べ、既存の技術を流用できない ◦ 両OSで同じUIデザインで表示される ▪ 各OSに準拠したUIデザインで表示したい場合は実装コストが上がる 34
クロスプラットフォームへの懸念点 • 長期的な運用への不安 ◦ 事例が少なく、できるともできないとも言えない状態 ◦ 開発体制やエコシステム・ライブラリの充実度 • 各OSの新機能対応の遅れ ◦
最新機能は四半期〜半年遅れて対応される可能性が高い • ネイティブ言語で実装する必要も ◦ 対応できていない機能やバグ修正 ◦ モバイル開発の知識も必要 35
技術選定の事例 36
研究成果の応用事例 • 事例 ◦ あるサービスで新規でiOSアプリの開発要件 ▪ Push通知・WebViewでWebサービスを表示したい ◦ アプリエンジニア不在のため外注を視野に検討 •
研究結果の活用 ◦ クラスプラットフォームツール(Flutter)での内製化を提案 ▪ Push通知・WebView・WebサービスはOOP言語で実装 ◦ 開発環境・学習コスト・導入事例などからFlutterでの開発に決定 37
まとめ • クロスプラットフォームツールは開発を省力化できる ◦ 開発環境・学習コスト・ネイティブ機能実装の検証結果から ◦ ツールによっては実装できない機能があるので把握すること • ツールの選定は、まずはFlutterを検討 ◦
欠点が少なく、ライブラリの品質も高い • 各ツールの特徴から開発のユースケースに合わせた選定を行う 38