PIYO - Tech & Life -

SGTechにて「CodePushでリリース楽しようぜ」的な話をしてきました

ReactNative sgtech

してきたというか、開催したというか、そんな感じです。

7月14日に「SonicGarden Tech 2@浜松」開催します - PIYO - Tech & Life -
僕の住む浜松にてSonicGarden Techというイベントの第2回を開催します。今回はReact Nativeをテーマとしています。 ↓↓詳細や参加登録はこちらから↓↓ React Nativeを学ぶ! 〜 SonicGarden Tech #2 浜松
地元浜松にてSonicGarden Techを開催しました - PIYO - Tech & Life -
7/14に僕の住む浜松市でSonicGarden Techの第2回を開催し、僕自身も発表して来ました。React NativeがテーマということでCode Pushに関する話をしました。 React NativeのJS

↑の記事にも載せたスライドを再掲します。

見てもらえば概要はわかるかと思いますが、3行でまとめるとこんな感じ。

  • アプリ(っていうかiOS)のリリースがめんどい、ちょっとした変更を出すのが億劫
  • React NativeだとメインのJS部分がネイティブから独立してるから差し替えられる
  • 差し替える仕組みとしてCode Pushってのがあるよ

実際に僕が開発しているアプリではちょっとした不具合修正とかレイアウトの調整みたいなものだけでなく、新しい機能のための1画面を追加するぐらいの勢いでCode Pushを使っています。

とはいえデメリットもないことはないので、今日はデメリットをちょっとだけ紹介します。

リジェクトの可能性がわずかながらある

これは当日話しました。codepushのIssueにあるように、リジェクトされたという声がときどきあるようです。

Code Push is rejected by Apple again? · Issue #1297 · microsoft/react-native-code-push · GitHub
I submitted a new update to my app and it is rejected by the 2.5.2 guideline and section 3.3.2 agreement. In particular, they asked me to remove all the classes related to Code Push ... Does anyone see something like this before? The app...

ですが、多くの人はそんなことないよと言っているようなので、これはあまり大きなデメリットにはならないと思います。

アプリを壊すことがある

Code Pushによるアプリ(JS)の更新が行われるのはアプリ起動後に非同期で行われます。その間にアプリの起動自体は動き続けますので、一旦起動したあと画面の読み直しが入るような動きになります。

(正確にいうと、Code Pushを使っても必ずこのようになるわけではありません。ユーザーに確認を求めたり、次の起動時まで反映しないというやり方も可能です。)

アプリが壊れるタイミングは、アプリが起動時の処理にバグを含むようなバージョンをCode Pushで配信してしまった場合です。

  1. 正常に起動するバージョンでアプリを起動する
  2. 裏でCode Pushによる更新が入る
  3. アプリが読み直される
  4. バグにより起動しない

となって起動しなくなります。

その後Code Pushで修正版を配信したとしても、

  1. アプリを起動する
  2. アプリが死ぬ
  3. 裏でCode Pushによる更新が入る

Code Pushの更新前にアプリが死ぬため永久にバグったままとなります。

こうなってしまうとネイティブビルドで配るほかありませんので、通常のネイティブアプリの更新と同じような手順でアップデートしなければなりません。

気軽に配れるのが仇になる例でした。