カミナシ エンジニアブログ

株式会社カミナシのエンジニアが色々書くブログです

顧客企業のネットワーク構成によりReact Native + ExpoのOTAアップデートが動作しなかったのを突破した話

カミナシ・エンジニアリングマネージャーの @dmi8a と、 エンジニアの @imu です。

現場DXプラットフォーム「カミナシ」は、WebのアプリケーションとMobileのアプリケーションを1セットで提供する形を採用しているサービスです。

今日はExpoのOTAアップデートを介した、カミナシMobileアプリのリリースでぶつかった壁とそれを突破した方法について共有させてください。

本記事における前提

「カミナシ」は、Mobileのアプリケーション開発に、React Nativeを採用しております。

※ご周知の通り、React Nativeは、iOS/iPadOS系アプリとAndroid系アプリの双方を開発できるクロスプラットフォームアプリ開発フレームワークです。

本記事では、iOS/iPadOS系アプリに絞った話となっております旨ご了承ください。

React Native + ExpoのOTAアップデートについて

OTAとは、Over The Airの略語です。 一般にはソフトウェアやファームウェアの更新をネットワーク越しに行う仕組みを指して『OTAアップデート』のように呼ぶことがありますが、Expo においてはApp StoreやGooglePlayといったストアを経由せずにアプリのバージョンアップデートを配信する仕組みを指します。

通常、ストアでの審査を通すと審査を経る分待ち時間が発生しますが、OTAアップデートなら素早く最新バージョンのアプリを配信できるわけです。

事の経緯

一部のお客様で、ExpoのOTAアップデートしても最新バージョンのアプリが配信されていないという現象が発生しました。

「カミナシ」はtoB向けサービスであり、これまでの経験から、まずはMDM製品を導入してアプリのインストール制限をしているケースではないかという可能性を探りました。

MDMとは、Mobile Device Managementの略語。業務用の端末(タブレットスマホ・PCなど)に各種設定を一斉に実施したり、端末の紛失・盗難時の情報漏えい対策や不正利用の防止などを制御するため機能・サービスの事を指します。

ExpoのOTAアップデートは、基本的にはインターネットが繋がっている状態であれば勝手にmobileアプリをアップデートされるようにしております。また、MDMを導入している顧客であっても、ExpoのOTAアップデートが機能している顧客が多数存在するという事実を思い出し、この方向での動作不備の方向性は薄れました。

問題解決の糸口が見えず、暗礁に乗り上げようとした所、なんとか現状を打開しようと協同していたカスタマーサクセスチームより一筋の光がもたらされます。

「(お客様は)かなり厳し目なアクセス制限をされていそうで
(カミナシ以外何も使えないレベル)、
どういった状態で更新されたアプリバージョンのデータを持ってきているのか知れたら、
なにか前に進むかも!?と思いもしご存知でしたらおしえていただきたいですmmm」

それを受けて、エンジニア側から以下のような回答をしました。

勝手にアップデートされる仕組みは以下のフローです。

* リリース時に最新のMobileをビルド
* Expoにデータをアップロードする
* カミナシアプリが特定のタイミングで更新データがないか確認する
    ・ アプリがアクティブになったとき(アプリ起動時など)
    ・ オンラインのとき
        - QRコード画面
        - スケジュール画面
        - レポート中画面
        - レポート一覧画面
        - レポート結果画面
* 最新のデータをダウンロードする
* レポート中画面以外であれば、画面をリフレッシュする(一瞬真っ白になるやつです)

どこに繋いでいるかは調べたことがないので、Expo側が用意しているURLかな…と思っています。

↑の回答を受けて、カスタマーサクセスチームから鋭い意見がポンポン出てきます。

丁寧にありがとうございます!!!!めちゃめちゃわかりやすいです

>どこに繋いでいるかは調べたことがないので、Expo側が用意しているURLかな…と思っています。

これが結構怪しいかもしれないかなーとか思ってます・・・👀 
適当ですが、ドメインで完全にkaminashi.com的なのしか許可してなかったら、
アップデートされないとかあるのかもしれないですかね。

別のカスタマーサクセスの方から、更なるお話をいただきます。

カミナシのメジャーアップデート、マイナーアップデート時の
通信先になるドメインを教えていただいても宜しいでしょうか?🙏

XXXXXXXXXX様がkaminashi.com以外のドメインを遮断している仮説があり、
メジャーアップデート、マイナーアップデート時に通信するドメインを
ホワイトリストに追加いただき、対応できる環境を整備したいと考えています🙇‍♂️

エンジニア側は、Expoの公式ページを精一杯見るなどしました。 そこで以下の記述が可能性あるのでは?という仮説に行きつきました。

docs.expo.dev

<該当箇所のキャプチャー> gyazo.com

公式ページの上記文面だけだと、正直なところ100%自信を持てません。

非常に心を痛めながらでしたが、以下文面をカスタマーサクセスチームに返しました。

開発側からは正確な情報は出せないです…
(Expoというフレームワークを使っていてそれを使っているだけなので)

最新版を配信したときに以下のURLは確認できるのですが、
これが本当にそうなのかは確認ができないです。

気軽に試せるなら↓を試して欲しいですが、
100%コレ!という話であれば同じ環境を作って検証するしかないと思います。

https://exp.host/[本番リリース用expoアカウント名]/[カミナシのプログラム上サービス名]?release-channel=production Learn more.
https://expo.dev/[本番リリース用expoアカウント名]/[カミナシのプログラム上サービス名]?serviceType=classic&distribution=expo-go&release-channel=production

ネットワーク構成をお客様にヒアリングし、カミナシ側で検証環境として0から再現して、といった事が気軽にできれば、自信を持ってお客様に回答できます。

しかし、顧客企業も年間のシステム投資計画を推進されているのが通常で、セキュリティの観点からカミナシの対応のみに個別対応していただくのは困難です。

そこで、先方の情報システム部のご担当の方に、ExpoのOTAアップデートの仕組みや、先方のネットワークのホワイトリストに対象URLを設定していただいても100%の動作保証ができない背景もご説明し、以下URL情報を試しに先方のホワイトリストに設定していただけないかと交渉させていただきました。

(※当然、[本番リリース用expoアカウント名]はカミナシのみで利用しており、お客様のネットワークに害を及ぼさないURLである旨も説明しております)

https://exp.host/[本番リリース用expoアカウント名]/[カミナシのプログラム上サービス名]?release-channel=production
https://expo.dev/[本番リリース用expoアカウント名]/[カミナシのプログラム上サービス名]?serviceType=classic&distribution=expo-go&release-channel=production

正直100%の自信はありませんでしたが、ExpoのOTAアップデートが動作した旨をお客様から連絡いただいた際は非常に感動しました。

まとめ

カミナシはバリューを非常に大切・重視している会社ですが、今回、バリューの1つである「β版マインド」を体現できて瞬間でもあったと感じております。 gyazo.com

100%自信が持てない中でも、最大限に調査・考え尽くしたなら1歩を踏み出す事を実体験として得られのは非常に尊い経験でした。

最後に、株式会社カミナシでは現在、絶賛エンジニア募集中です!!
もし少しでもご興味があればカジュアル面談からでもよろしくお願いします!!!!

herp.careers