6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クラスターAdvent Calendar 2021

Day 14

iOS開発から見るcluster

Last updated at Posted at 2021-12-13

この記事は クラスター Advent Calendar 2021 14日目の記事です。
昨日は、yoshioka_ko57 さんの、「デザインデータの読み解き」 でした。普段やり取りさせてもらっているデザインデータですが、データの節々から様々な工夫や配慮を感じながら日々作業させてもらっています。圧倒的感謝:pray:

こんにちは。クラスター株式会社でソフトウェアエンジニアをしている橋本です。今年も残すところ半月ほどとなりましたが、みなさまいかがお過ごしでしょうか。私は、この残り半月という事実を到底受け入れられそうにありません...:innocent:

さて、モバイル版clusterのアプリoutroomがネイティブ化されてから1年と少し経ちました。この1年の間にどのようなiOSの開発が行われてきたかをお話していきたいと思います。

組織の話

clusterアプリはWindows(+VR)、Mac、iOS、Androidそして最近リリースされたQuest2と様々なプラットフォームをサポートしていますが、クラスター株式会社でプラットフォームを開発しているのは現在24人ほどです。その中でiOSエンジニアは3人で、それぞれがUnityなど他の領域と兼務しつつ日々機能開発を行っています。

iOSの開発でこの1年で特に大きく変わったことは、iOSエンジニアのが1人増えたことです!!めでたい!!いつもお世話になってます:pray:

iOS開発のアーキテクチャの話

さっそくですが、clusterのネイティブ開発がどのように行われているのかをざっくりですが紹介していきたいと思います。まずはこちらの概要図を御覧ください。
スクリーンショット 2021-12-14 3.51.57.png
clusterはワールドやイベント入室前のoutroomと入室後のinroom1という大きく2つ領域に分かれていて、それぞれが(ほぼ)独立して開発されています。この独立性はUnityのUaaLという機能を使うことで実現しています。その中でも今回はoutroom側(iOS開発)の話をメインにしていこうと思います。※上の図はinterfaceへの依存などは省略しているのであしからず。

まず、clusterのiOS開発ではMVVMをGUIアーキテクチャとして採用しています。このアーキテクチャの採用理由としては、(今では)ネイティブアプリ開発でメジャーなアーキテクチャであることや、Android側と同じようなアーキテクチャをとることで、iOSとAndroidお互いのコードベースを参照しやすくするからと言った点があります。また、画面遷移はCoordinatorパターンを採用していて、Deeplinkや通知機能など様々な起動経路からの画面遷移に強い作りになっています。

その他の採用技術としては、データバインディングにRxSwift、オブジェクトの永続化にCoreData、ApiClientの生成にopenapi-generatorが使われています。まだ一部分ではありますが、CollectionViewのCellにSwiftUIを使ったりと、技術的なチャレンジもこの1年の間に行っています。また、outroominroomのやりとりを担うBridge部分ではProtocol Buffersを使用しているのはユニークな点かなと思います。以上でざっくりとしたアーキテクチャや採用技術の説明は終わりになりますが、続いて具体的な機能開発の事例の紹介に移りたいと思います。

機能開発の話

clusterではこの1年で様々な機能がリリースされてきました。特にoutroom開発ではメッセージ機能をはじめとした、ソーシャル機能やinroomとの連携を生かした、PictureInPicture風の機能2や、それを用いたポータル設置機能新規サーバー作成機能などをリリースしてきました。他にも、ナビゲーションメニューなどの基本的な機能郡をはじめ、ClusterRoundの対応など様々な改善が行われています。ここでは、PictureInPicture風の機能開発を中心に詳しく話していこうと思います。
スクリーンショット 2021-12-14 0.46.42.png
この機能を使うと、cluster内のワールドやイベントに参加しながら、次にいきたいワールドやイベントを探したり、探したワールドにみんなで行くためのポータルを今いるワールド内に設置したりすることができるようになります。具体的にどのような実装になっているかというと、inroom側から「PictureInPictureを開始して」というメッセージを前述のBridgeを経由してoutroom側で受け取ると、outroom側でUnityが描画している画面をもっているUIWindowを任意の形に変形させることで、PictureInPicture風の画面を実現しています。また、PictureInPicture風の画面をスワイプして移動させたりするのもoutroom側の実装が担っています。

このように例に上げた実装はとてもシンプルですが、基本的にoutroom側の実装はSwiftで書かれていて、3DCGやUnityの知識があまりなくても、スマホからも参加できるメタバースのユニークな機能を開発することができるということがわかるかと思います。メタバースはあまり関係ないなと思われていた世のiOSエンジニアのみなさんに、「clusterにはメタバースの世界を加速させるような活躍をする場所がたくさんあるよ」ということを知ってもらえたら幸いです。

さいごに

clusterでのiOS開発の雰囲気が少しでも伝わったでしょうか?体力の都合上かなりざっくりとしたことしか書けませんでしたが、もし興味があるよ!って方がいましたら採用ページを見てもらえればと思います。

次回の クラスター Advent Calendar 2021alertさんの「ワールド紹介動画の撮影について」です。クラスター社にはバーチャルプロカメラマンが何人かいますが、どんな内容になるか楽しみですね...!

  1. outroomとinroomは社内用語です

  2. AVKitのPictureInPictureの機能を使っているわけではないので、PictureInPicture風としています

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?