一休.com Developers Blog

一休のエンジニア、デザイナー、ディレクターが情報を発信していきます

iOSとAndroidの段階的リリース機能を比較する

この記事は一休.comアドベントカレンダー2017の25日目です。

一休レストランiOSアプリを開発しているid:ninjinkunです。

iOSでは今年の夏からiTunesConnectにて段階的リリース(Phased Releases)が導入されています。段階的リリースとは、アプリの新バージョンを提供する際に一部のユーザーから順にアップデートを適用していくリリース方法です。不具合があった際に全ユーザーに影響が及ぶことを防ぐことができ、リスクを低減することができます。

この機能にの詳細については、 iOSの段階的リリースについての注意点 - inFablic | Fablic, inc. Developer's Blog. が詳しく、本エントリは追試 + 以前に使用した経験があるAndroidの段階的リリース(Staged Rollout)との比較になります。

結論を先に書くと、この機能は段階的自動アップデートと呼ぶ方が適切だと思いました。そして使いどころが難しかったので、今後はあまり使わないでしょう。当初はAndroidと同じ機能を期待していたのですが、だいぶ違うものでした。

この情報は2017年12月時点のものなので、来年には状況が変わっている可能性がある点にご留意ください。

日数と公開割合が固定 📅

この機能を使う際には、iTunesConnectから段階的リリースを選択します。

f:id:ninjinkun:20171225130423p:plain

まず気になるのが、段階的リリースの日数が固定されている点です。7日間に渡って1日ずつ固定の割合で公開範囲が広がります。Androidの場合は公開の段階を引き上げる日と、公開する割合を自分たちで決めることができます(ただし手動)。

手動アップデートと新規ユーザーは全員新バージョン 🆕

もう一つ注目したいのが、段階的リリースの最中であっても、ユーザーが手動でAppStoreから新バージョンをダウンロードできるという点です。さらに、新規ユーザーは全員に新しいバージョンがインストールされます

Androidの場合は、公開範囲に含まれなかったユーザーは新バージョンに手動でアップデートすることができません。また、ここはきちんと検証できていないのですが、新規ユーザーについても新バージョンが適用される比率は同じであると思われます。

制御されているのは自動アップデートのみ 🆙

iOSの段階的リリースとAndroidの段階的リリースはどうやら根本的に実装方法が異なるようです。具体的には、iOSは新バージョンの自動アップデートを制御しているだけであり、自動アップデートではない手動アップデートと新規ユーザーの場合には新バージョンが適用されます。そしてどうやら、AppStore上に置かれるバイナリは新バージョンのみのようです。

他方Androidは新バージョンのバイナリを適用するユーザーを制御しており、自動/手動アップデート、新規/既存にかかわらず、公開範囲に含まれたユーザーしか新バージョンをインストールできません。そしてGoogle Play Store上には旧バージョンと新バージョンの両方のバイナリが配置されます。

ロールバック不可 🙅

この違いから、iOSの段階的リリースでは新バージョンに問題が発生しても、ストアが旧バージョンを保持していないためロールバックができません。できるのは自動アップデートの適用範囲を固定の状態で止めることだけです。その間にも新規ユーザーは問題がある新バージョンをダウンロードし続けることになります😓

修正リリースは再審査 👨‍⚖️

修正したバージョンをリリースする際は再度AppStoreの審査があります。このため、一般的に段階的リリースの目的の一つであると思われる、不具合のリスクを抑えながら頻繁にリリースを行ってスピード感を出す目的には使えません。

また、修正したバージョンを提出する際に段階的リリースを選択すると、また1%からやり直しです。今回の使用では、前回の段階的リリース当選ユーザーに新バージョンが配布されているかは確認できませんでしたが、おそらく実装されていないのではないかと睨んでいます。

Androidはこの部分でも先行しており、段階的リリースの対象ユーザーのみに修正バージョンを配布することができます。

一休レストランでの利用事例

一休レストランでは、予約情報を入力する画面のリニューアルを行う際に、リスク低減の目的で段階的リリースを使用してみました。そして危惧していたとおり、リリース後に一部のレアなケースで予約ができないという不具合が見つかりました(事前に可能な限り確認はしていたので、発見できなかったのは仕方なかったと考えています。損害も軽微でした)。

ここで段階的リリースやってて良かった…となると良いのですが、実際は不具合が新規ユーザーのみに起こるものだったため、段階的リリースは全く意味が無かったという結果になりました 😭

おわりに

以上、Androidとの比較を交えながらiOSの段階的リリースについて解説しました。

自分の意見としては、

  • 新規ユーザーには新バージョンが渡ってしまう
  • ロールバックができない
  • 修正リリースがやりづらい

という点から、積極的に使うことはないと思います。今後のアップデートに期待しています。

最後にiOSとAndroidの比較について表にまとめておきます。

  iOS Android
呼称 Phased Releases Staged Rollout
公開日程 7日間で固定 手動で随時変更
公開範囲 1%, 2%, 5%, 10%, 20%, 50%固定 0.5%, 1%, 5%, 10%, 20%, 50% から選択任意
段階的リリース中の全公開 できる できる
段階的リリースのサスペンド できる(ただし手動アップデートは可能 & 新規ユーザーには新バージョンが出続ける) できる
制御できるユーザー 自動アップデートユーザー 全ユーザー
ロールバック できない できる(ただし新バージョンをインストールしてしまったユーザーは戻せない。審査がないので上げ直しで対応)
対象ユーザーへの修正版配布 不明(おそらくできない) できる
ストアに置かれるバイナリ 最新版のみ 新旧複数バージョン

それでは、今年も一年おつかれさまでした。新年会のご予約に、一休.comレストランをぜひご利用ください。

レストランを簡単予約!一休.comレストラン

レストランを簡単予約!一休.comレストラン

  • IKYU Corporation
  • フード/ドリンク
  • 無料

2018/1/11 追記

Androidの段階的リリースの公開範囲は、現在は任意の%で指定できるようになっているとのことです。ご指摘感謝。