スマホアプリ開発者のための2019年動向まとめ

# はじめに

2019年は新元号「令和」のスタートやラグビーワールドカップなどなんとなくめでたい年でした。年始まで忙しかったので2020年の1月中旬ですが2019年のスマホアプリ業界をこっそりまとめます。

個人的には2019年はAndroidアプリを中心にネイティブアプリ開発保守をしていました。
スマホアプリ開発に携わっていない人もこの記事を見れば2019年のいろいろが分かるかも。
振り返り用に「ふむふむ」「へー」程度に見ていただければ幸いです。

【前年】
[スマホアプリ開発者のための2018年動向まとめ](https://qiita.com/keidroid/items/88ee170f8bc697d4f7e9)
[Unityでスマホアプリ(特にプラグイン)を開発している人のための2017年対応まとめ](https://qiita.com/keidroid/items/5d942afa4ec69f97bd3d)
[Unityでスマホアプリ(特にプラグイン)を開発している人のための2016年対応まとめ](https://qiita.com/keidroid/items/76ff2c7b38cb86b7b691)

# 通信回線について

約10年に1度の通信回線アップデート、5Gがついにはじまりました。
2019年4月に米Verizonが開始し、9月に米Qualcommが開催した「2019 Future of 5G」では半年以内に30以上の通信事業者が5Gを開始または開始予定としていることが発表されました。

<img width="879" alt="スクリーンショット 2020-01-15 22.01.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19692/67bdc8c5-b979-4a89-3671-bf3ab686a5af.png">


https://www.verizon.com/about/our-company/5g
https://www.qualcomm.com/documents/2019-future-5g-presentation

日本ではdocomo、KDDIが2019年9月にプレサービスを開始し、2020年を目処に商用サービス開始予定です。高速、大容量、低遅延、多接続、低消費電力などがキーワードとしてあげられています。

https://www.nttdocomo.co.jp/corporate/technology/rd/tech/5g/
https://www.softbank.jp/biz/5g/
https://biz.kddi.com/5g/

また、3Gの停波のお知らせを公開し、auは2022年、SoftBankは2024年、docomoは2026年に停波となることが決定されました。これによってガラケーやらくらくホンを使用していたシニア層がスマホに大量流入することが予想されます。

https://www.nttdocomo.co.jp/info/news_release/2019/10/29_00.html
https://news.kddi.com/kddi/corporate/newsrelease/2018/11/16/3428.html
https://www.softbank.jp/mobile/network/3g-end/

# 端末について

Appleからは例年通り9月にiPhone 11, iPhone 11 Pro, iPhone 11 Pro Maxが発売、Googleからは5月にPixel3a, 10月にPixel4が発売されました。
iPhoneもPixelも基本的にはカメラ機能推しで「夜景モード」という言葉は今年浸透した印象です。

2019年は数少ないですがGalaxyやLGから折りたたみ端末(Foldable端末)が発売されました。Microsoftからは「Surface Duo」というAndroid端末が発表され2020年のホリデーシーズンに発売予定です。

5G対応の端末が2019年から発売され2019年12月現在は約30機種に増えました。2020年は対応機種が増え日本からも発売されることが予定されています。

# 2019年のスマホサービスについて

### 決済サービスの増加

個人的に大きいと思ったスマホアプリのニュースは2019年2月のPaypay100億円キャンペーンでした。
各店のPOSも多くの決済方法に対応し、生活が一変しました。
非接触方式に比べるとアプリ立ち上げやバーコード提示など不便な印象でしたが、
増税時のキャッシュバックキャンペーンなども後押しし、バーコード/QRコード決済が増えました。
Paypay、LINE Pay、メルペイ、Origami Pay、Kyash、ファミペイ、Origami Pay、楽天ペイ、セブンペイなどいろんなペイの選択肢が増えました(そして消えたサービスもありました)

### スマホゲームについて

2019年は日本の大手企業のリリースが多い年でした。
任天堂からはマリオカートツアー、ドクターマリオワールド、ポケモンマスターズと2019年で3本のリリースがありました。
また、ドラゴンクエストウォークなどの位置ゲームに関して世界的にリリースが多く、Googleからゲーム事例の記事が投稿されています。

> 魅力あるゲーム体験を実現するGoogle Maps Platformの新機能と最新ゲーム事例
> https://developers-jp.googleblog.com/2019/12/new-features-contextualized-gameplay-and-new-games-built-google-maps.html

また、ゲームのサービス形態が変化した年でした。Appleからは定額制サービスのApple Arcade、GoogleからはクラウドゲームのStadiaが発表されサービス開始しました。

- https://www.apple.com/jp/apple-arcade/
- https://stadia.google.com/

### 子供向けプライバシーの保護の強化

スマホに限らずですが、YouTubeで子供向けプライバシー保護の取り扱いが大きく変更されました。
子供向けであると判断された、あるいはそう申告されたすべてのコンテンツについて、視聴者は無条件で子供と見なされるようになりました。

https://youtube.googleblog.com/2019/09/an-update-on-kids.html
https://youtube.googleblog.com/2020/01/better-protecting-kids-privacy-on-YouTube.html

子供向けプライバシー保護の強化はYouTubeのみでなくGoogle Play Serviceにも実施され、
自分が公開している子供向けアプリもGoogle Play Serviceを実装しているという理由で2019年に突然リジェクトされました。([参考: 2019年以降、GooglePlayの子供向けゲームアプリに○○を実装してはいけない](https://qiita.com/keidroid/items/485f04570bac420c7421))


iOSも例外ではなく9月に「子ども向け」カテゴリガイドラインが更新されました。
2020年3月3日までは対応の猶予期間となっています。

- [2019年09月12日 「子ども向け」カテゴリのAppのアップデート](https://developer.apple.com/jp/news/?id=091202019a)

> すべての新規Appはこのガイドラインに従う必要があります。また、できるだけ早く既存のAppを更新することをお勧めします。既存のAppにこのガイドラインを適合するのにさらに時間が必要な場合を考慮し、コンプライアンスに準拠させるために2020年3月3日までさらに6か月の猶予期間を設けることにしました。


# iOS

### iOS13

> iOS 13をプレビュー
> https://www.apple.com/jp/newsroom/2019/06/apple-previews-ios-13/
> iOS 13 Release Notes
https://developer.apple.com/documentation/ios_ipados_release_notes/ios_13_release_notes

2019年9月19日にiOS13の提供が開始されました。
SwiftUI、ダークモード、SF SymbolsなどUI周りが大きく変更されました。
ただしSwiftUIで開発したアプリはiOS13以降のみの対応となるため、完全移行は数年かかりそうです。
iPad向けのOSがiOSからiPadOSになり、iPad用AppをmacOSへ容易に移植できるProject CatalystもWWDC19で発表されました。

> Submit Your iOS Apps to the App Store
> https://developer.apple.com/news/?id=09102019a&1568158483
> Modernizing Your UI for iOS 13
> https://developer.apple.com/videos/play/wwdc2019/224/

iOSアップデートにより、要件も更新されました。
2020年4月からiOS13および3rd-genのiPad Pro対応必須となり、同時に以下を要件としています。

- LaunchScreenのStoryboard化 
- 複数サイズのサポート
- 分割スクリーンのマルチタスク化

<img width="800" alt="スクリーンショット 2020-01-15 22.19.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19692/00bc9de6-fb17-3c35-bfaa-658aee55c306.png">


参考: 

- [ダークモードに備える](https://developer.apple.com/jp/news/?id=0829019a)
- [Supporting Dark Mode in Your Interface](https://developer.apple.com/documentation/appkit/supporting_dark_mode_in_your_interface/)
- [SF Symbols](https://developer.apple.com/design/human-interface-guidelines/sf-symbols/overview/)

### iOSのその他対応

その他にもPUSH通知、UIWebView受付終了の告知がされています。

- [2019年11月04日 Apple Push Notification Serviceのアップデート](https://developer.apple.com/jp/news/?id=11042019a)

> Apple Push Notification service(APNs)は、2020年11月以降レガシーバイナリプロトコルをサポートしなくなります。

- [2019年12月23日 ウェブビューを使ったAppのアップデート](https://developer.apple.com/jp/news/?id=12232019b)

> App Storeは、2020年4月からUIWebViewを使った新しいAppの受付を終了し、2020年12月からUIWebViewを使ったAppのアップデートの受付を終了します。

# Android 

### Android10

> ようこそ！Android10
> https://developers-jp.googleblog.com/2019/09/android-10.html

2019年9月3日にAndroid10の提供が開始されました。
ジェスチャーナビゲーション対応、5G対応、折りたたみ画面対応、セキュリティ強化などが含まれています。

詳細なこちらへ > [Android 10対応したので個人的まとめ (RSSリーダーアプリ編)](https://qiita.com/keidroid/items/7452a6988011664eb8d9)

### APIレベル28（Android 9）以上が必須に

2018年までの必須APIレベルは26でしたが今年は28になりました。
APIレベル28の変更点として、デフォルトのネットワークセキュリティ構成がhttps通信のみ許可になりました。
http通信を行うにはドメインをホワイトリストに追加するなどの対応が必要になります。

> 2019年のターゲットAPIレベル要件の拡大について
> https://developers-jp.googleblog.com/2019/03/2019-api.html

> AndroidでのTLS採用に関する最新情報
> https://developers-jp.googleblog.com/2020/01/android-tls.html

また、2019年8月以降64ビットが必須要件になりました。
Unity5.6以前を使用したゲームの場合は2021年8月までの延長期間が与えられています。

> アプリを64ビット要件に対応させましょう
> https://developers-jp.googleblog.com/2019/02/get-your-apps-ready-for-64-bit.html

2年連続でAPIレベルが夏から秋にかけてAPIレベルの底上げを行っています。
例年通りだと2020年も行われることが予想されます。
旧サポートライブラリの最終バージョンが28なので、
APIレベル29対応では必然的にAndroidX対応が必要となります。
余裕があるときにAndroidX対応をしていたほうが良さそうです。

### Android関連のドキュメントの拡充

2019年1月にAndroidのCodelabが公開されました。
基礎コースと応用コースが用意され、学習が容易になりました。

https://developer.android.com/courses

AndroidXはドキュメントページで最新バージョンがわかるようになった他、
Feedでのバージョン情報提供もはじまりました。
SlackなどでFeedを登録しておけば最新ライブラリの情報がキャッチ可能になります。

https://developer.android.com/jetpack/androidx/versions
https://developer.android.com/feeds/android-release-notes.xml

### Androidのその他

2018年末のKotlin1.3でコルーチンが正式対応となり、Google Developers Blogでもコルーチン関連の記事が公開されました。
プロジェクトの動的モジュール化やコード圧縮ツールR8も注目のトピックとしてあげられています。

- [Android でコルーチン（パート I）: 背景を理解する](https://developers-jp.googleblog.com/2019/07/coroutines-on-android-part-i-getting-the-background.html)
- [動的機能モジュールからコードにアクセスするパターン](https://developers-jp.googleblog.com/2019/07/patterns-for-accessing-code-from-dynamic-feature-modules.html)
- [Google の新しいコード短縮ツール R8 が Android studio 3.3 beta にて利用可能です](https://developers-jp.googleblog.com/2019/02/r8-new-code-shrinker-from-google-is.html)

また、Project Marbleという以前からのAndroid Studio改善の取り組みが反映された、Android Studio 3.5がリリースされました。
詳細はこちら >[Android Studio3.5の変更点をもっと詳しく知りたい..!](https://qiita.com/keidroid/items/9ee34e7f5d849232ab69)

### 2020年春に登場するKotlin1.4

> Kotlin 1.4の計画および将来的な展望
> https://blog.jetbrains.com/jp/2020/01/16/2731

12月に行われたKotlinConf 2019でKotlin1.4の展望が発表されました。
(ちょうど昨日に日本語版blogが更新されました!)
マルチプラットフォーム化やKotlinのSAM変換についての変更などがあります。

# Flutter

2019年はFlutter関連のニュースも多くありました。
6月にFlutter for Web発表、12月にはFlutter単独で技術イベントFlutter Interactが行われ注目度は今年も上がっています。

> Flutter Interact
> https://developers.google.com/events/flutter-interact

Flutterの追い風(?)でDartもバージョンアップが頻繁に行われ、
2018年末の最新バージョンは2.0でしたが2019年末はDart2.7になり、
コレクション機能や拡張メソッド対応など一年で様変わりしました。
DartPadというDartを気軽に試すことができるツールも登場しました。

> DartPad
> https://dartpad.dev/

Flutterはコンテストも多く開催し、
5月には5KBで作るFlutter Create、11月には時計を作るFlutter Clockを発表しました。
＃ Flutter Clockの参加締切は2020年1月20日までなのでまだ間に合います。

- https://flutter.dev/create
- https://flutter.dev/clock

### React NativeやFlutterのUI構築手法

React NativeやFlutterのUI構築手法はネイティブ開発に影響を与え
2019年に「Jetpack Compose」「SwiftUI」が続けて発表されています。
UIはコードベースでプレビューを確認しながら作るという手法が近くに一般化しそうです。

- https://developer.apple.com/jp/xcode/swiftui/
- https://developer.android.com/jetpack/compose

<img width="725" alt="スクリーンショット 2020-01-17 20.31.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19692/0a3326e5-1919-cba0-c478-7a7816313b18.jpeg">
SwiftUI

<img width="640" alt="スクリーンショット 2020-01-17 20.31.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19692/2f50d5ad-70b2-4f74-8852-6b76fce1f736.png">
Jetpack Compose

# Unity

スマホ関係者はUnite 2019の基礎公演、開発者は開発ロードマップ最新情報のYouTube動画を見るのがおすすめです。
基礎公演40:00ではVR/ARや自動運転、アニメーション活用に関して、
非ゲーム分野でシミュレーターとしてのUnity活用概要があります。

> Unite 2019 基礎公演
> https://youtu.be/zLQ9oY08p84?t=2405

Unity開発ロードマップ最新情報では直近のUnity更新内容が紹介されています。

> Unity開発ロードマップ最新情報
> https://www.youtube.com/watch?v=o9EJu4LRIdY

### DOTS (Data-Oriented Technology Stack)

> DOTS - Unity の新しいマルチスレッド対応の Data-Oriented Technology Stack
> https://unity.com/ja/dots

UnityはUnityを根幹から変える取り組みが行われており、DOTSに置き換わります。

- Entity 1.0 (2020.1〜) 
- DOTS NetCode (2020.1〜)
- DOTS Audio
- DOTS Physics
- DOTS Animation 

エディタUIも再設計されビジュルスクリプティング機能もベータ公開予定。
映像向けパイプラインにはPythonサポートされます。
その他として、Serializeが進化してリファレンスがSerialize可能になりましたうれしい。

### モバイル向けの変更

モバイル向けに以下がロードマップの動画内で発表されています。
Unity as a LibraryはUnityとネイティブアプリの関係性を大きく変化させそうです。

- Project Tiny: Instant Runのような仕組みを提供。
- Unity Distribution Portal: Apple, Google以外のプラットフォームにも複数ゲーム配信ハブシステムも提供。
- Unity as a Library: ネイティブアプリ向けにUnityで作ったアプリをライブラリとして使用できる機能。

# まとめ

2019年はだいたい以下のような感じでした(個人の感想です)

- 2019年のスマホは決済サービスが流行(増税の影響?)
- 2019年のスマホゲームは最大手参入と新サービス形態(Apple Arcade, Stadio)。
- 2019年は子供向けプライバシー強化が大きく行われた
- 2020年はとにかく5Gを中心に変化
- ネイティブのUI開発は旧手法・新手法(SwiftUI, Jetpack Compose)・別手法(Flutter, React Native)から選択する必要あり。
- Unityは新手法のDOTSに改装中

# 告知
2月のDroidKaigi 2020でビジュアルリグレッションテストについて話します。まだ資料できてません。
https://droidkaigi.jp/2020/accepted/


この記事が参考になったら「いいね」を、あとで読む場合は「ストック」を、投げ銭したくなったらPaypayで以下をおねがいします。
<img width="228" alt="PNGイメージ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19692/146d02fa-2cbd-5847-da36-de2c7d69f3e8.png">

今年もよろしくおねがいいたします。