GooglePlayストアのOS対応とAPIレベル対応って何が違うの？説明してみた。


こんにちは。Advent Calendarも最終週となってまいりました。
[CYBIRD Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cybird) 19日目担当の@koronekoです。
18日目は@whitemage_yuさんの「[SQLite meets Unity 〜Unityでローカルなデータベースを使おう〜](https://qiita.com/whitemage_yu/private/8f6bfc54c392b458b929)」についてでした。
サクッとSQL勉強するのに良い手段ですよね。

# はじめに
まずは軽く自己紹介をさせてください。
私はエンジニア歴十数年以上、CYBIRDでは技術部に所属し複数のタイトルの進行管理を行う業務に携わっています。
最近は手を動かすというよりも、管理業務の方が多い日々です。
他のメンバーは技術的に濃厚な記事が多いので、私はサクッと読める記事にしたいと思っています！

さて、突然ですが以下の会話をご覧ください。

### とある運用タイトルの企画とエンジニアの会話

```
エンジニア:大変です！Android12のβ版試してたら、アプリがクラッシュします！！(汗）
エンジニア:リリース前にOS対応させてください！改修しないとヤバいです！！
企画　　　:うわーまじか！？すぐに対応お願い！
エンジニア:承知しました！！

・・・・・その後

エンジニア:企画さーん！対応終わりました....！！
企画　　　:ありがとう！これで、Android12がリリースされても大丈夫なんだね？
エンジニア:はい！！
企画　　　:じゃあ次の開発スケジュール相談なんだけど....
エンジニア:はい！Android12（APIレベル31）対応ですね！いつしますか！？
企画　　　:！！！？？？？
```

ーいきなり始まった寸劇にお付き合いいただきありがとうございます。
このような会話がよくあることかわかりませんが、少なくとも私はこれまでのエンジニア人生で何度か遭遇しています。
企画の方は、後者の対応がなぜ必要なのか？もう終わったのではないか？理解がしにくい様子でした。

### では、前者と後者で何が違うのでしょうか？
この記事では、前者を「**OS対応**」、後者を「**APIレベル対応**」に分けて説明していきたいと思います。


# この記事の対象者
・AndroidのOS対応とAPIレベル対応って何が違うのかわからない。
・毎年10月に新しいAndroidOSがリリースされることはなんとなくわかる。
・ちょっと気になるから読んでやんよ。

# OS対応とAPIレベル対応はどう違う？
### OS対応
さて、エンジニアはなぜ焦ったのでしょうか？
恐らく、OSの正式リリース直前で緊急度が突発的に高くなったからだと推測いたします。

寸劇のやりとりでは、新しいOSのβ版で運用中のアプリを動かしてみたらクラッシュするというものでした。
新しいOSには、新機能追加や改善などが行われており、そのために廃止された機能や変更された機能もでてきます。運用中のアプリで利用していた機能などに改修が入って突然動かなくなってしまったのが今回のクラッシュの原因ということです。

正式にOSがリリースされると、アプリを利用中のユーザーが新機種に乗り換えた時や、使用中の機種を最新OSにアップデートした際に、クラッシュしてしまうので今まで使えていたアプリが利用できなくなります。
**ユーザーからは、突然アプリが使用できなくなったように感じるでしょう。**
（困りますね）

OS対応では、この動かなくなった箇所を**既に動作しているOSの機能を駆使して動くように改修する対応**を行います。


β版はOSが正式リリースされるまで都度アップデートが行われるため、クラッシュも一時的な現象の可能性もあってOSがリリースされる直前まで対応可否の判断に迷っていたのではないでしょうか。
対応も数時間で解決するものから、数日〜数ヶ月かかるものまでありますのでOSリリース1ヶ月前には判断し着手していたいですね。


### APIレベル対応
緊急度はOS対応より高くありません。寸劇のエンジニアにも余裕が見られますw
ただ、企画の方は意味がわからないという印象です。

それは、OS対応とAPIレベル対応は同じものではないのか？という印象を受けたからではないでしょうか。
APIレベルの対応は、**新しいOSで使用できるようになった機能や改修された機能に合わせて、アプリを使えるようにする対応**です。
OSがリリースされて約1年後位に、Googleから「アプリのアップデートするなら対応必須ですよ！」とアナウンスされます。

:::note info
<b>例：</b>今までアプリのアイコンは四角しか使えなかったが、新しいOSで丸角のアイコンが使えるようになったので、丸形アイコンを準備して使えるようプログラムを対応する。など....
:::

尚、APIレベル対応の緊急度が高くなりにくいのは以下の理由が挙げられます。
・新OSがリリースされてから1年以内に対応していれば問題がない。
・アプリのアップデートを必要としないで運用可能なアプリは、アプリアップデートのタイミングで対応できていれば問題もない。

ただ、新OSリリース後1年経過すると、**GooglePlayストアでは新仕様に沿った対応を行っていないと申請でリジェクトを受ける**ので、いきなり緊急度も高くなります。
作業範囲はOS対応より大きくなることも少なくありませんし、毎年新OSが発表されるとともに対応事項も積み上がっていくので、放置もお勧めできないですね。

# 補足情報

:::note info
<b>▼OSとは</b>
「オペレーティング・システム(Operating System)」の略で、ユーザーが使用しているスマートフォンの機種に入っているアプリを動かすための土台です。

詳細を説明しようとすると、記事1本書けてしまうため詳しく知りたい方は別途調べてみてください。
:::

:::note info
<b>　▼APIレベルとは</b>
APIレベル＝SDKVerのこと。
また、どのOSの仕様に準拠してアプリを開発しているかを示すものです。

GooglePlayストアのアプリ申請に必要なAPIレベルがあります。
必須化の時期は前後しますが、少なくとも最新のAPIレベル-1以上を設定して開発できていれば問題ありません。
2021/12現在の最新APIレベルは31なので、今はAPIレベル30を指定できればOKですね。
TargetSDKとかMinTargetSDKとか色々設定するものもあるのですが、これも記事が1本書けてしまうので、詳しく知りたい方は別途調べてみてください。
:::

## 最後に
毎年やってくるGooglePlayストアのプラットフォーム対応、エンジニアの皆様は、**対応の必要性を非エンジニアへ共有**できていますか？
「息を吐くように行えているよ！」という方も居れば、「上手くできない....」という方もいらっしゃるのではないでしょうか？
私は常に勉強中でございます....！！（w）


少しでも同じ悩みを持つ方の改善の手段になっていたら嬉しいですね。

また、AppStoreもGooglePlayストアと同じような対応（iOS対応とXcode対応）がありますが、これも考え方としては同じと思っています。

明日は、[CYBIRD Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cybird) 20日目は@cy-seiyan「初めての負荷試験とパフォーマンスチューニングで得た苦戦・快感・理解」です。
明日もガッツリ技術記事となりそうな予感。負荷試験の経験があまりないので今から楽しみです！（負荷試験のシナリオ考えるの何気に好きなんですよね....。）