この記事は一休.comアドベントカレンダー2017の25日目です。
一休レストランiOSアプリを開発しているid:ninjinkunです。
iOSでは今年の夏からiTunesConnectにて段階的リリース(Phased Releases)が導入されています。段階的リリースとは、アプリの新バージョンを提供する際に一部のユーザーから順にアップデートを適用していくリリース方法です。不具合があった際に全ユーザーに影響が及ぶことを防ぐことができ、リスクを低減することができます。
この機能にの詳細については、 iOSの段階的リリースについての注意点 - inFablic | Fablic, inc. Developer's Blog. が詳しく、本エントリは追試 + 以前に使用した経験があるAndroidの段階的リリース(Staged Rollout)との比較になります。
結論を先に書くと、この機能は段階的自動アップデートと呼ぶ方が適切だと思いました。そして使いどころが難しかったので、今後はあまり使わないでしょう。当初はAndroidと同じ機能を期待していたのですが、だいぶ違うものでした。
この情報は2017年12月時点のものなので、来年には状況が変わっている可能性がある点にご留意ください。
日数と公開割合が固定 📅
この機能を使う際には、iTunesConnectから段階的リリースを選択します。
まず気になるのが、段階的リリースの日数が固定されている点です。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%固定 | |
段階的リリース中の全公開 | できる | できる |
段階的リリースのサスペンド | できる(ただし手動アップデートは可能 & 新規ユーザーには新バージョンが出続ける) | できる |
制御できるユーザー | 自動アップデートユーザー | 全ユーザー |
ロールバック | できない | できる(ただし新バージョンをインストールしてしまったユーザーは戻せない。審査がないので上げ直しで対応) |
対象ユーザーへの修正版配布 | 不明(おそらくできない) | できる |
ストアに置かれるバイナリ | 最新版のみ | 新旧複数バージョン |
それでは、今年も一年おつかれさまでした。新年会のご予約に、一休.comレストランをぜひご利用ください。
2018/1/11 追記
Androidの段階的リリースの公開範囲は、現在は任意の%で指定できるようになっているとのことです。ご指摘感謝。