MoTLab -GO Inc. Engineering Blog-MoTLab -GO Inc. Engineering Blog-

タクシーアプリ『GO』のiOS開発で、Concurrency、Xcode Cloud、新DIを試してみた

iOStechtalkChallengeWeek
April 27, 2023

An image from Notion

2023年4月11日に「GO TechTalk #18 『GO』のiOS開発で、Concurrency、Xcode Cloud、新DIを試してみた」(connpass)を開催しました。

本記事では当日の内容を簡単に紹介します。


GO TechTalkとは?

GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。

18回目となる今回は、『Engineer Challenge Week(※)』で取り組んだ、タクシーアプリ『GO』のiOSアプリへの、async/await、Needle、Xcode Cloudの導入について紹介しました。

※『Engineer Challenge Week』は、GO株式会社のエンジニアが半期に2週間、日々のプロダクト開発から離れ、普段できない技術チャレンジや時間があればやってみたいこと、新たな知識の獲得など、スキルアップのための期間を与えられるという取り組みです。

詳しくはこちらの記事もご覧ください! 参考:取締役エンジニアとして考える新しい個人と組織の成長の形 - Engineer Challenge Week

Engineer Challenge Weekでの取り組みの一部は、すでにテックブログでも公開しているのでこちらもどうぞ! 参考:Engineer Challenge Week関連の記事一覧

こちらのツイートのスレッドで当日の様子や雰囲気を感じていただけると思います。

登壇者紹介

今回はこちらのメンバーが登壇しました。

  • iOSアプリエンジニア:黒田 修平
  • iOSアプリエンジニア:日浅 貴啓
  • iOSアプリエンジニア:今入 庸介
  • 広報:高堂 和芽(@sandgirl_14

コンパイル時に静的チェックできるDI Library、NeedleをRIBsアーキテクチャに適用してみた

タクシーアプリ『GO』のiOSアプリではUber社の開発したRIBsアーキテクチャを採用しています。RIBsアーキテクチャでは「RIB」と呼ばれるコンポーネントを親子関係のように組み合わせることで、木構造でアプリを構築するのが特徴です。

このRIBsアーキテクチャでは、親のRIBで定義されているインスタンスを子のRIBから参照したいというケースがよく起きます。親のインスタンスを参照するだけなら親にアクセサメソッドを実装するだけですが、親の親、親の親の親といった祖先のインスタンスを参照しようとすると、中間にあるすべてのRIBにアクセサメソッドを実装する必要があり煩雑です。

今回はRIBsアーキテクチャと同じくUber社が開発したDIライブラリであるNeedleを使い、RIBsアーキテクチャの親子間の依存関係を自動で解決できないか検証した成果を紹介しました。

またより詳細にサンプルコードなどもご覧になりたい場合は以下の記事もご覧ください!

参考:RIBsアーキテクチャのアプリにNeedleを導入検討してみた話

『GO』にSwift Concurrencyの導入戦略を検討する

タクシーアプリ『GO』では、RxSwiftを用いてリアクティブプログラミングを行っています。またその流れで非同期処理もRxSwiftを利用しています。

今回はリアクティブプログラミング部分はRxSwiftそのままに、非同期処理部分だけAppleが推奨するSwift Concurrencyに置き換えられないか検証した成果を紹介しました。

Swift Concurrencyの概要や、導入の流れ・勘所にも触れているので、ぜひスライドや本記事の文末に掲載しているアーカイブ動画をご覧ください!

Xcode Cloud の導入前に考慮すべき4つのポイント

2022年にリリースされた Xcode Cloud の活用について検討しました。実際に Xcode Cloud を使用して、良いところ、他の CI サービスとは異なる特徴、また導入前に考慮すべきポイントとして以下4つについて紹介しました。

  • Xcodeの機能を利用しなければならない
  • 任意のスクリプトの実行タイミングが限定的
    • git clone前に任意のスクリプトは実行できないので、場合によっては移行が難しいケースがありそう
  • キャッシュ機構が不明瞭
    • Homebrew、Gem、Mintなどのインストールは毎回行う必要があり、実行時間が増加する懸念がある
  • Workflowの編集履歴や差分は確認できない
    • バージョン管理機構がないので最新状態しか確認できず、過去の状態に戻すこともできないので、チーム内で事前に運用方法の議論が必要

アーカイブ動画

今回非常に多くの質問や感想をいただきました。ありがとうございました。アーカイブ動画の中では以下の質問にもお答えしていますのでぜひ視聴いただければと思います。

  • RIBsアーキテクチャ以外のアーキテクチャに Needle を導入することはできるか
  • Xcode Cloud を CD として活用する際のポイント
  • Xcode Cloud のキャッシュ機構にまつわるトラブルの有無

開催履歴・開催予定

GO TechTalk は不定期開催しています。過去の開催レポートは こちら にもありますので、ぜひご覧ください!

GO株式会社の最新技術情報は公式Twitterアカウント @goinc_techtalkで随時発信していきますので、ぜひフォローして続報をお待ちください!

We're Hiring!

📢
GO株式会社ではともに働くエンジニアを募集しています。

興味のある方は 採用ページ も見ていただけると嬉しいです。

特に今回登壇したメンバーが所属しているポジションは以下のページで紹介していますので、ご興味持っていただけた方はぜひご覧ください!