近年、React Native、Ionic、NativeScriptなどクロスプラットフォームアプリ開発のためのフレームワークがでてきました。
これらはHTML/CSS/JavaScriptなどのWebの技術でAndroidやiOS、またはデスクトップやWebに対応したアプリが作れます。
その中でもIonicを実際の案件に導入してみてわかった事、ネイティブアプリやハイブリットアプリ、HTML5アプリの違い、そのほかのフレームワークについて話したいと思います。
WEB開発者のためのクロスプラットフォームアプリ開発株式会社Fusic浦⽥⼤貴FRONTENDCONFERENCEFUKUOKA2018
View Slide
⾃⼰紹介浦⽥⼤貴Twitter:@daiki7noheGitHub:7nohe出⾝:⻘森県福岡在住:2年趣味:PokémonGo(最近はLet'sGo!ピカチュウ)業務で使う技術:Rails/Laravel/Vue興味のある技術:Angular/React/Vue/Flutter/Nest/JAMStack/IonicなどFRONTENDCONFERENCEFUKUOKA2018
お話すること クロスプラットフォームアプリとは?HTML5ハイブリッドモバイルアプリネイティブハイブリッドモバイルアプリデスクトップアプリProgressiveWebAppsNativeProgressiveWebApps開発⼿法実務で採⽤してみてわかったことWeb開発者のための技術選択FRONTENDCONFERENCEFUKUOKA2018
クロスプラットフォームアプリとは?ここでは1ソースで複数のプラットフォーム(iOS/Androidなど)で動かせるアプリのことを「クロスプラットフォームアプリ」とします。特にHTML/CSS/JavaScriptなどのWebフロントエンド技術で開発できるクロスプラットフォームアプリ開発にフォーカスしてお話します。FRONTENDCONFERENCEFUKUOKA2018
HTML5ハイブリッドモバイルアプリ(以降HTML5アプリ)いわゆるCordovaベースのアプリ。Webアプリ(SPA)をWebView上で動かしている。ネイティブ機能(カメラ、位置情報など)を使うにはCordovaプラグインを介してアクセスする。FRONTENDCONFERENCEFUKUOKA2018
IonicFrameworkFRONTENDCONFERENCEFUKUOKA2018
ざっくりなアーキテクチャFRONTENDCONFERENCEFUKUOKA2018
HTML5(Cordova)アプリFRONTENDCONFERENCEFUKUOKA2018対応プラットフォームパフォーマンスネイティブ操作UIフレームワークWeb,iOS,Androidネイティブには劣るCordovaプラグインがあればIonic,OnsenUI,Fremework7など
ネイティブハイブリッドモバイルアプリ(以降ハイブリッドアプリ)ボタンなどのUIコンポーネントはネイティブAPIで描画される。ReactNativeでいうとReact(JavaScript)がJavaScriptランタイムを経由してネイティブAPIへアクセスするイメージ。FRONTENDCONFERENCEFUKUOKA2018
ハイブリッドアプリFRONTENDCONFERENCEFUKUOKA2018対応プラットフォームパフォーマンスネイティブ操作フレームワークiOS,Androidネイティブには劣るが、HTML5アプリよりは良いライブラリがあればReactNative,NativeScript,Flutter
ハイブリッドデスクトップアプリElectron製アプリのこと。ChromiumとNode.jsのランタイムで動いている。Mac、Windows、Linuxそれぞれで動くアプリが作れる。Cordovaのデスクトップ版のようなもので、HTML/CSS/JavaScriptでデスクトップアプリが作れる。VisualStudioCodeやSlackもElectronでできている。FRONTENDCONFERENCEFUKUOKA2018
ElectronアプリFRONTENDCONFERENCEFUKUOKA2018対応プラットフォームパフォーマンスネイティブ操作UIフレームワークWindows,macOS,Linuxネイティブには劣るElectronが対応していればPhoton
ProgressiveWebAppsWebアプリだがネイティブアプリのような機能や振る舞いを実現するアプリ。具体的にはオフライン動作、Push通知、A2HSなどが使える。アプリストアを介さずユーザーにリーチできるなどの利点があり、今注⽬されている技術。しかしまだまだネイティブよりできることは少ない。FRONTENDCONFERENCEFUKUOKA2018
PWAFRONTENDCONFERENCEFUKUOKA2018対応プラットフォームリーチ⼒ネイティブ操作Web,iOS,Android,Windows,Linux(ブラウザ制限あり)⾼いできることは少ない
WEBもモバイルもデスクトップも全てに対応できるいい感じのツールないの?FRONTENDCONFERENCEFUKUOKA2018
FRONTENDCONFERENCEFUKUOKA2018
Ionicチームが開発を進めるCordovaの後継。Cordovaプラグインも使える。ざっくりいうとCordovaとReactNativeのような仕組みを混ぜたもの。iOS/Androidだけでなく、PWAやデスクトップでも動くアプリが作れる。NativeProgressiveWebAppsCapacitor(beta)FRONTENDCONFERENCEFUKUOKA2018
CordovaとCapacitorFRONTENDCONFERENCEFUKUOKA2018特徴対応プラットフォーム設定スタイルネイティブ操作本番利⽤CordovaiOS,Android,WindowsPhoneConfig.xml制限あり可能CapacitoriOS,Android,Desktop(Windows,Mac,Linux),PWAプラットフォーム毎(info.plist,AndroidManifest.xml)全てそろそろ(ベータ)
開発⼿法 基本プレビューアプリを使ってデバッグしながら開発していく。オンラインPlaygroundが提供されていてサクッと試せる。FRONTENDCONFERENCEFUKUOKA2018
SNACKOnline Editor for React NativeFRONTEND CONFERENCE FUKUOKA 2018
IonicCLIFRONTENDCONFERENCEFUKUOKA2018
IonicCreatorFRONTENDCONFERENCEFUKUOKA2018
IonicStudio(まだ)FRONTENDCONFERENCEFUKUOKA2018
実務で採⽤してみてIonicv3+Cordova IonicでAndroid/iOS対応HTML5アプリを開発。利⽤したネイティブ機能はヘルス、Push通知など。FRONTENDCONFERENCEFUKUOKA2018
Webアプリ感覚でUIを実装ブラウザでレイアウト、ページ遷移などのデバッグができ効率よく開発できた。FRONTENDCONFERENCEFUKUOKA2018
ネイティブ機能を使うなら実機デバッグは必要Ionicプレビューアプリ「IonicDevApp」ではいくつかのCordovaプラグインに対応していたが、やはり動かなかったりするのでXcode経由でデバッグが必要になったりもした。FRONTENDCONFERENCEFUKUOKA2018
ある程度はネイティブやCordovaの知識が必要FRONTENDCONFERENCEFUKUOKA2018ネイティブ機能にアクセスするための権限要求の設定/処理config.xmlに結局iOSやAndroid特有の設定Cordovaプラグインのバグで謎エラーでつまる
WebViewならではの問題も...FRONTENDCONFERENCEFUKUOKA2018
技術選択forWebdevelopersここまでクロスプラットフォームアプリを開発するための技術を紹介。でも⾊々あって結局どの技術を使えばいいのか?どの技術選択を⾏えばいいかをWeb開発者⽬線で考えてみる。FRONTENDCONFERENCEFUKUOKA2018
WEBフロントエンドフレームワークで選ぶFRONTENDCONFERENCEFUKUOKA2018
FRONTENDCONFERENCEFUKUOKA2018AngularCLIコマンドから直接addできるようになった!https://github.com/ionic-team/ionic/pull/15323TypeScriptで書くフルスタックなフレームワーク。CLIコマンドが充実していたり、DIでクラス間を疎結合に書ける。Angular
FRONTENDCONFERENCEFUKUOKA2018React昨今のフロントエンド界を牽引してきたパイオニア。ライブラリも豊富で使っている⼈は多い。ReactNativeの実績も数多くある。
FRONTENDCONFERENCEFUKUOKA2018かなり⼈気。福岡でVueを採⽤している企業が多く、盛り上がっているイメージ。Vue
@ionic/vue(alpha)CapacitorでiOS,Android,PWAに対応できる!FRONTENDCONFERENCEFUKUOKA2018
⽬的別に選ぶケースとしてはWebが得意なエンジニアが多く在籍していて、リソースの少ない事を想定しています。iOS/Androidエンジニアがいて、リソースのある⽅々はそれぞれネイティブ⾔語で開発をするのが⼀番です。FRONTENDCONFERENCEFUKUOKA2018
CASE1ネイティブ機能はほぼ使わず、パフォーマンスも求めない。+αとしてホーム画⾯にインストールさせたり、Push通知機能がほしい。情報配信アプリ、クーポンアプリ、プロトタイプで使うなどFRONTENDCONFERENCEFUKUOKA2018
PWA/HTML5アプリFRONTENDCONFERENCEFUKUOKA2018インストールPush通知対応プラットフォームPWA◯△(iOSSafari未対応)Desktop,Web,iOS,Android(制限多め)HTML5アプリ◯◯Web,iOS,Android(制限あり)
CASE2ネイティブ機能を使いたい、パフォーマンスは多少必要。ネイティブアプリをメインとするサービスを展開しようとしているがエンジニアリソースが⾜りないスタートアップなどFRONTENDCONFERENCEFUKUOKA2018
ハイブリッドvsネイティブFRONTENDCONFERENCEFUKUOKA2018パフォーマンスネイティブ機能開発効率ハイブリッド△△(ライブラリがあれば)1ソース、2アプリネイティブ◯◯各プラットフォーム毎に開発
プロダクトがある程度成⻑して、リソースにも余裕がでてきた段階でネイティブへの⽅向転換もアリFRONTENDCONFERENCEFUKUOKA2018
まとめクロスプラットフォームアプリを作るにも様々な技術選択肢がある開発は簡単に始められる環境にあるそれなりに弱点はあるが、システム要件によってはフィットするWebフロントエンドエンジニアが普段使っている技術で開発できる「リソースが⾜りないけど早くプロダクトをローンチしたい」⼈向けCpacitorに期待!!FRONTENDCONFERENCEFUKUOKA2018
ありがとうございました!FRONTENDCONFERENCEFUKUOKA2018