Tabelog Tech Blog

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

iOSDC Japan 2023 参加レポート#1 day0のまとめ

食べログシステム本部アプリ開発部でiOSアプリの開発をしているN_Kaito7です!
食べログでのエンジニア歴は6年目でログインからネット予約まで幅広く開発に携わってきました。
この記事では1日目(day0)の気になったセッションをピックアップしてお伝えします。

過去記事:iOSDC Japan 2023にゴールドスポンサーとして協賛します!

目次

気になったセッション

モーダルの遷移を理解する

記念すべき1つ目のセッションはyaso_sanさんのSwiftUIでのモーダル表示の話でした👏
ちなみにモーダルの定義はSheet, Full Screen Cover, Alert, Popover, Confirmation Dialog, Menu/Picker としているようです。

一言でモーダル表示と言ってもアプリエンジニアにとっては単純なものではなく、
複数の表示タイミング(アプリ起動、画面表示、エラー時)と表示パターン(入力・訴求・エラー)が存在するので各モーダルがバッティングしてしまわないか等を気をつける必要があります。

またこのセッションではSwiftUIのモーダルの問題点にも触れられており一部を抜粋すると
・3階層以上同時に開けない
・iOS15では複数階層閉じられない
・遷移中にモーダルを閉じようとするとフリーズする
・モーダル切り替え中にさらに遷移するとクラッシュする
など複数の課題もありそうです。。

解決方法としてデータソースでモーダルの状態をセットする事でUIにも反映するという方法をとっていました。
またその際にonAppear、onDisappearイベントを監視することでモーダル同士がバッティングすることなく管理できる点はとても良さそうです。
食べログではUIKitを使用しているので今回の問題が全て起こる訳ではないのですが、キャンペーンやオンボーディングのツールチップの表示が被ってしまうといった課題感を感じていたので非常に参考になったセッションでした。

カンファレンスでネットワークの低レイヤーを学ぶ with Swift

2つ目のセッションはS_ShimotoriさんのiOSDCの会場を例にしてネットワークの仕組みを学ぶというものでした🕸
「テザリングだけはしないでくださいね!」と何度も念押ししてくれていたのがとても印象的ですw
今回ターゲットにしていたのはトランスポート層〜物理層までの話でした。

物理層
ざっくりいうとケーブルや電波で物理的に繋げるもので今回はアクセスポイント(AP)を例にしていました。
2.4GHz帯でさまざまな機器で使用されているので混線しやすいため会場の様に複数のAPが存在する場合には
20GHzずつぐらい周波数を若干ずらして管理している様です。
またAPは非常に優秀なので周辺のAPと周波数が異なる様に自動的に調整してくれる様です。
会場でAPを上から吊り下げていたのですが、電波は水分や金属を通り抜けられないので 体内の60%が水分という我々人間を避ける様に設置されているという話はなるほどなぁ〜と思いました。

データリンク層
MACアドレスを使用し通信を届けているためMACアドレスが不変だと個人を特定出来てしまうそうです。(コワイ)
また、会場ではVLAN(仮想的なLAN)という会場とは別のところにサーバーを置いて運用されているとのこと。
ネットワークの利用者は発信する通信にVLANタグを付けて通信しておりそのタグ情報やIPアドレス、
TCPなど別の階層の情報も合わせることでどこまでアクセスして良いかの権限を管理しているとのことでした。

ネットワーク層
ネットワークに接続するために1台に1つIPアドレスが割り振られておりそのIPアドレスを使用してロールの判断も行われている様です。
ロールを判断するためにIPアドレスを集約して判断している様でこれは1つ1つのIPアドレスに対して ロールを割り振っていくと大変なのでIPがxxx~xxxの人は管理者権限ね!っと言った形で判断している様です。

苦手意識からずっと避けてきたネットワーク周りの話を目の前の環境にフォーカスして説明してくれていたので非常に分かりやすくスッと理解することができました!
皆さんも2.4GHz帯で行われるテザリングは混線に繋がるのでカンファレンスなどでは使用しない様に注意してくださいね👍

P.S.
後日談としてday2のLTの最後に飛び込みでのセッションがあり、実はこのセッションの裏でスタッフの方たちはネットワーク障害と闘っていたそうです。
「カンファレンスでネットワークを学ぶ、どころじゃなかった話」として顛末を紹介してくれていました。
スタッフの皆様、ありがとうございます🙏

UIKit ベースの Custom UIContentConfiguration API を用いた複雑なカスタムセルの作り方

3つめのセッションはshimastriperさんのUICollectionViewのCellのカスタマイズ方法にConfigurationというAPIが追加された話でした🗒

Configuration
このAPIのとても良いなと思ったのがViewを使い回しても前のViewの状態に依存しないということでした。
食べログでもCellの再利用する際に前に表示されていたレイアウトが再利用後も表示されてしまう表示バグが発生した事があります。。
なのでisHiddenのフラグ切替をtrueとfalse両方記載しているのですが新APIを使うことにより記載漏れによるバグを引き起こすことなく安全に運用できそうです。

またCellだけでなくUIButtonのレイアウト調整にも使用できる様でデザインを自由に調整できたりCellと同じ様に 前のViewの状態を無視してくれるので、例えば文言だけ変えた際に元のTextColorなどの設定は引き継がないのでより再利用しやすくなりそうです。

ContentConfiguration
TableViewやCollectionViewのCell(入れ物)とContentConfiguration(中身)を分離することにより
TableViewやCollectionViewどちらのCellでも使用できる共通のContentConfigurationを利用することが可能になったり、今まではCellのアクセサリーを付ける際などに有無パターンによりCell自体の定義を分ける必要があったのですが、Cell側とContentConfiguration側が分かれているのでわざわざ別のCellとして定義することなく同じContentConfigurationを使用できるメリットもあります。

今後食べログで取り組みたいこと

アクセシビリティ、ハプティクス、文字認識などやりたい事がたくさん見つかった3日間でした。
中でも文字認識は、まさに食べログでも店舗の情報を充実させていく上でメニュー表の文字を識別したり料理画像を認識する事で種類を分類していく事をやっていきたいと考えいたのでとても参考になりました。
アプリがより使いやすくなる様に技術的なアプローチで解決していきたいと感じた3日間でした!

まとめ

UIの事だったりネットワークのことだったり幅広い分野についてのセッションを聞くことが出来たので濃い初日でした。
day1、day2、ブースの記事についてもまとめる予定なのでお楽しみに〜
それでは最後まで読んでくださり...Thanks👋