SwiftUIを導入したくなった iOSDC Japan 2022
こんにちは、Zaim で iOS 開発を担当している @ugo です。
2022 年 9 月 10 日(土)〜12 日(月)に開催された iOS 関連の技術祭典の「iOSDC Japan 2022」に参加しました。今年はオフライン、オンラインのハイブリッド開催となっており、私も初めてオフラインで参加できました!実際に多くの方が来場されていて、当日の会場の WiFi の同時接続数は最大 579 台だったそうです!
今年は SwiftUI についてのセッションが多く、プロダクトに本格導入されている方が多いようでした。本記事では印象的だった SwiftUI のセッションを紹介します。
ウーニャ、しってる。みんなふんいきでSwiftUIをつかってる。
株式会社ディー・エヌ・エーの uhooi さんによるセッションです。(冒頭の立木 文彦さんのタイトルコールで笑ってしまったのは私だけではないはず)
SwiftUI の View 層における分割と命名についてのセッションです。一つのファイルにベタ書きされた UI をお題に uhooi さんがどういった観点で View やモディファイアを分割、命名していくかを解説されています。
セッションではリアルタイムで uhooi さんが Twitter のコメントを拾いながら分割の議論を進めており、寄せられたコメントで ”Previewで確認したければ構造体で分割する” という意見はなるほどなと思いました。
私も SwiftUI でレイアウトを組む際は body 内を見やすくするために、どういった観点で View をプロパティやメソッドに切り出すのがいいか、構造体を定義するのがいいか迷うことがありました。今後はセッションを参考に悩む時間を減らせそうです!
また Zaim ではデザイナーとエンジニアで UI 改善会という取り組みをやっていて、そこでデザイナーさんと相談するのも良いと思いました。
チームでまだ SwiftUI を使用した View の切り分けや命名などルールが定まっていない場合は視聴して損はないセッションだと思います。
SwiftUI Navigation のすべて
クックパッド株式会社のアイカワさんによるセッションです。
たくさん種類がある SwiftUI の Navigation の説明から、現在の Navigation の課題、その課題をどう解決していくかについて解説されています。
現在 Apple 純正の SwiftUI の Navigation には以下三つの課題があります。
1. 遷移先の画面に Binding value を渡す機構を備えていない
2. 状態管理を複雑にさせる API が存在している
3. 複数の Navigation を管理しだすと無駄な状態が増える
これらの課題は Apple 純正ではない Point Free製の swiftui-navigation というライブラリを使用すれば解決できるようで、課題の具体例からライブラリを使用した解決方法まで非常に分かりやすくまとまっていました!
とても便利でなぜ Apple が標準で提供していないかは気になりますが
今後フル SwiftUI でアプリを開発する場合は必須のライブラリになりそうです。
SwiftUI in UIKit で開発する世界
楽天グループ株式会社の Hiromu Tsuruta さんによるセッションです。
個人的に今年、最も勉強になったセッションで既存プロダクトへの SwiftUI の導入のモチベーションがとても上がりました。Rakuma は今年で 10 周年を迎えるアプリだそうで、なんと現在 UIHosting Controller を使用して画面の 4 分の 1 が SwiftUI で開発されているそうです!
発表では Rakuma がどう SwiftUI へ移行していったかの説明があり、現状では SwiftUI を使用して画面とロジックまでを実装するのが無難そうです。
画面遷移は UIHosting Controller を親画面として遷移させているようで ViewModel の Output を親画面で購読してイベントがあれば遷移させるといった分かりやすい実装例も紹介されていました。また SwiftUIへの移行において普段のリファクタリングの重要性も説いていたのが印象的でした。
Zaim でも現在、既存の UIKit のプロジェクトで小さめのパーツから SwiftUI を導入しているので発表を参考に本格的に導入したいです!
最後に
Zaim ではエンジニアの最新技術キャッチアップの支援として、カンファレンスなど業務に関わる勉強会については、参加費用の補助があり、業務時間で参加可能です。
Zaim ではエンジニアを募集しています。こうした社内制度や、どのようにチームで開発しているかなど、ざっくばらんにお話させてください!