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
怖くないexpo eject - TECH STAND #2
Search
takahi5
December 18, 2020
Programming
0
2.1k
怖くないexpo eject - TECH STAND #2
3年ほどExpoのmanaged workflowで開発していたアプリをejectしてbare workflowへ移行しました。その際の苦労やeject後の運用についてご紹介します。
takahi5
December 18, 2020
Tweet
Share
More Decks by takahi5
See All by takahi5
仮説検証フェーズの開発 with React Native
takahi5
0
130
React Nativeでアニメーションを頑張る- React Native Meetup #11
takahi5
4
1.5k
React Native x Firebaseの メリットとTips5選
takahi5
1
2.1k
React Native パフォーマンス最適化 - 2020-10-15 RN Tech Blog
takahi5
1
98
リリースから1年経った React Nativeアプリの リファクタリング
takahi5
0
710
リモートワーク×副業 が中心のチームづくり
takahi5
0
1.3k
React Native + Expoなアプリを リリースして1年を”5分”で振り返る
takahi5
1
310
Other Decks in Programming
See All in Programming
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
770
Let's Write a Train Tracking Algorithm
twocentstudios
0
220
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
580
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.5k
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
1k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
390
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
1.8k
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
340
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
580
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
150
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
600
Swift Concurrency - 状態監視の罠
objectiveaudio
2
450
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Fireside Chat
paigeccino
40
3.7k
Building an army of robots
kneath
306
46k
A better future with KSS
kneath
239
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
GitHub's CSS Performance
jonrohan
1032
460k
Code Review Best Practice
trishagee
72
19k
Unsuck your backbone
ammeep
671
58k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.2k
Transcript
怖くない expo eject ワダタカヒコ @takahi5
和田崇彦(ワダタカヒコ) @takahi5 • フリーランス (1月にstand.fmジョイン予定!) • React NativeのUdemyコースを作っ たり
今日話すこと 3年運用したアプリをexpo ejectして Bare Workflowへ移行した話
スポーツ観戦を楽しくするアプリ • リアルタイム実況 • 応援 • ギフティング SpoLive
Expoあり?なし? expo init my-project npx react-native init myProject Expoあり Expoなし(Vanilla
RN, 素のRN)
iOS Android React Native Expo Expoあり (managed workflow)
Expoのメリット (Managed workflow) • Expo Clientアプリによるスピーディな動作確認 (QRコードで起動) • OTAアップデート (apple審査なし)
• クラウドビルド (XCode, Android Studio不要, プロビジョニング管理も)
Expoのデメリット (Managed workflow) ネイティブコードを触れない Expoの提供してない機能は、実現できない (例) • 3rd party製のSDKの導入(広告計測など) •
動画, 音声, bluetoothなどネイティブ寄りの実装 • アプリ内課金
要件を満たすならExpoがおすすめ (大半のアプリはExpoで足りそう)
途中でExpoでは満たせない要件が 追加になったら!?
expo eject Expo (Managed Workflow) Expo (Bare Workflow) expo eject
ネイティブコードも触れる!
Expo Bare Workflowとは iOS Android React Native react-native-unimodule expo- camera
expo- update expo- notification etc ...
フォルダ階層 Managed Workflow Bare Workflow
Expoあり?なし?(まとめ) expo init my-project npx react-native init myProject npx create-react-native-app
my-project Expo (Managed Workflow) Expo (Bare Workflow) Vanilla RN (素のRN) eject +unimodule
↓ まともに起動しない expo eject
~元通り動かすためにやったこと~ 1. Bareに対応していないExpoモジュール • Googleログイン ◦ expo-google-app-authでなくexpo-google-sign-in • スプラッシュスクリーン ◦
expo-app-loading でなく expo-splash-screen ...など https://docs.expo.io/bare/unimodules-full-list/
~元通り動かすためにやったこと~ 2. Constantsの読み込み import * as manifest from "app/app.json"; const
apkKey = manifest.expo.extra.apiKey import Constants from 'expo-constants'; const apiKey = Constants.manifest.extra.apiKey Expo 40では不要!
~元通り動かすためにやったこと~ 3. 3rdパーティ製モジュールの改修 Bareに対応していない3rdパーティ製モジュール ↓ forkして修正したものを読み込み 例: expo-analytics
~元通り動かすためにやったこと~ 4. クレデンシャルなどの設定 Expo側で管理していたクレデンシャルやプッシュ通知のキー をダウンロードしてXCodeで設定
Bare Workflowになって 変わったこと 変わらなかったこと
Managed → Bareで変わったこと 変わった 変わらなかった OTA Push 通知 Expo Client
SDK の更新 ビルド 方法 社内の 配布方法
OTA ♂ Bareでも対応している (expo-update) Expo SDK 38〜
Push通知 ♂ Bareでも対応している (expo-notification) Expo SDK 37〜
Expo Clientはだいたい動く Managedで対応している機能は動く 非対応機能は分岐させる必要あり expo start react-native start
Expo Clientを使うために... ManagedもしくはBareでしか使えない機能は分岐させる if (Constants.appOwnership === "expo") { // Expo
Clientで起動した場合 // Managedのみの機能 } else { // Bareのみの機能 } https://docs.expo.io/bare/using-expo-client/
SDKの更新 Expo SDKと別に、RN及びExpoパッケージを更新可能 SpoLiveではExpo SDKリリースのタイミングで更新している expo upgrade
社内配布 Before: QRコードでプルリクごとに配布 After: devのrelease channelを向けたビルドを社内に配布 release-channel=prod release-channel=stage ユーザー 社内
まとめ • Bare Workflowも整備されてきた感 • なるべく最新のExpo SDKにしてからejectするのが⭕