仮想オンボーディング:REALITY Unityチーム
おはようございます。Aさん、入社おめでとうございます。事前にお話ししていた通り、REALITY開発のUnityチームへの所属となります。
今日からお世話になります。izm です。Aさんと一緒に働けることを嬉しく思っています。
早速ですが今日は入社初日でもあるので、REALITYの開発体制の話や使っている技術についてお話しさせてください。
メモは取らなくても大丈夫で、これから分からないことがあったときにはSlackや口頭でいつでも聞いてください。
開発チームはみんな親切で教えたがりの人なので安心してほしいのと、入社したてのAさんの視点での気付いたことや不明点を教えてくれる事は会社にとってとても良いことだからです。
開発環境
まずは手元にMacがありますね。Macを触るのは初めてですか?申し訳ないのですがREALITYはiOS,Androidに対応したアプリなのでWindowsではiOSビルドで困る為、チームではMacを使うことになっています。
とは言え、入社までほとんどWindowsしか使ってなかった人もいたので、だいじょうぶです。まずはMacに慣れていきましょう。
ソース管理はGitHub Enterpriseを使っています。GitHubと同じなんですがサーバを自社内に持っている、という違いがあります。
ところでAさんはGitを使ったことはありますか?同じプロジェクトを複数の人がバリバリと開発していくときにGitがあるととても便利なので、もし使ったことがなければ一緒に覚えていきましょう。
Gitを一人で使いはじめる時と違って、チーム開発ではブランチの操作が分からなくなったら助けを求めることができるので入門のチャンスですね!
たぶんSubversionとかPerforceを使っていたことがあれば、すぐ慣れると思います!
この会社では3Dモデルを作る人もGitを使っているので、一緒に頑張りましょう。
AさんはUnityのコードを書くときに使うエディタにこだわりはありますか?特になければチームとしてJetBrainsのRiderをおすすめしています。
ソース整形やLintの設定を共通化しているので、Riderを使うとみんなとコードスタイルをお揃いにしやすくておすすめです。社内のポータルサイトからソフトウェアの使用申請を出すとすぐにライセンスが発行されるのでまずはダウンロードしておきましょうか。
併せてUnityのダウンロードも進めちゃいましょう。
開発体制
REALITYでは大きな機能開発をするとき、PM(プロダクトマネージャー)と各ジャンルのエンジニアを合わせたプロジェクトチーム、みたいなものを作って一緒に一つの機能を作っていきます。
REALITYは運営型のサービスです。
Aさんはいわゆるソーシャルゲーム含む運営型、もっと言うとネットワークが絡むスマホアプリに関わった事はありますか?もし初めてだったらチーム内の相談で出てくる技術用語が意味不明だらけで困るかもしれません。
一応僕が初めてソーシャルゲーム開発に関わって意味不明で苦しんだ記憶を思い出して書いたソーシャルゲームクライアントエンジニア入門以前( https://neon-izm.github.io/before_join_socialgame/docs/ )という読み物があるので、事前知識として読んでおくと話が通じやすいかもしれないです。
しまった…これは内定時に案内しておくべきでしたね。申し訳ない。
REALITYはAWSではなくGCPをクラウドインフラとして使っていて、サーバサイドではプログラミング言語としてPHPではなく主にGoを、ということだけはこのオンボーディング中に覚えておいてください。
そして現在のREALITYはエンジニアが全分野あわせて50人程度の規模になっています。
これはちょっと大きめに感じるかもしれませんが目指す世界やアプリ規模を考えるとまだまだ足りないという状況なので大規模アプリ開発経験として結構おもしろいと思います!
開発の様子
REALITYはまだまだもっと大きなサービスになってほしいし、世界中の人に使ってもらうために不足している機能がいっぱいあります。
開発としては、新規機能の開発や、既存機能の機能追加改修の割合が大きめで、これから長く付き合っていくこととなるものが主です。
なのでコードを書くときは設計をちょっと意識しておく必要があります。ハッカソン的なコード、よりは後から他の人が理解しやすいコードが好まれます。
どの機能を追加していくか、などはトップダウン型で降りてくることが多いですがボトムアップの提案を意識的に採用するための施策がいくつかあります。これはまた追々と説明しますね。
機能開発はPMが要件をConfluence(Atlassian社のWikiツールです)にまとめて、デザインチームがUIをfigmaに起こすことになっています。
なのでガイドがある状態でエンジニアは開発に集中する、という感じです。
さっきもお話ししたようにエンジニアが30人を超えて1個のサービスを作る関係上、ガイドを定めないと崩壊してしまうのでPMの層が厚いのもこの会社の特徴かもしれません。
もしAさんがデザイン面にも興味があったり、技術要件から関わりたい場合は、仕様検討の相談から積極的に参加することで実現できます。
とは言え、まずは入社直後なので、仕様が固まってる軽めの開発案件を僕と一緒にやっていきましょうか。
勤務の様子
世間の情勢があって臨機応変な勤務が多いですが、現時点では週1〜2程度の物理出社と自宅でのリモートワークを組み合わせる人が多いようです。
顔を合わせてやると捗る相談もあるので社会情勢を見つつ出社する人がいたり、フルリモートの人もいます。
なので自宅の椅子やコーヒーにこだわるのはおすすめです。
リモート時はVPNがあるので、スマホに2要素認証アプリを入れておいてくださいね。
お昼休憩のタイミングは自由なので、かわりにAさんが休憩中かどうかがわかるようにSlackに休憩に行く時と戻る時は書いてくださいね。
出社時の難点として六本木ヒルズ周辺はご飯が高いという事があります。
僕もめちゃくちゃ困っているのですがちょっと歩くと安価なラーメンやケバブ、あるいは敷地内のマクドナルドなどもあるのでうまく使っていきましょう。そして最寄りのコンビニは建物内にナチュラルローソンがあるので、ここを利用しておやつを買うのもおすすめです。
コードを書く様子
話が前後してしまいましたが、今のREALITYはクライアントアプリだけでも
iOS, Androidのネイティブで作られたライブ配信のUI部分
Unityで作られたライブ配信中の画面
Unityで作られたアバターカスタマイズ
Unityで作られた配信中に遊べるゲーム
Unityで作られたアバタービデオチャット
という幾つかの要素がまとまったアプリになっています。
これら全てを経験している経験者なんてこの世のどこにもいない気がします。
Unityチームもみんなそれぞれ自分の得意分野を持ちつつ、手が足りないときは他の分野の開発もやる、と言う仕組みで開発しています。
Aさんは趣味や前職でどんな得意分野を持っていました?ぜひREALITYのみんなを得意分野で導いてくださいね。
開発について言うと、実機で確認するビルドがiOS, Androidのネイティブも組み合わせたビルドになります。なのでUnityEditorだけじゃなくてAndroid StudioやXcodeについても実機確認時に触ることになります。
もしまったくAndroid StudioやXcodeを触ったことなくてもビルド手順のドキュメントはあるので最初はそれを見つつ環境構築してみましょう。
場合によってはiOS, Androidのネイティブ部分との連携などでSwiftとKotlinのコードを読む機会もあるかもしれませんが、キャッチアップをお手伝いするので気負わずにまずは今週中を目安に手元の環境を実機で動かせるように環境構築してみましょう。
REALITYアプリのUIについては、ネイティブ側で描画しているUIと、Unity側でuGUIを用いて描画しているUIがあります。
ただ、UnityEditor上でもひととおりの動作確認ができるように、ネイティブ側のUIの代わりを担うデバッグ機能は付いてるので開発イテレーション速度は保てています。
Unityの定番ライブラリとしてDIにはZenject, イベント駆動部にUniRx, 非同期処理にUniTaskを使っています。
アプリ内、Viewまわりのアーキテクチャについては基本的にMVPパターンになっており、ZenjectはGameObjectInstallerまでは使わずにシーンインストーラーでServiceをBindingして使う、という控えめな使い方になっています。
もしこれらを全然聞いたことない場合は既存のソースを読んで勉強しても良いし以下のような技術書もあるので必要を感じたら手にとってください。
ZenjectチョットワカルBook https://booth.pm/ja/items/1520608
UniRx/UniTask完全理解 より高度なUnity C#プログラミング https://www.amazon.co.jp/dp/4048930753
また、毎月継続的にイベントがあったりアバターの衣装追加があったりするので、ソーシャルゲームの運用に近いAssetBundle運用や、ライブ配信中のゲームに使うミニゲーム部では普通のゲームに近い知識があるとキャッチアップが早いかもしれません。
書いたコードは本線に合流する前に必ずGitHub上でプルリクを出して1名以上のコードレビューを受けます。
もちろんコードを書いている途中で困った事があったらSlackや通話で相談できますし、最初のうちは僕たちの方から様子を聞きにいくようにします。
コードレビューは設計についてと、後から他の人がメンテしやすいかの点をチェックするので最初の内はレビューの指摘とフィードバックの対応が大変かもしれませんが、かくいう僕も横着なコードを書いてめちゃくちゃフィードバックで指摘されたりするので慣れていきましょう。
またAさんもコードレビュー時には自分の全力を使ってレビューをしてくださいね。
最後に
以上でREALITYのUnityチームのオンボーディングは終わりです。今からサーバチームやネイティブアプリチームなど各チームからも同じようなオンボーディングを受けにいきましょう!
エンジニアとしてのオンボーディングは終わりですがREALITYの3つのバリューはご存じですか?
この3つのバリューの項目はREALITYの仲間として過ごす上で常に気にしてもらえると嬉しいです。
https://reality.inc/jobs/
最初にしゃべったようにチームはみんな親切ですが、同じようにAさんはREALITYのメンバーとして親切な人であってください。困ってる同僚がい
たら手を差し伸べる人であってください。「仕事、ユーザー、同僚を愛する。」というビジョンが該当します。
Aさんには親切であるのと同じくらい好奇心と積極性を期待しています。エンジニアとしての好奇心や積極性を存分に発揮して、チームやプロダクトを基準以上に引き上げる意思を持ってくれることを期待しています。「事業成長にこだわる。」と言っても良いかもしれません。
そしてドメイン知識の不足や未知の技術があることは一切恥じないでください。全てを完璧に備えた人はこの世に存在しないし、REALITY社にとってAさんの力が必要だから入社をお願いしたのです。メタバースを作るという壮大な目標に向けてAさんに助けてもらうことは山ほどありますし、その中でAさんは会社の誰も出来るかわからない機能も開発することになると思います。「終わりなき挑戦を楽しむ。」という気持ちをもって楽しく挑戦していきましょう。
Aさん以外のあなたへ
Aさんのオンボーディングは無事終わりましたが、僕たちはあなたのオンボーディングもしたいです。こちらにあなたのための窓口があります。よろしくお願いします。
今回のオンボーディングをしたUnityチームはこちら
会社全体はこちら
そして他の会社やチームの仮想オンボーディングも読んでみたい…!