Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Technology selection for mobile cross-platform
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
txkxyx
September 08, 2021
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Technology selection for mobile cross-platform
2021/9/8(水)19:00〜 ラクスR&D Meetup - Flutterでの発表資料です。
txkxyx
September 08, 2021
More Decks by txkxyx
See All by txkxyx
寿命の長いドキュメントの 鮮度を保つ仕組み
txkxyx
0
350
Kubernetes導入に備えたGitOpsなCI/CDを構築する/rakus_meetup_202206
txkxyx
0
1.5k
PostCSSの導入検証 / r&d_meetup_css_t_okkan
txkxyx
0
1k
ゲーム開発で始めるオブジェクト指向 / ooltjp_vol3_t_okkan
txkxyx
1
590
itbookslt_vol2_takuyaokamoto
txkxyx
0
15k
Rakusmeetup_20210804_Takuya_Okamoto
txkxyx
0
2.1k
今年やることやらないこと
txkxyx
0
58
クロスプラットフォームの技術選定 ~ライブラリ編~
txkxyx
0
400
Other Decks in Technology
See All in Technology
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
300
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
940
Reactの設計論
uhyo
13
6k
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
340
Omarchy Quattro の日本語設定周り
simosako
2
120
GoCon2026 - Open Source, Open World
sanposhiho
2
950
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
370
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
220
Webとヘルスデータ
yukukotani
1
200
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
120
AIで仕事のやり方を変える
matsu7874
3
1k
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
250
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1033
470k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Designing for humans not robots
tammielis
254
26k
Typedesign – Prime Four
hannesfritz
42
3.2k
Building Adaptive Systems
keathley
44
3.2k
Mind Mapping
helmedeiros
1
350
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Why Our Code Smells
bkeepers
PRO
340
58k
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