freeeの開発情報ポータルサイト

iOSDC2023に参加しました!

こんにちは、新卒iOSエンジニアのasahiです!

9/1 ~ 9/3に開催されたiOSDC 2023に参加してきました。iOS開発の歴が短く、またこういった技術カンファレンスは初めてでしたので、参加する前と後でものすごく世界が広がった気がするので、共有していきたいと思います!

freeeの出展ブース

iOSDC2023のスポンサーとしてブースを出展していました。私たちfreeeのビジョンは

だれもが自由に経営できる 統合型経営プラットフォーム

であり、実現のために不可欠な分野の1つにアクセシビリティがあります。モバイルチームでも力を入れており、ブースでは実際の「freee会計」アプリのVoiceOver機能の利用場面を体験していただいたり、freeeでのアクセシビリティの開発体制に関して色々紹介していました。

ブース全体の様子ノベルティのサンダルとビアグラス

freee会計アプリの展示の様子freee社員が説明している様子
ブース展示の様子

同時に、「アクセシビリティやってる?」といったアンケートを実施しており、結果は

  • YES: 56.5票
  • NO: 91.5票

でした!YESの票が思っていたよりも多かった印象ですが、いずれは全ての票がYESになるような未来を作っていけたらなと思っています。

freee社員が「アクセシビリティやってる?」の問いのアンケート用紙を持った様子
アクセシビリティやってる?

ブース

会場は3日間ともかなりの人がいて賑わっており、すべてのブースで詳しくお話を聞くことができなかったので、一部をご紹介しようと思います!

DeNA

SwiftUI脳内プレビューが開催されてました。右側のモニターにはSwiftUIで書かれたコードが表示されており、これを脳内でビルドして絵に描いてみるといった内容でした。

問題は全10問あり、行くたびに新しい問題に更新されていました!何度か挑戦しに行きましたが、正直、自分にはすごく難しく...初日から苦戦していました。SwiftUIの標準的なコンポーネントはわかるのですが、知らないmodifierであったり、この位置にコンポーネントを配置してもビューには反映されなかったりと、行くたびに自分の学びになってすごく嬉しかったです。

個人的にはmask modifierを使用した問題の答えが1番想像がつかなく驚きました。問題と答えはDeNAさんのブログに掲載されているのでぜひやってみて欲しいです! engineering.dena.com

DeNAのブース展示の様子
DeNAのブース展示の様子

GO

タクシーアプリ「GO」を配信している、GO株式会社さん。自分も普段から利用させてもらっているので、詳しくお話を聞いてみました。 ブースの左側にはGOに加盟しているタクシーに乗ると、よく見る後部座席に設置してあるタブレットや気になるメーターなど、タクシーを取り巻くシステム構成図が展示されていました。 また、GOのiOSアプリでは「RIBs」といったアーキテクチャを採用しているそうです。こちらはRouter/Interactor/Builderからなるコンポーネント同士を木構造に繋ぎこむアーキテクチャです。タクシーといった現実のものを扱う特性上、ユーザーのアクションだけでなく、タクシーの状態もアプリに密接に関わってきます。Ribsは独自のライフサイクルを保つため、Viewに依存せずにビジネスロジックに注力できるため採用しているとのことでした。

GO株式会社のブース展示の様子
GO株式会社のブース展示の様子

セッション

どれも興味深いセッションでしたが、時間の関係や同時に開かれているものもあるため、一部をご紹介しようと思います!

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

speakerdeck.com

モーダルは親ビューの一部、または全部を覆うような形で別のビューを表示する機能やUIのことを指しますが、iOSでは以下のような種類があります

  • Sheet
  • Full Screen Cover
  • Alert
  • Popover
  • Confirming Dialog
  • Menu / Picker

これらはUIだけでなく実装をする上でも取り扱いが大きく異なります。本セッションではこれらの違いを詳しく網羅的に説明いただきました。

iOSにおけるモーダルは自身を表示するか否かなどのプロパティを持ったデータソースと呼ばれる空間があります。 データソースを変更するタイミングによってはクラッシュやフリーズが起きたり、実装次第でデータソースを変更してもそのモーダルが2度と開けなくなったりするといったことが起きてしまいます。セッションではこれらの問題に「データソースの反映を遅らせる」ことで解決していました。あらかじめ、同じ階層のモーダルの状態を表すenumを定義しておき、enumが更新した際は現在モーダルが遷移中ではないかなどを確認してからデータソースを変更するといったものです。

モーダルを使った画面実装を行うタイミングは今後あると思うので、その際に参考になるようなセッションでした!

iOSエンジニアに求められる役割について

最後はチームラボの赤澤さんによる「iOSエンジニアに求められる役割について」です。本セッションではプロジェクトにおいてiOSエンジニアが求められる役割についてチームラボでの開発の流れを交えながら説明いただきました。

赤澤さんが入社前に抱いていたiOSエンジニアのイメージはコードを書いてiOSアプリを作る人であり、Swiftがかければバリューを出せるであったそうです。しかし、実際のプロジェクトでは要件定義から始まり、UI/UXデザイン、開発、テスト、そしてリリースと多様な工程でエンジニアとしての役割があります。特にモバイル特有であると思ったことはOSが提供するコンポーネントがUI/UXに直結しており、エンジニアとして常に最新の情報をキャッチアップし、デザイナーと一緒に最適なUI/UXを目指す必要があるといったことです。つまりiOSエンジニアの仕事の本質は優れたアプリを作ることであり、コーディングは道具の一つで、優れたアプリを作るために何ができるかを常に考えて実行することが大事であるとお話しされてました。

学生時代は1人研究室に篭っていた私にとって、エンジニアのイメージはまさにそれで、今、記事を書いている間もそのイメージが間違っていたことを実感しています。私も今後iOSエンジニアとして優れたアプリを作るため、常に何ができるかを考えていこうと再決心したセッションとなりました。

終わりに

こういったイベントの参加は初めてでしたが、多くの学びや、出会いがありました。お昼過ぎにはお酒が飲めるといったことはすごく嬉しかったですし、何よりiOSDCのスタッフには学生の方もいて、アプリもリリースしている方も多く、これからiOSエンジニアとしてやっていくモチベーションがすごく高まるカンファレンス参加となりました!