STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

STORES ブランドアプリ のサポートOSを引き上げる取り組み

こんにちは、私は STORES ブランドアプリでiOSエンジニアをしている @marcy731 です。
STORES ブランドアプリ のiOSアプリではこの度、サポートする最低OSバージョンを iOS 15.0 から iOS 16.0 に引き上げることになりました。
本記事ではサポートするOSを変更するにあたって、どのような社内でのやり取りがあったのかを紹介します。

サポートOS を変更するメリット、デメリット

iOS は毎年新しいメジャーアップデートが秋頃に行われます。
そもそも iOSアプリ開発においてサポートOSを変更するメリットやデメリットは何でしょうか?
サポートOSを変更しても何もメリットがないのであれば、そのままでも良いはずです。
にも関わらず STORES ブランドアプリ に限らず世の中の多くのアプリでは定期的にサポートOSの見直しが入ります。
まずはサポートOSを変更する主要なメリットやデメリットについてみていきましょう。

  • サポートOSを変更するメリット

    1. 新しいAPIが利用できる
    2. QA(テスト、動作確認など)にかかるコストの削減
  • サポートOSを変更するデメリット

    1. 打ち切るOSの利用ユーザーがそもそも利用ができなくなる(もしくはアップデートできなくなる)

みていただければわかる通り、メリットは主に開発者側の視点になります。
一方でデメリットは主にユーザー側になります。
もう少し詳しくみていきましょう。

メリット① 新しいAPIが利用できる

iOSでは毎年新しいAPIが発表され、年々開発効率が向上したり、新しい機能を追加することができます。
しかし新しいAPIは最新OSからしか利用できないものが多く、古いOSをサポートしている限り新しいAPIが利用できないことが多いです。
もしくは利用したとしても、サポート対象に含まれている古いOSに対応するためにもどちらもメンテナンスしていく必要もあります。
サポートOSを定期的に引き上げていれば、古いOSへの考慮が最低限となり、常にその時にベストな選択をすることが可能になっていきます。

Swift Chartsのドキュメント。Swift Charts は iOS16.0+ から利用できることがわかる。

メリット② QA(テスト、動作確認など)にかかるコストの削減

アプリ開発において、品質保証(QA)は非常に重要なプロセスです。
多様なデバイスとOSバージョンでの動作確認が必要となりますが、サポートするOSバージョンを限定することでテストの範囲が絞られ、QAにかかるコストを大幅に削減することが可能です。
これにより、古いOSバージョンの特有の問題への対処や複数のバージョンに対するテスト負担が軽減され、開発サイクルが短縮されます。
結果として、QAプロセス全体の効率化が図られ、長期的にコスト削減につながります。

デメリット① 打ち切るOSの利用ユーザーがそもそも利用ができなくなる(もしくはアップデートできなくなる)

iOSアプリ開発におけるOSバージョンのアップデートは多くの利点がありますが、同時に避けられないデメリットも存在します。
特に、古いOSバージョンを使っているユーザーが、アプリのアップデート後に利用できなくなる問題は大きな影響をもたらします。
中にはデバイスの制限で最新のOSにアップデートができないユーザーもおり、これによりサポートOSの引き上げが一部のユーザーを排除してしまうことになります。
また間接的に利用可能ユーザーが減るため、状況によってはアプリ経由の売上に直結することにもつながります。

しかし、すべてのOSバージョンを無期限にサポートすることは現実的ではなく、またそれは開発リソースの過度な分散を招き、新しい技術の導入を妨げる可能性があります。
そのため、開発者は新旧のユーザーニーズと開発の持続可能性のバランスを取る必要があります。

サポートOSを引き上げるまでの流れ

メリット、デメリットを見た上で、 STORES ブランドアプリ ではどのようにサポートOSの引き上げを行ったのかを見ていきます。 大きな流れは以下の6ステップになります。

  1. サポートOSを引き上げる際の社内基準の設定
  2. プロダクトの利用規約にサポートOSに関する文言を追加
  3. アクティブユーザーシェア率の監視
  4. 関係各所への連絡
  5. サポートOSを引き上げる開発、動作確認
  6. リリース

それぞれ見ていきましょう。

1. サポートOSを引き上げる際の社内基準の設定

サポートOSを引き上げるといっても、その基準がないとビジネス側やプロダクトを利用してくださっている事業者さまへ説明ができません。
また仮にビジネス側やプロダクトを利用してくださっている事業者さまに承諾していただいたとしても、毎年この交渉が続いてしまいます。
その都度、関係各所との調整や合意形成に多大な時間と労力が費やされます。
これは単純にコミュニケーションコストの増幅だけではなく、開発サイクルの遅延をも招きます。
そこで STORES ブランドアプリ では社内基準を設け、社内外に明示的にルールを定めることでスムーズなサポートOSの引き上げを行っています。

  • サポートOSを引き上げる際の社内基準
    • サポート対象の範囲:
      • 基本的には最新のOSバージョンとその一つ前のバージョンをサポートします。これにより、最新の技術進化に対応しつつ、比較的新しいデバイスを使用している大多数のユーザーをカバーできます。
    • 新OSの導入時期の考慮:
      • 新しいOSバージョンがリリースされたばかりの時は、すぐにサポート対象を変更しないことが重要です。初期のバグや互換性の問題が解決されるまでの期間、従来のバージョンを維持します。
    • ユーザーベースの分析:
      • 対象バージョンのアクティブユーザーの全ユーザーに占める割合が過去30日間で3%を下回った場合、サポートを終了します。これにより、影響を受けるユーザー数が少ない中で、リソースをより効果的に配分することが可能となります。

現在の STORES ブランドアプリ における社内基準は上記になります。

2. プロダクトの利用規約にサポートOSに関する文言を追加

STORES ブランドアプリ では、プロダクトの利用規約にサポートOSに関する文言を記述しています。

第30条(OSサポート等)

3.当社は、当社が定める一定の基準を満たさなくなったOSやウェブブラウザについては、本サービスのサポートの対象から除外することができるものとします。かかる場合においては、当社はその旨を事業者さまに通知します。

利用規約 | 無料ではじめられるネットショップなら、STORES ネットショップ

実は以前はこのような規約はありませんでした。
STORES ブランドアプリ は事業者さまのオリジナルのアプリを提供するプロダクトになりますが、その特性上、プロダクトを提供しているすべての事業者さまからサポートOSを引き上げる承諾を得なくてはいけませんでした。
そこで利用規約に含めることで、STORES 側の判断によりいつでもサポートOSの変更が可能になりました。
もちろん、事業者さまへの事前告知は行なっております。

3. アクティブユーザーシェア率の監視

今回を例に出すと、3月ごろから定期的にサポートを終了する予定のOSバージョンのアクティブユーザーが全ユーザーに占める割合を監視していました。
3月、4月となかなか基準の3%を下回らなかったのですが、5月のGWが明けてすぐにシェア率が約2.8%となり、基準を超えました。
ちなみに昨年 iOS14.0+ のサポートを引き上げた時期は4月でした。
AppleがiOS17を2023年9月19日に正式リリースしたことを考えると、例年約半年ほどたった4-5月あたりが一つの指標になりそうですね。

なお、3% という数字は社内で決めた数字にはなりますが、経験上どんなに期間を空けてもアップデートを行わないユーザーは一定数おり、2%を下回ることはなかなかありません。
また、このシェア率の測定には Firebase Analytics を利用しています。

4. 関係各所への連絡

社内基準を満たしたのちは、実際の開発に入る前に、関係各所への事前連絡を行います。
特にCSの方との連携は密に行い、いつ実際にアプリが更新されるのか、事業者さまへの事前告知はいつ行うのか、など一つ一つ決めていきました。

幸い事業者様からもとくにお問合せはなく、スムーズな連携ができました。

5. サポートOSを引き上げる開発、動作確認

関係各所への連絡ができた後は、いよいよ iOS15 のサポートを切るための開発を行います。
ここでは具体的な変更内容は言及しませんが、大きく以下の流れで開発、動作確認を行なっています。

  1. Project のDeplayment Target / Mininum Deployments / SwiftPackageのplatforms をそれぞれ iOS16.0に更新する
  2. iOS 16+ でDeprecatedとなるAPIを削除もしくは代替APIに置き換える
  3. ここまででの変更と取り込み、リグレッションテストを行う
  4. iOS 16+ で利用できるようになったAPIを利用する

1. Project のDeplayment Target / Mininum Deployments / SwiftPackageのplatforms をそれぞれ iOS16.0に更新する`

変更点は主に以下の3箇所になります。

import PackageDescription

let package = Package(
    name: "Appmaker",
    defaultLocalization: "ja",
    platforms: [
        .iOS(.v16), // ここを16に更新
        .macOS(.v14),
    ],

2. iOS 16+ でDeprecatedとなるAPIを削除もしくは代替APIに置き換える

詳細は省きますが、 STORES ブランドアプリ に行なった変更のうち以下2点をご紹介いたします。

  1. SwiftUI.ScrollViewにてrefreshableが動作するようになったため、refresh 処理をこちらに置き換えた
  2. horizontal(layoutSize:subitem:count:) がDeprecated になったため、horizontal(layoutSize:repeatingSubitem:count:) に置き換えた

3. ここまでの変更を取り込み、リグレッションテストを行う

ここまでの変更が既存機能に影響を及ぼさないか、一通り動作確認を行います。
動作確認を経て問題がなければ、サポートOSを引き上げる対応は基本的には終わりになります。

4. iOS 16+ で利用できるようになったAPIを利用する

こちらについては、このタイミングで行う必要はないため、徐々にリファクタをしていこうと思います。

6. リリース

最後にサポートする最低OSバージョンを iOS 16.0 に変更したアプリをリリースし、関係各所に連絡を行って無事完了です。

まとめ

STORES ブランドアプリ のiOSアプリではこの度、サポートする最低OSバージョンを iOS 15.0 から iOS 16.0 に引き上げることになりました。
社内での基準を整備したことやプロダクトの利用規約にサポートOSについての内容を追加したことから、エンジニアとしてはとてもスムーズにサポートOSの見直しができました。

iOS 15.0+ を利用している一部のユーザー様、および STORES ブランドアプリ をご利用いただいている事業者さまにとってはご迷惑をおかけするところもありますが、それ以上に良いプロダクトを作っていきますので今後ともよろしくお願いします。

最後に、STORES ではともにプロダクトを作っていける方を探しております。
少しでも興味があるという方がいれば、ぜひ下記のページからご応募お待ちしております。
@marcy731 に直接連絡いただいても大丈夫です。

jobs.st.inc