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
95
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
990
PostCSSの導入検証 / r&d_meetup_css_t_okkan
txkxyx
0
910
ゲーム開発で始めるオブジェクト指向 / 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
AIチャットボット開発への生成AI活用
ryomrt
0
170
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
150
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
4
230
Can We Measure Developer Productivity?
ewolff
1
150
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
170
複雑なState管理からの脱却
sansantech
PRO
1
150
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
390
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
600
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
160
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Git: the NoSQL Database
bkeepers
PRO
427
64k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Practical Orchestrator
shlominoach
186
10k
Writing Fast Ruby
sferik
627
61k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
The Invisible Side of Design
smashingmag
298
50k
Building Adaptive Systems
keathley
38
2.3k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
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