メモメモメモ

ほんとうにめも

ReactNativeからExpoに移行した

ReactNativeからExpoに移行したアプリ

1D歯科国試 | 歯科医師国家試験アプリ https://apps.apple.com/us/app/1d%E6%AD%AF%E7%A7%91%E5%9B%BD%E8%A9%A6-%E6%AD%AF%E7%A7%91%E5%8C%BB%E5%B8%AB%E5%9B%BD%E5%AE%B6%E8%A9%A6%E9%A8%93%E3%82%A2%E3%83%97%E3%83%AA/id1130787144?l=ja&ls=1&at=10l8JW&ct=hatenablogapps.apple.com

f:id:yooska14:20190903123207p:plain
スクリーンショット

歯学部生向けの国家試験対策アプリです。 ◯×問題で気軽に試験勉強ができるよって感じです。

なぜExpoにした!?

  1. 実装してる機能(する予定の機能)がExpoでできる範囲で充分実装可能
  2. 運用してる他のアプリとCI, デプロイフローを統一したかった

主に2の理由が大きいです。

他にどんなアプリを運用してるの?

https://apps.apple.com/us/developer/1d-inc/id566809181?at=10l8JW&ct=hatenablogapps.apple.comf:id:yooska14:20190903143203p:plain

リンクにある5つのアプリを運用してます。 全てExpo製です。

Expo製アプリでの弊社のCI連携・運用について

主にCircleCIとBitriseを併用していて、それぞれ

  • CircleCI ・Lintチェックを実行 ・Jestを実行 ・Typescriptのタイプチェック(tscコマンド) ・Storybookを起動してコンポーネントを可視化 ・Reg-suitでUIの差分チェック

  • Bitrise ・デプロイ周り全部

のようにしています。

【この記事の本筋】Expo化の動機について

上記5つのアプリは自分(役員) + 副業メンバーの少リソースで運用していて、出来るだけCIに任せられるところは任せて開発・分析に集中したかったというのが主な動機です。

移行してよかった?

よかったです。そもそもExpoはDX(開発者体験)高いですし、CIやその他設定も統一できるのはめちゃめちゃ捗りました。 今後はmonorepoとかを使ってnpm packageの管理もできるとより良い気がしています。

移行に際して手間取ったところ・手間取らなかったところ

手間取ったところ

やはり申請周りに手間取りました。 本来ExpoではAppStore, PlayStoreとのコミュニケーションを代行してくれる(表現が正しいのか分からないけど、ほぼCLIだけで完結できる)のでその辺は楽なはず。 しかし、一度リリースしてるアプリをバージョン履歴やASO(App Store Optimization)を保持したままExpoに移行するとなると、少し面倒でした。 具体的には以下の2点を抑えれば次から手間取らずにいけそうです。

  • 同一のProvisioning Profileを使う(AppStore) => Provisioning Profileの拡張子は.mobileprovisionです。 => Provisioning Profileはhttps://developer.apple.com/からダウンロードできます。

  • 同一のKeystoreファイルを使う(PlayStore) => Keystoreファイルの拡張子は.keystoreです。 => Keystoreファイルは失くしたら別アプリとしてリリースするしかないみたいです😱(monacaなどのcloudサービスを使ってる場合はダウンロード可能な場合が多い)

手間取らなかったところ

Bitriseの設定は手間取りそうだなーと思ってたけど、WorkflowEditorの内容がymlで書き出されていて、それをコピペすれば設定を完コピできたので非常に捗った。