モバイルゲームクライアント開発のテクニカルディレクターなどを最近やっている須藤 崇浩 | 面白法人カヤックと言います。
こちらは面白法人グループ Advent Calendar 2022 の24日目の記事です。
明日はクリスマスですね。クリスマス翌日に売れ残って割引されたスイーツを買って美味しい思いをするのが好きです 🎂
本記事では表題に関して、昨年から参加しているモバイルゲーム開発案件で立ち上げから試行錯誤してる事について書いていきます。
「何故か開発後半でコードが複雑になってメンテナンスしづらくなる」「人間に書かせるべきでは無いのではないか?」..などコードの品質について悩んだ経験のある方に多少なりとも参考になる内容になれば幸いです。
大雑把に以下の理由でレビュワー2人体制で進めてます。
また、後述する様に開発時期によってレビュワー選定の基準がありました。
この時期には品質のブレを少なくした方が「チームとして良いとされるコード」がシステム全体に行き渡り、チーム全体でのイメージを固めるまでの速度が早いのでレビュワーを少数に限定してます。
そもそも初期は人数も少ない場合が殆どなので基本的に相互レビューする様な関係になるしか無いんですが。
ちなみにこれについて少し脱線して解説します。
良いコードは一般的なイメージとしてもある程度固まっている印象がありますが、その上で一緒にコードを書いていくチームの上限にあたる実力に沿った形で議論→合意を繰り返して固めていくものだと思っています。
なので、「一般的に良いとされるコード」と「チームとして良いとされるコード」は一応分別して書いてます。
でも長いので、以降は「良いコード」に省略させていただきます。
開発日数が積み重なりチームの練度が上がってきたらレビュワーの選定基準を変えてます。
状況に応じて以下の様な役割と目的を分類してレビュワーをアサインしています。
開発している途中で人の入れ替わりがあったり、開発体制を拡大するためにエンジニアを増員する事があります。
基本的には新人の経験やスキルによりますが、2ヶ月くらいの間はOJTの対象として迎え入れています。
気をつけている点は以下です。
参考になる実装を提示しながら実装方法について解説してます。
システム全体の理解度が他メンバーに比べて低い状態なので、コードレビュー時の議論や指摘を抑えるための対策で実装に入る前に以下を確認しています。
(コードレビューはレビュイーとレビュワーのシステム理解度や実力にギャップが大きい程マージまで時間がかかると思っているので)
私のチームはUnityを使っている案件なのでみんなで同じRider: JetBrainsのクロスプラットフォーム.NET IDEを使うという方針があります。
理由としては以下になります。
制限させる事によってインデントやスペースなどのスタイルが担当者によって左右されなくなるので、文章としてのコードが読みやすくなる恩恵があります。
私のチームではEditorConfigファイルを共有してそれを各自のIDEに導入しています。
設定にコーディングルール違反などの漏れパターンがあったら更新してチームメンバーに再共有されます。
EditorConfigは各テキストエディターに幅広くサポートされてるので、Rider以外を絶対に使いたい方が居ても一応許容できる体制にはしています(RiderはUnityに対するサポートが手厚いので強く推奨してますが)
先程も触れましたが基本新人が慣れるまでの期間を2ヶ月くらいと見て、少なくともその間にまた新人をチームに入れないようにしています。
割れ窓理論というものがあり、システムの中で一部でも品質の低いとみなされるコードがあってそれが見れる状態にあると、たまたまそれを参考にしたりした人が他のシステムにもその品質を流用されてしまい低い品質が広がってしまう可能性があると思うので気をつけています。
また、最大人数にも気をつけています。
開発する製品の規模や種類にもよりますが、一般的なモバイルゲーム開発においてクライアントエンジニアは10人以下になるのが理想だと肌感で思っています。
同じシステムを触る人間が10人を超えると人力では品質保証が難しく、静的解析やアーキテクチャの制限度合いを上げるなどの対策をしなければいけないと思っているので。
(何か自動化の余地があったり、期間で動くものを作らなければいけないスケジュールの場合....などの問題があることが多いと勝手に思ってます。)
大人数での開発について考える事自体は楽しいですが、可能ならやらずに済むのが楽だと思ってるし、製品規模やスケジュールに適した体制やアーキテクチャや品質目標を採用すべきだと思っています。
過去に2案件程で試したのですが、コスパを考えると割にあわない経験をしたので個人的に諦めてます。(周りでもっと成功事例が増えれば再挑戦したいです)
理由としては以下がありました。
ここまでお読み頂きありがとうございました。
こういった事柄に関する知見はプロジェクトや環境によって異なる解決(≒正解)があるのと、つい外向けに出すと綺麗事を並べたり事実をボカしてしまうので難しいのですが、なるべくそのままの状況をお伝えしました。
もし宜しければ「私はそう思わない」「うちはこうしてる」...など感想をTwitterやブクマでシェア頂けると嬉しいです!!
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。