クラスター社のカルチャーについて | クラスター株式会社
こんにちは、最近は専ら採用に力を入れているCOO兼CFOの岩崎です。 今日は最近できた「Cluster Culture」というステートメントについてご紹介したいと思います。 ...
https://www.wantedly.com/companies/cluster/post_articles/251836
こんにちは、クラスターの岩崎です!
弊社が提供するバーチャルSNS「cluster」はいまでもVRデバイスがないと遊べないと勘違いされがちなのですが、実は現在VR・PC・スマートフォンと多岐にわたるプラットフォームに対応しています。
clusterのスマホアプリがリリースされたのが半年前(2020年3月)。それ以来、ありがたいことに急速にユーザー数が増えており、多くの方に楽しんでいただけるようになりました。
目次
clusterのスマホアプリ開発秘話ーそれは偶然ではなく必然だった
クオリティとスピード、少数メンバーでどちらも実現するための決断
クラスター流「レイヤーをしっかり分けた設計」の強み
リッチなコンテンツを乗せるための挑戦
スマホだからこそ実現できる表現で、新しい世界を作っていきたい
座談会を終えて
橋本:まずは、これまでVRに注力してきたクラスター社がどうしてスマホ開発を決めたのか、その経緯に関して岩崎さんからお話してもらえますか?
橋本(左の箱アバター):
2016年5月よりインターンとしてクラスターに参画し、そのまま新卒1号社員として入社。4年目の現在は、UnityにてUIの実装をメインに担当。
ねおりん(右のハトアバター):
2018年11月に中途入社。前職はスマホゲームの会社でUnityクライアントとRailsサーバーのアプリ開発を担当。現在はCluster Creator Kitの開発ロードマップ作成からUnityクライアントの機能開発まで幅広く担当。
岩崎:ぼくは2017年4月からクラスターに正式に参画しているんですが、実はそれよりもっと前から、代表加藤とはクラスター社の未来について話をしていました。
あくまでもVR(バーチャルリアリティ)とは、人類が目指す理想の世界感を表す言葉。いま手元にあるVRヘッドセットは、それを具現化するための手段の一つであって、これを使うことが目的になっちゃ駄目だよねって。
「家にひきこもっていても、どこかに行ったような体験、価値交換、経済活動、創作活動等ができる、理想の世界としての(広義の)バーチャルリアリティをすべての人に提供する」
というクラスターの使命を考えると、身の回りにデジタル表現が溢れている生活スタイルこそ目指すべき世界観。となれば、スマホは当然あるべきだよね、ということをずっと議論していたんです。
その後VTuberなどの時流にうまく乗りながらサービスを拡大していき、次の手を打とうとなったときに、スマホ開発を決断しました。
橋本:へえ、そんな昔から話はあったんですね。
岩崎:そう、スマホ構想はずっと前からあって、実現したのが今年だったというだけなんですよ。
岩崎:実際に開発を始めるにあたって重視したことなどを教えてください。
橋本:まず、スマホは全く新しいものとして作るのか、既存のプロダクトを踏襲する形で作るのか、まずはその議論をしたんでしたっけ?
ねおりん:そうでしたね。ゼロから作るのと、既存のものから最適化するのとどちらが早いかを検証してみようってなりましたね。
橋本:一旦そのままビルドしてみて、VRのコードでどこまでスマホを動かせるか、その確認からスタートしたんですよね。
ねおりん:そうそう、それで意外と動いてたんですよね。「視点移動はできるけど、キーボードがないから移動ができない」というのが一番最初に見たビルドでした。
祖父江:案外動いているからこれで行けるのでは?となったことに加えて、異なるコードベースにするとメンテナンスがしにくいことも考えると同じコードベースでチャレンジしてみるかとなりました。
祖父江:(左の女の子のアバター)
コンシューマーゲームの会社で3DS、PS4、Switchなどのプラットフォーム向けに開発し、主にパフォーマンス改善などを担当。クラスターには2018年に入社し、Unityでクライアントのアバター・UIの動きなどの制作、スマホでのパフォーマンス改善を担当。
faidra:(右の妖精アバター)
スマホゲームの会社にてMMORPGのサーバー・クライアント開発に携わる。その後、ロケーションVRの会社にて筐体型のマルチプレイVRアプリケーションの開発などを行う。2020年2月にクラスターへ入社し、現在はCluster Creator Kitの動作基盤の検討・実装などをメインに行う。
橋本:Mac、VR、PCの3プラットフォームがある中でスマホを違うコードベースで増やすとなると、当時クライアント開発は4人だったので正直辛いねっていうのもあり(笑)
faidra:自分が入社したのがスマホアプリ開発の真っ只中だったんですが、この人数で開発しているんだ!と当時びっくりしました。
岩崎:同じコードベースである弊害やリスクなどはあったんですか?
ねおりん:当時、これを機にフルスクラッチしたいという気持ちも正直ありました。古いコードが厳しいところもあるので、スマホ版をフルスクラッチしてその後にデスクトップ、VRもそちらに統一できたらなあ……と。でも、議論した結果素早くリリースできることを優先しました。
▲ クラスター社の文化が明文化されたドキュメント。素早くリリースし、圧倒的はやさでユーザーから声を聞くことが文化レベルで推奨されている
祖父江:UnityでUIを作ると、一般的なネイティブのスマホアプリの触り心地には到底及ばないんですよね。だから最初から完全にネイティブ化するか、ネイティブとUnityを併用することとかも考えていました。
橋本:とはいえ、かなりスピードを意識していたので、結局Unityベースで行く判断になりましたね。
ねおりん:最終的には、あとでネイティブ化する前提で出して半年くらいは耐えられる水準で作るという感じの方針になりました。
岩崎:同じコードベースで開発を実現するために、技術的にポイントとなっているところってどういうところなんですか?
橋本:再利用性を高めるために、各プラットフォームごとのコードではDIを使って抽象へ依存をするという開発が結構ポイントになっていると僕は思うんですけれど、みなさんどう思いますか?
※ DI:Dependency Injectionの略。クラスはインターフェースに依存するように実装し、オブジェクトの依存解決を分けることによりコードの再利用性を高める手法。
ねおりん:僕がクラスターに入って思ったのは、クリーンアーキテクチャベースっぽいというか、綺麗に層が分かれているなって。スマホ対応するにしてもVR対応するにしてもプレゼンテーション層だけ差し替えればいいようになっていて、それはすごくいいなと思いました。
▲ clusterのパッケージ構成。レイヤー間が密結合しないように依存関係を構築している。
橋本:そうですね、プレゼンテーション層の中だけで完結はしないけれど、スマホ対応するのに僕らがいじるのはそこだけで良いというメリットはありましたね。
faidra:繋ぎ込みの部分を気にしなくていいというのが個人的にはすごく大きかったと思います。コードの分量に最適化しているわけではないけれど、きちんと分けているから書きやすかったですね。
橋本:まあ、書かないといけない量は多いですよね。PCとスマホは後から一緒になりましたけど、当時は別々だったので、結構PC版のコピペ実装の部分がありました。
岩崎:これまで蓄積されたコード群が、比較的スマホ対応しやすい形で綺麗に整理されていたというのは大きそうですね。
ねおりん:そもそもVRとデスクトップが分かれているという前提があったので、デスクトップをもう一つ増やす、みたいなのは結構やりやすかったです。今はデスクトップとスマホは大体共通化されてますね。
faidra:クリーンアーキテクチャ的な層の分け方は確かにきっちりしているんですけど、中身を綺麗に分けることには工数を使わないというのがクラスターにおける開発の特徴だなと思いましたね。
ねおりん:悪い方がよい原則とか言うし、正しさみたいなのにはあんまりこだわらないですよね。重複コードとかわりと許容するけど、それは雑にレビュー通してるわけじゃなくて、いま共通化できそうに見えるのは偶然なのでは?って。
faidra:確かに、共通化は必要になってからやればいいという考え方ですね。
橋本:逆に本当に共通化しないとダメなところのインターフェースはしっかり設計してから作ってますよね。
ねおりん:スマホ対応時期って、相当、設計のレビューもしていましたね。
▲ iOS版cluster。VR/PC版とシームレスに遊ぶことができる
岩崎:スマホ向け開発ならではの「ここは苦労した」みたいなのってありました?
橋本:一番はデバイスのスペックじゃないでしょうか。iOSだとただビルドして、動かす段階の時に結構重いワールドを動かそうとしたら、スマホがすぐ落ちるということがよくあったり......。
祖父江:iOSだとメモリが足りない。一番の原因はシェーダーをいっぱい入れているからだよね、ということでVRMのスタンダードシェーダーを抜きました。あとはフォントもなるべく同じにしましたね。フォントも結構バカにならないし、テクスチャのサイズをできるだけ小さく読み込むようにさせたり……使わないものはとことん削ぎ落としました。
それからアバターは使いまわせるようにしたり。同じアバターは再度ダウンロードせずにキャッシュしておいたものを読ませる処理も実装しましたし。
ねおりん:CPU的なところはほとんど触らず、メモリ使用量をできるだけ下げることを地道にやりましたね。
橋本:これはまだまだこれからも続けないといけないですね。乗せるコンテンツをリッチにするために、clusterそのものが使用するメモリのベースをもっと下げたい。
あとは、一部ライブラリがiOSに対応していないというので苦労した記憶がありますね。
祖父江:使っていたリップシンクのライブラリがiOSで使えなくて、別で作っていた手書きの口パクコードを流用して使いましたね。
ねおりん:Oculus Questに対応しようとしていたのも最適化、軽量化に繋がったんじゃないかなと思ってます。
※ Oculus Quest: スタンドアロンVRデバイス。Android OSで動作する。
祖父江:Questでビルドができることを確認していたので、スマホ開発の時もすぐにビルドを通すことが出来ました。そのQuest開発の途中で、部分的な軽量化が先に入ってたという感じですね。
ただ、Questだとスマホ並のスペックで2倍以上の解像度で表示する必要があるので、それだとスペックが足りてないよねとなり、色々落とさざるを得ないという状況でした。メモリもそれ以外も全然足りてなくて......、といった経緯で軽量化に向けて奮闘していたことがスマホ開発に生きているというのは大いにあるかと。
岩崎:開発者視点で今後こういったことしていきたいみたいなことありますか?
ねおりん:スマホでフェイシャルキャプチャできたら楽しそうだなと思っていて、アバターの全身の表現力はVRには劣ってしまうけれど、iPhoneだとフェイシャルキャプチャして表情を変えられるみたいな。最近のiOSやAndroidはARに力を入れているから、モバイルでしか使えないAPIを使ってスマホなりのリッチな表現ができると面白いなと思ってますね。
岩崎:それはいずれ出来そうですよね。
祖父江:処理負荷を下げてもっと大人数が入れるようになりたいですね。サーバー側の力も必要になるのですが、部分的に周りにいる人たちを表示して遠い人たちは簡易な表示にすることでその空間に何百人もいるような、大きな世界を見せたいというのはありますね。
faidra:電車の中などでclusterを使うとボイスチャットは難しいと思うので、音声以外でも表現できることが増えるといいなと思いますね。
橋本:ジャンプモーションとか、ゲームっぽい動きが出せるといいですね。ジャンプ一つでも個性が出たり、ユーザーが選べたり……。
ねおりん:一方で表現力が低いから居心地が良いという部分もあるから、その辺りはバランスが大事ですよね。
faidra:ユーザーにとって難しくはしたくなくて、手軽さはそのままにどこでも自由にコミュニケーションを取れるようにしたいですね。
メンバーそれぞれのアイディアやスキルを持ち寄って、いろいろな経験や知見がスマホアプリに活かされてるんだなあという様子が垣間見える座談会でした。
これからもUnityチームと一緒にclusterのサービスもどんどん進化していく予定です。
そんなクラスター社は事業拡大のため絶賛採用強化中! 全職種であなたからの応募をお待ちしております!