先日のRedditのAMAでの言及されていたようにover-the-air(OTA)はReact Nativeを選ぶ上で重要な機能です。これを簡単に解説しようと思います(私はまだ使ってないので記載に間違いがあるかもしれません)
Over-The-Airとは
"Over The Air"アップデートとは、Apple等にバイナリを送らずにアプリのコードをアップデートすることです。Appleのレビューが必要なくなるので、レビュー待ちすることなく開発サイクルを短くし、頻繁にアップデートすることができます。利点として、例えば、ボタンなどのデザイン、テキストの変更、bug fixなどをすぐに変更することができます。
##どうしてOTAが可能なのか?
React Nativeの動きとして、Javascript bundleをロードして、そのJavascriptでネイティブライブラリを操作してアプリを動かします。このJS bundleは開発時にはローカルからダウンロードして使うし、そのバンドルをインターネット経由で配布することも可能です。もちろん、アプリ内に入れておいてそこからロードすることも可能です。したがって、どのバンドルを使うかを明示しておけば、必要ならばインターネットから新しいバンドルをダウンロードしてきて使うことができる、というわけです。
Apple的には大丈夫なの?
レビューを通さなくなるので、悪意のあるアプリを生む可能性がなくなくはありません。これについて、React NativeのAMAで、FacebookのNick氏が下記のように述べています。
Actually that's not quite correct. Apple has stated that they are OK with developers deploying OTA (over-the-air) bug fixes and minor updates to apps in the store without resubmitting, provided that:
*) The updates don't significantly change the nature of what was originally submitted for review
*) The updated code is executed using the Apple-supplied JavaScriptCore VM
...
As for whether this would theoretically allow developers to deploy malicious updates? Yes, absolutely it would, and if developers choose to do that, Apple will no doubt take those apps of the store and apply whatever sanctions they deem appropriate. -Nick
意訳すると、"bugfixや機能を変えなような変更ならばOTAをすることをAppleは認めている。しかし、悪意のあるアプリができる可能性は理論的にある"
やはりあのAppleですし、方針を変えることは考えられます。現時点では、React Nativeの個々の開発者が節度を持って、OTAを実装する必要があると思っています。OTAはアプリを開発する上で便利な機能なので、他の開発者に迷惑をかけないためにもAppleのガイドラインに従って開発しましょう。
どうやってOTAをやるか?
FacebookではOTAの機能を持っています。実際、広告アプリやメッセンジャーはReact Nativeで書かれているので、OTAでアップデートしてるのだと思います。React Nativeのオープンソースの中にはOTAの機能は含まれていませんが、私が知っている限り二つのサービスを利用することでOTAが利用可能になります。
Apphub.io
MIT出身のMatthew Arbesfeldが立ち上げたサービス。ここにアントレプレナーの記事があります。価格表を見ればわかりますがフリーから使えます。
Codepush
あのMicrosoftがReact Nativeをサポートするとは結構衝撃的でした。まだベータなのでフリーで使えます。最近のMicrosoftは攻めてますね。
Summary
私はまだテストできていないOTAですが、今すぐにでも使ってみたいです。機会があれば、使った後の記事を書きたいと思います。