廃止APIの置き換えが複数OSバージョンサポートで膨らむ理由──段階的対応の設計パターン
現場で頻繁に起こる「後付け対応」の泥沼
モバイルアプリの開発では、OSバージョンによって利用可能なAPIが異なります。古いバージョンのサポートを続けている限り、新しいOS側で廃止されたAPIを使い続けるか、条件分岐で複数の実装を持つかのいずれかを選ぶ必要があります。
この判断を開発初期に明確にしていないと、運用フェーズで「このAPIはいつまで使えるのか」「新しいOSではどう対応するのか」という問い合わせが頻繁に発生し、その都度アドホックな修正が積み重なっていきます。特に複数のOSバージョンをサポートしているアプリほど、この負担が指数関数的に増えていくのです。
なぜ「廃止予告」の段階で対応が後回しになるのか
OSのメジャーアップデートが発表されると、新機能の追加やパフォーマンス改善に目が向きがちです。廃止予告されたAPIについては「まだ使えるから」と判断が先延ばしになり、実際に廃止されるまでは優先度が低いままになることが多いです。
しかし、ここが落とし穴です。廃止されたAPIを使い続けると以下の問題が連鎖します。
- 新しいOS版のアプリがリジェクトされる:アプリストアの審査で廃止API使用を理由に却下される
- ユーザーの更新がブロックされる:古いOSユーザーは新機能が得られず、新しいOSユーザーは更新できない
- 保守コストが二重化する:廃止API版と新API版の両方の実装を並行して保守しなければならない
- テスト負荷が増加する:複数の条件分岐を全パターン検証する必要が生じる
複数バージョン対応時の実装パターン
実務では、廃止APIの置き換えを段階的に進める設計が有効です。以下のような構造を検討してください。
1. APIラッパー層の導入
廃止APIを直接呼び出すのではなく、中間層を挟むことで、後の置き換えを容易にします。
// 悪い例:廃止APIを直接呼び出し
func fetchUserLocation() {
let location = CLLocationManager.startUpdatingLocation()
// 複数の場所で同じ廃止APIが散在
}
// 良い例:ラッパー層を経由
class LocationService {
func getCurrentLocation(completion: @escaping (CLLocationCoordinate2D?) -> Void) {
if #available(iOS 14.0, *) {
// 新しいAPIを使用
locationManager.requestLocation()
} else {
// 古いAPIで互換性を保つ
locationManager.startUpdatingLocation()
}
}
}
この設計により、廃止APIの置き換え時に修正箇所が集約され、複数箇所での変更リスクが減ります。
2. バージョン対応マトリクスの明文化
どのOSバージョンでどのAPIを使うかを、事前に明確にしておくことが重要です。
機能: ユーザー位置情報取得
- iOS 14以上 → CLLocationManager.requestLocation()
- iOS 13以下 → CLLocationManager.startUpdatingLocation()
- サポート終了予定: iOS 13 (次のメジャー更新時)
機能: バックグラウンド処理
- iOS 13以上 → BackgroundTasks framework
- iOS 12以下 → UIApplication.shared.beginBackgroundTask()
- サポート終了予定: iOS 12 (2年以内)
この表を持つことで、開発チーム全体が統一した判断基準を持つことができます。
3. 段階的な廃止スケジュール
廃止APIへの対応を「いつまでに終わらせるか」を事前に決めておくことで、運用負荷を予測可能にします。
| フェーズ | 時期 | 対応内容 |
|---|---|---|
| 警告フェーズ | OS廃止予告から6ヶ月 | 新API対応を開発、古いAPI版との並行テスト開始 |
| 並行フェーズ | 廃止決定から3ヶ月 | 新API版をリリース、古いOS対応ユーザーに通知 |
| 移行フェーズ | 廃止決定から6ヶ月 | 古いAPI版のコード削除、テスト簡素化 |
| サポート終了 | 古いOS版のサポート終了と同時 | 当該バージョン対応コード完全削除 |
運用フェーズで陥りやすい落とし穴
「古いOSユーザーが少ないから放置」の判断
使用ユーザーが1%未満だからといって放置すると、その1%から継続的にバグ報告が来ます。特に法人利用や特定地域での需要が高い場合、統計的には少なくても実務的には無視できません。
テスト環境の不備
実機またはシミュレータで複数バージョンを同時にテストしていないと、廃止API対応時に予期しない不具合が本番で発生します。CI/CDパイプラインに複数OS版のテストを組み込むことが現実的です。
ドキュメントの不更新
廃止API対応の判断基準がドキュメント化されていないと、後から参画した開発者が古い実装パターンを踏襲してしまいます。
小規模チームでの現実的な対応
予算や人員が限られている場合は、以下の優先順位で進めることをお勧めします。
- 最初の1ヶ月:廃止予告されたAPIをコード内で検索し、使用箇所を一覧化する
- 次の2ヶ月:最も影響が大きい機能から順に、ラッパー層の導入と新API対応を進める
- 並行して:サポート終了予定のOSバージョンを社内で決定し、チーム全体で共有する
完璧を目指さず、「今のサポート範囲では何が必須か」を判断することが、持続可能な保守につながります。
まとめ
廃止APIの置き換えは、個別の技術課題ではなく、OSバージョンサポート戦略の一部として設計する必要があります。開発初期に「どのバージョンまでサポートするか」「いつまでにAPI置き換えを完了させるか」を決めておくことで、運用フェーズでの急な対応や二重保守を避けることができます。
既存のアプリであれば、まずは現在の廃止API使用状況を把握し、段階的な置き換え計画を立てることから始めるのが現実的です。