hey Product Blog

こだわりを持ったお商売を支えるプラットフォーム「STORES」の開発チームによる技術ブログです。

iOSアプリを慎重に安全にリリースする

こんにちは!

heyで STORES 決済 モバイルチームの Engineering Manager 兼 iOS アプリ・SDKの開発を担当しております。いわい です。

STORES 決済 はキャッシュレス決済を簡単に導入できるこんなサービスです。

coiney.com

さて、今回は そんな STORES 決済 iOSアプリを 石橋を叩いてかぶって慎重に安全にリリースしたお話です。

STORES 決済 iOS版 リニューアル!

STORES 決済 iOSアプリは 2012年 前身となる Coineyリリースから10年間、脈々と開発が続けられてきました。

もちろん開発言語はみんな大好き Objective-Cです。

日々様々な機能追加や改善の開発をしているのですが、さすがにいつまでも Objective-Cで開発を続けるわけにはいかないという事で、私がheyに入社する前の2019年頃から粛々とフルスクラッチでのSwift化プロジェクトが進められていました。

(3年間という長期間に渡る開発の裏側はまた別の機会にお話しできればと思います。)

いざ!リリースへ!だが!石橋を叩こう!

ほぼほぼ開発も完了し、社内でのテストの終わりが見えてき2021年の秋口頃に、リリースの日程を関係各所と調整を開始しました。

STORES 決済 は オーナー (加盟店) の皆さんのお商売にとって重要なサービスです。

もし何かしらの不具合で決済ができない等の致命的な問題があった場合 利用いただいているオーナーの皆さんのお商売が止まってしまうこともありうるので、決してミスは許されません。

ですが、いくら社内で慎重にテストを実施し、不具合をできるだけ潰しているとはいえリリースしてみないと発見できない不具合もあるかもしれません。

そこで、いかに安全に慎重にリリースするかを話し合い

通常のモバイルアプリのリリースではなかなか実施しないであろう、以下の3つの対応で安全・安心を担保する事にしました。

  • 切り戻し用アプリの準備
  • フィールドテスト
  • 段階リリース

Cidre (Swift化Projectの開発コードネーム) のリリース計画の esa
2021年9月に書き始めました。

切り戻し用アプリの準備

バックエンドなどでは、Deploy後に問題が発覚した場合、元のバージョンをDeployしなおして切り戻すこともあるかと思います。

iOS アプリの場合は、元のバージョンに戻すことは AppStoreの仕組み的にできません

そこで、もしリリース後に致命的は問題が発覚した際、即元の状態に戻せるように、切り戻し用のアプリを申請する事にしました。

Objective-C版の元のアプリをバージョンだけ変更したものを準備しておき、Swift版をリリースするや否や 即Appleへ申請。審査も半日で通り Pending Developer Release のstatusになり一安心。

もちろん切り戻し用のアプリはリリースしないに越したことはないのですが (そして、リリースする事なく無事に Developer Rejectしたのですが)、何かあった時の為に用意してあると安心感が違いました

切り戻し用のバージョンがが即審査が通って一安心の報告

フィールドテスト

リリースする2ヶ月ほど前から、先行してSwift版の STORES 決済 アプリを実際にお店で使ってもらうフィールドテストを、QAチーム、CSチームが中心となって以下の手順で進めてもらいました。

主担当 やること
QA チーム サービスの使用状況などを加味して、協力していただきたいオーナーの皆様をリストアップ
CS チーム 一店舗ずつ架電し、フィールドテストの実施協力をお願い
iOS チーム フィールドテスト実施用の STORES 決済 アプリの TestFlight配布準備
QA チーム 新規購入した iPadに TestFlightでアプリをインストール
CS チーム 協力していただくオーナーの皆様へ架電し訪問日を調整
QA チーム お店に訪問し、フィールドテストの説明、iPadの設置

iPadの設置後、利用状況をログ等で確認しながら、CSチームには問題なく利用できているか架電してヒアリングしてもらい、QAチームにも何度かお店に訪問してもらい、実際の利用状況の確認をしてもらいました。

また、アプリをインストールしたiPadをお渡しする事で、もし問題が発生した場合には、今までご利用いただいていたデバイスに戻してもらう事でリスクを回避することにしました。

このフィールドテストの実施により、現場でしか発生しない問題が何件かあることがわかり、本リリース前に修正することができたので実施して本当によかったです。

協力していただいたオーナーの皆様、ありがとうございました

QAチームのみなさんがお店に訪問する度にSlackで報告してくれます!

段階リリース

iOSアプリは 段階リリースを設定することができるので、今回安全を期す為その仕組みを初めて利用してみる事にしました。

iOSの段階リリースは以下の仕様で最新バージョンが公開されて行きます。

  • 自動アップデートの設定にしているユーザにのみ有効
  • 自動アップデートの設定しているユーザも手動のアップデートは可能
  • 途中で一時停止、全公開の設定可能
  • 以下の割合で一週間かけて自動アップデートの割合が変更される
Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 Day 7
1% 2% 5% 10% 20% 50% 100%

今回はより安全に週末に一時停止をし、週明けに再開して徐々に新しいバージョンを反映していく作戦としました。

実際に段階リリースを実行した結果、以下のようになりました。

※下段が実際のアプデ率
※アプデ率はDAUにおける新アプリの使用率をログから算出

Day3までは 自動アップデートの公開割合より、実際のバージョンアップ率が高いという結果になりました。

これは、

  • 新規インストールは最新バージョンがインストールされる
  • 手動でアップデートするアクティブなオーナーさんも一定数いる

という事による結果かと考察しています。

初めて実施してみた段階リリースで 事故も無く徐々に新しいバージョンを安全に反映していく事ができました

石叩リリースを実践してみて

モバイルチームだけでなく、バックエンドチーム、PMチーム、CSチーム、QAチームなど

さまざまなチームの協力のもと、無事に大きな問題も無く 3年間に渡るSwift化 Projectを完遂する事ができました

プロフェッショナルなチームの皆さんの協力があったからこそ、ここまでのリリースができたと思っています。

関係各所の皆様、本当にありがとうございました!そしてお疲れ様でした!

これから

そんなこんなで STORES 決済 iOSは 無事にSwift化した事で、今後の開発スピードや品質が向上することは請け合いです

今後のSTORES 決済 に乞うご期待です!

最後に

hey では引き続き一緒に働いてくれるエンジニアを積極採用中です

少しでもご興味がありましたら、↓ こちらをチェックしてみてください!それでは!

hello.hey.jp