2022年のiOS関連のアップデートと振り返るグロービス学び放題アプリ
iOSエンジニアの山岸 央青です🎅🏻
普段は、愛媛県に住んでいて、フルリモートで働いています。
GDPの20名ほどのいるLEDチームで、グロービス学び放題(以下「グロ放題」といいます)アプリのiOS開発を担当しています。
(Q. 記事の中に🎅絵文字が何個でてくるでしょうか?答えは記事の最後に!)
概要
2022年のiOS開発周りのアップデートを振り返りながら、グロ放題のiOSアプリ開発の現状や今後の取り組みたいことなどをご紹介します!
以下アジェンダになります。
Appleのデバイス
OSのアップデート
Swiftのアップデート
SwiftUI
Swift Concurrency
まとめ
🍎Appleのデバイス
今年発売されたiPhoneとiPadをまとめてみました。
iPhone14には、Dynamic Islandが実装されました。
グロ放題は、動画学習サービスなので活用できそうだなと思うものの
iPhone14のユーザがまだ少なく、インパクトと運用を考慮するとまだ検討段階です。(あんまり触ってないのでわかってない🙇♂️)
🎅
iPadは、M1やM2チップが搭載されました。
グロービスに入社して、開発用にM1のMacBook Proが配布されたのですが、
Xcodeでビルドしても熱くならないかつシューシュー言わないので、快適に開発ができています。
M1チップの性能の凄さに驚きました。
グロ放題では、iPadにも対応していますが、iPhoneのデザインを表示しているので、今後はiPadに適したデザインに変更したいと思っています。
💡ポイント
グロ放題のアプリは、ビジネス動画学習サービスを提供している
新しい技術(Dynamic Island)に取り組んでいく姿勢がある
グロービスに入社すれば、M1のMacBook Proで開発ができる(在庫があれば)
iPadのデザインにも取り組んでいく姿勢がある
🚀OSのアップデート
例年通りWWDC22でiOS16が発表されました。
iOS16対応機種はiPhone14からiPhoneX、iPhone8、SE(第2世代以降)なので、ついにiPhone7のサポートが切れました。
グロ放題では現在iOS14以上のサポートをしています。
現在のユーザーのOSの利用状況は、iOS14以下のユーザーも5%を切りそうなので、年明けくらいのタイミングでOSのサポートをiOS15以上にするのを検討できそうです。
🎅
iOS16の機能面では、Xcode Cloud、ロック画面のウィジェット、Swift Chartsが特徴的な機能です。
CI/CDツールとしてグロ放題では、bitriseを使ってApp Store Connectのアップロードやデバッグ版のビルドの配布などを行っています。Xcode Cloudに関しては、署名周りは強いが、他社の連携にはまだ弱いと聞くので、これからの進化の動向をチェックし続けていきたいです。
話は変わりますが、グロ放題では、直近(2022/12/20)に学習計画機能をリリースしました。
(※学習計画機能とは、ラーニングパス(学びたいスキルに沿った動画コースのセット)を選択し、一週間の学習時間を決めて、ペースメイキングしながら学習できる機能です。)
学習計画機能では、学習の進捗や学習した時間などが管理されているので、
ウィジェットやグラフ(SwiftCharts)などを活用していけるのではないかと考えています。
🎅
グロ放題は、長らく機能開発が止まっていた動画の視聴プレイヤーのカイゼンや機能の向上にも取り組んで行きます。iOS14で発表されたピクチャインピクチャや、iOS15で発表されたSharePlayなどの開発を検討してたりします。新しい機能もユーザーにとって便利なのかサービスとの親和性があるかなどを検討しながら、開発に取り組んでいくつもりです。
💡ポイント
グロ放題のOSのサポートは、iOS15以上になりそう。
グロ放題は、まだまだOSの新しい機能を実装できるポテンシャルをたくさん持っている。
グロ放題の視聴プレイヤーカイゼンプロジェクトは、これから面白くなる!
グロ放題ではCI/CDツールとしてbitriseを使っている。
🐔Swiftのアップデート
Swiftのバージョンアップも目まぐるしくSwift5.5からSwift5.6 < Swift5.6.1 < Swift5.7までアップデートされました。
グロ放題では、Xcode14.0で開発を行っているのでSwift5.7に対応しています。
Swift5.7でif letのunwrapがシンプルになったのは、すぐ開発に反映できてインパクトが大きかったです。(※Swift5.8でもよりシンプルになっています。)
💻クロージャー内のweak selfのunwrap
// before
let action = UIAction { [weak self] action in
guard let weakSelf = self else { return }
weakSelf.fetch()
}
// swift5.7
let action = UIAction { [weak self] action in
guard let self else { return }
self.fetch()
}
// swift5.8
let action = UIAction { [weak self] action in
guard let self else { return }
fetch()
}
💡ポイント
グロ放題では、年内にXcode14.2に対応します。
Swiftの最新バージョンで開発できます。
便利に使える機能はしっかりサービスに取り入れていきます。
🎄SwiftUI
iOS16からSwiftUIに、写真の選択画面(PhotosPicker)やカレンダー(MultiDatePicker)などの機能が提供され、UIをより簡単にリッチに表示できるグラフ(SwiftCharts)、グリッド(Grid)、円形ゲージビュー(Gauge)などが追加されました。
開発者的にはサクッとSwiftChartsでグラフ作れますよ!って提案したいところですが、SwiftChartsはiOS16以上の端末のみ表示することができるので
サービスのOSのサポートがiOS14以上だった場合は、iOS14,15のユーザは表示できないのです。サクッと、グラフ作れまっせとは言い難いのがSwiftUIのつらみな部分です。
🎅
SwiftUI は2022/09のリリースから4年ちょっとが経ち、
多くのサービスでSwiftUIを取り入れて開発を行っている印象です。
SwiftUIのメリットはAutoLayoutなしに宣言的にUIを組めてレビューしやすい、デメリットはOSごとに使える機能が違うので考慮する必要があるところです。
iOSDS22のカンファレンスでもSwiftUIの発表が多く
SwiftUIのデメリットを考慮しながら、どうサービスに取り入れていくかの知見がたくさん得られました。
🎅
グロ放題では、UI層はMVPで構築されています。
MVPだとSwiftUIの双方向のデータフローには対応しづらいです。
今後グロ放題では、UI層を双方向のデータフローにも対応できるMVVMへの変更を行います。
Viewの構成は、UIHostingControllerを使ってVCを作成し、VCのviewはSwiftUIを使って実装し、遷移はUIKitに任せることでUIKitの資産を活用しながらうまくSwiftUIを活用してく実装を検討しています。
(カンファレンスの発表がとても参考になりました。)
💡ポイント
グロ放題では、UI層をMVPからMVVMに変更して、SwiftUIの活用を進めていく
UIHostingControllerを使ってUIKitの資産を活用しながらSwiftUIを活用する
📈SwiftChatsを試してみた
🔔Swift Concurrency
2021/09/20にリリースされたSwift5.5でSwift Concurrencyが利用可能になりました。iOSDC22などでもいくつかセッションがあり、少しずついろんなサービスが使い始めているイメージです。
async/awaitの実装はシンプルですが、実装を進めていくと、Sendable、Task、Actorなどの概念が出てきて、奥が深いなという印象です。
まだまだ新しい機能の追加や既存のバグがあったりSwift6で破壊的な変更も加わることを考慮すると、サービスへの実装は、優先度的にまだ先かなと思っています。しっかりキャッチアップを心がけて、いざというタイミングを見て導入を検討できたらなと思っています。
🎅
グロ放題では、レイヤードアーキテクチャ+DDDを採用しており
Infra層、Domain層、UseCase層、UI層という構成になっています。
Infra層では、RxSwift + Apollo(GraphQL)でAPIクライアントを組んでいます。
Apolloの機能を使い込めていないこともあり、SDKのバージョンを0系から1系にアップデートしたり、キャッシュを使ってみたり、UseCaseやRepositoryを抜いて直接Apollo(GraphQL)のクライアントを呼び出す構成などいろんなことにトライしている段階です。
🎅
RxSwiftを使い続けるのかCombineに置き換えて行くのかという議論もしていて、UI層はMVVMでViewにSwiftUIを採用するので、VMは、SwiftUIと親和性が高いCombineを採用するつもりです。
GraphQL、RxSwiftの件も小さく試しながらチームで話し合って方向性を決めていきたいと思っています。
💡ポイント
グロ放題では、Swift Concurrencyのキャッチアップを進めている
グロ放題では、レイヤードアーキテクチャ+DDDを採用している
Infra層では、RxSwift + GraphQLでAPIクライアントを組んでいる
色々模索中🌀
🎁まとめ
2022年のiOS開発を振り返ると、たくさんの機能が追加されたりアップデートされていることがわかります。グロ放題のアプリを振り返ると、25回のリリースを行っています。2週間に1回のペースでリリースが行えているので良いペースで開発できたのではないでしょうか!3ヶ月ほどかけて作った学習機能もリリースされて、エンジニア陣でKPIダッシュボードを作成して、数字を見ながらカイゼンしていきたいです。
🎅
今後のカイゼンをたくさん記述しましたが、まずは来年は、SwiftUIでViewを実装できるように整えて行きたいです。
2023年もたくさん新機能やアップデートを計画しているので、iOSエンジニアの方やそれ以外の職種で一緒に作りたい方がいたらこちらから応募ください!
💡ポイント
2022年にグロ放題のアプリは25回のリリースを行いました
ユーザー目線を忘れず、KPIに基づく数値カイゼンをチームで意識してやっていき!
カイゼン優先度は、MVVMに変更 > SwiftUI > GraphQLのキャッシュ利用 > UI層以外の検討
来年のグロ放題は、ワクワク楽しめる開発ができるぞ!
仲間をこちらから応募中
📝大変参考になった発表や記事リンク
▼SwiftUI 導入
SwiftUI in UIKit で開発する世界
UIKit ベースの大規模なプロジェクトへの SwiftUI 導入
▼Swift Concurrency
Concurrency時代のiOSアプリの作り方
Swift Concurrency Next Step
▼Xcode Cloud
Xcode Cloudの評価
▼GraphQL
GraphQL実装ノウハウ
宣言的UIの状態管理とアーキテクチャSwiftUIとGraphQLによる実践
はてなが作るマンガアプリのGraphQL導入から活用 ~ コミックDAYSからGigaViewer for Appsへ~
Q.🎅絵文字が何個でてくるでしょうか?
A. 10個