Tabelog Tech Blog

食べログの開発者による技術ブログです

iOSDC Japan 2023 参加レポート#3 day2のまとめ

はじめまして。食べログシステム本部アプリ開発部の基盤チームに所属している大澤です。
今年の春から食べログへ参画しています。
これまでは大手IT会社で決済アプリの立ち上げをしたり、ベンチャー系の会社で暗号資産関連のアプリに関わったりと、決済・金融業界でのiOSアプリ開発を長く続けていました。
そういった経歴ではありますが他業界でより身近なアプリの開発をしたいと考え、また、話を聞くと歴史がある一方で負債が多くこれはやりがいがありそうだと感じたため食べログへの参画を決めました。
今は基盤チームということで直接サービス開発をするのではなく、一歩引いてiOSアプリの環境改善や保守、今後の計画について担当しています。

iOSDC Japan 2023参加レポートの連載記事企画ですが、セッション内容に触れるのは今回が最後となります。
本記事では主に9/3(日)に行われたday2のセッションについて取り上げてさせていただきます。

過去記事:
iOSDC Japan 2023にゴールドスポンサーとして協賛します!
iOSDC Japan 2023 参加レポート#1 day0のまとめ
iOSDC Japan 2023 参加レポート#2 day1のまとめ

目次

セッションやイベントについて

それでは本題であるiOSDCのセッションについて、気になったものや印象に残ったものを紹介させていただきます。

Human Interface Guidelinesから読み解く標準アプリの素晴らしい体験

発表者は合同会社DMM.comの鳥嶋さんで、HumanInterfaceGuidelines(HIG)に関する発表です。
現地ではトラックDという狭めな会場でしたが、皆興味があるHIGということで注目度が高く多くの人が集まっていました。

内容としては、Appleが示しているHumanInterfaceGuidelinesはアプリ開発において非常に重要なものである一方、内容が多くて読み切れていないということで、標準アプリを見ていくことで読み解いていくというものです。
具体的には、標準アプリの中から「設定」「メモ」「カレンダー」「ヘルスケア」「ミュージック」の5つを取り上げています。

  • 「設定」アプリでは、設定ということで一貫したユーザへの操作や、適宜セクションでグループ分けをし効果的に見せているということを紹介しています。 また、DynamicTypeにも対応してテキストサイズを変更することができ、重要な要素はモーダルで表示したり独立した要素はフルスクリーンモーダルで表示したりと意味のある画面遷移についても触れています。
  • 「メモ」アプリでは、メモということでテキストやコンテンツの編集なので特にドラッグ&ドロップの挙動について紹介しています。 テキスト編集自体についてもユーザに視覚的にわかりやすくするようにハイライトをつけたり、操作としてもメイン画面へ影響するものはいわゆる半モーダルで補助的な機能を提供するということをあげています。
  • 「カレンダー」アプリでは、ドラッグ&ドロップで予定を移動させた後も選択状態は維持しユーザがやりたいことに沿った挙動を重視し、日付のピッカーも5分単位で選択できるようにと操作感を大切にしていることを紹介しています。
  • 「ヘルスケア」アプリでは、ユーザの体調を記録・可視化するということで、グラフの表示はシンプルにしつつユーザ操作で詳細も確認できるようになっています。 また、意味のある単位でコンポーネントをまとめつつ、「設定」アプリよりもアイコンをつけてリスト化するということでより直感的にわかりやすい工夫がされていることを紹介しています。
  • 「ミュージック」アプリでは、ナビゲーションのタイトルは簡潔にすることを強調し、おおよそ5文字、最大でも半角15字以内を心がけると良いとしています。 また、標準機能としての戻るボタンには長押しで複数階層を一気に戻れることや、ラージタイトルの利用によりスクロールに追従するナビゲーション、タブバーについてもアクションは置かずにナビゲーションに徹した方が良いと言及しています。

最後に、まとめとして標準アプリを積極的に触ることを勧めており、特に新規で追加されたアプリは確認してみると良いと語っています。
また、HIG自体は輪読会などで他者を巻き込んでいくスタイルもおすすめしているとのことです。

この発表を通して、HIGを意識しつつもまだまだ認識できてないことがあるなと痛感しました。
私としても標準アプリに意図的に触れるということについては賛成であり、今後も積極的に触り食べログアプリの改善につなげていきたいと感じました。
特に、食べログアプリでは該当はしていないですがタブバーについて「ホーム」といった抽象的なタイトルは避けたり、アクションを無理やり置くような実装は避ける(食べログ以外の現場で過去にした経験がある)ので、このあたりは該当することも多いと思うので意識したいとは思いました。
また、輪読会についてもチーム内で定期的に実施しており、そこでの題材として今後HIGについての読み合わせを検討したいとも思いました。
そのほかには、QAコーナーでも質問がありましたが、HIGに違反するような場合の要件については、最終的にはサービス判断のもとで決めると良いということで、このあたりは弊社だけでなくどのサービスでも判断に困るところだとは思います。
リスク(※)を認識した上で付き合っていくしないかなとは思いました。
(※HIG違反についてはAppleのレビューガイドラインでもリジェクト理由として含まれているので、ユーザに大きく混乱を与えるような体験ではないかどうかなどあらためて確認すると良いかもしれません。また、もしも該当してしまったら素直に対応しましょう。)

こういうのは標準APIいいよね

こちらですが、タイトルはタイポしているとのことで、正式には「こういうのは標準APIでいいよね」というセッションです。
発表者は株式会社GENDAでテックリードをされているKeisuke Shojiさんです。

内容としては、如何にライブラリの使用数を減らすかという話でした。
具体的には、ViewContorller数が25ほどのそれほど規模は大きくないアプリである一方、当時の利用ライブラリ数は44とかなり多い状況だったようです。
そのままでは保守性も悪く、似た機能のライブラリの併用による実装のばらつきなどの問題があったため、最終的にはライブラリ数を15にまで削減しこれらの改善を目指したとのことです。

「すでに使われていない」「やりたいことに対してライブラリが大きい」「用途が重複している」「参照が少ないUIライブラリ」「標準APIで十分」といった基準で削減を進めていったとのことです。
発表では、それぞれ具体的な手法と実際に削減したライブラリについても紹介していました。 また、進め方としては一気に進めるのではなく小分けにしてリリースし、日々の開発を止めないようにしていたようです。
結果として、実装のばらつきが減ってメンテナンス性は向上し、副次的にアプリの起動時間や容量削減にもつながったしています。

この発表を通して、食べログとしてもライブラリ数は同程度あり、アプリ規模に対して多すぎるというわけではないですが「すでに使われていない」「標準APIで十分」といった基準に当てはまるものはいくつか存在しています。
今回の件については私としても同じ考えであり、今後のアプリ開発において本当に必要かどうかを見極めつつライブラリの使用数を減らすことをしていきたいと感じました。
また、「アプリの寿命>エンジニアの寿命」という言葉は印象に残り、食べログアプリについても開発初期からのメンバーは少なくどんどん新しいメンバーが入ってきています。
ライブラリ削減だけではなくメンテナンス性を高めるなどをし、今後も長く続いていくアプリにしていきたいと思いました。

Xcode Previewを気軽に利用するためのDI戦略

発表者はまつじさんで、SwiftUIでのXcode Preview機能にまつわる内容です。

本発表では、サンプルアプリを例にPreviewの問題と解決策について紹介されています。
具体的には、API呼び出しがある場合にはPreview時に都度API呼び出しが発生してしまうので、その対策としてInitializer Injection(※)によりDIを導入するというものです。
(※初期化時に依存を注入する手法。Constructor Injectionとも呼ばれます。)
しかし、これだけではもし対象のViewに画面遷移先がある場合はそこへの依存受け渡しのバケツリレーが発生してしまい、管理が増え責務としても不適切となってしまいます。
一方で、@Environemntを使った場合の回避策についても言及されていますが、こちらでは必要な依存がわからず依存対象が増えてもコンパイルエラーにはならないなど課題が残るとのことです。

そこで、提案としてはInitializer Injectionと@Enviernmentを組みわせ、関心ごとの内か外かで分けて対応するというものでした。
関心ごとの内では従来通りInitializer Injectionで依存を注入し、関心ごとの外ではViewを継承したDependencyProviderから@Environmentを利用して依存を取り出し、各Viewで組み立てる時にそれを利用するというものです。
これにより、不要な強制アンラップや依存の設定忘れを防げ、シンプルなInitializer Injectionを維持できるようです。
そのほかにも、今回はSwiftUIでのサンプルでしたが、UIKitでもiOS17からはUITraitCollectionにより同等のことができるようになるとのことです。

この発表を受けて、食べログアプリではSwiftUIはまだ導入していないものの、依存の整理でInitializer Injectionへ統一していくという動きをしています。
そのため、今回の内容は思想の定着をしていくことの重要性を再認識し、一方で、SwiftUI独自のNavigationLinkによる依存管理の難しさについてはまだ移行・運用ができていため事前に理解できてよかったと感じました。
今後、SwiftUIを導入する際にはこのような考え方を参考にしたいと思います。

LT

セッションの締めくくりとして、今まで複数トラックで分かれていた会場もA・Bをぶち抜いて1つの会場としてLTが行われました。
前日のルーキーズLTでも使用されたペンライトを使い、会場全体が一体となって盛り上がっていました。

内容についても学びがあるものだけでなく、非常に勢いやノリに溢れたものもあり、iOSDCならではのLTだなと感じました。

懇親会

最終日ということで、懇親会が開催され私たちも参加させていただきました。
懇親会では非常に多くの方が参加され、料理や飲み物も提供され大いに盛り上がっていました。

会場では、他の参加者やスポンサーの方々、スタッフの方ともお話させていただき、非常に有意義な時間を過ごすことができました。

今後の食べログアプリについて

締めくくる前に、iOSDCの参加レポートとは別に今後の食べログアプリについても少し触れておきたいと思います。

今回のiOSDCへ参加してあらためて感じましたが、今年もSwiftUIに関するセッションは非常に多く業界として完全にシフトしていっているのがわかります。
一方で、食べログアプリは歴史が長く過去にはObjective-CからSwiftへのフルリプレースを実施してはいますがまだまだ改善の余地があります。
特に、食べログアプリの画面構成はまだUIKitのみでできておりSwiftUIへの移行はこれからという状況です。
また、移行するにあたってはユニットテストのコード量が少なく、プロダクトコード自体もテストしにくいという状況です。
そのため、現在はテストが書きやすいコードへ書き換えつつユニットテストの拡充を進めています。
そしてゆくゆくはSwiftUIを含めた新技術を取り入れ、より良いアプリを作っていけたらと考えています。

さいごに

今回はiOSDC Japan 2023の参加レポートとしてday2のセッションから一部だけを紹介させていただきました。
まだまだ紹介しきれていないセッションもありますので、ぜひ公式サイトから動画や資料などをご覧いただければと思います。
明日は連載企画の最終回となりますが、スポンサーブースや全体の様子について紹介させていただく予定です。
興味があれば最後までお付き合いいただければ幸いです。

食べログではエンジニアを募集しています!
もし今回のレポートで食べログでの開発や改善にご興味を持っていただけた方は、ぜひ気軽にお声がけください!
カジュアル面談も大歓迎ですので、ご希望の方はフリーテキストに、「カジュアル面談希望」と記載ください。

最後までお読みいただきありがとうございました!