SIerとゲーム開発会社、両方の経験から感じた違い

## 初めに

この記事ではSIerとゲーム開発会社に所属して感じた違いについて述べようと思います。
よく見るネット記事のようなSIerはイケてないと言いたいわけではないことをご承知ください。
実際、過去に私がアサインされたゲーム開発のプロジェクトでもイケてない開発手法で進めている現場もありました。
私はSIerではプロジェクトマネージャー、ゲーム開発会社ではサーバーサイドエンジニアの業務に従事してきました。

SIerでは5～10人規模、開発期間は長くて半年のプロジェクトが多かったです。
エンジニア以外の職種は営業チーム、品質管理チーム、セキュリティ診断チームからそれぞれ数人アサインされてました。

ゲーム開発会社では、自社以外の外注先も含め150人程度の規模、開発規模は最大で4年以上のプロジェクトに携わってました。
私は開発最終段階に上記のプロジェクトにアサインされました。

:::note info
あくまで私が経験した範囲内での違いのため、世間一般でこの違いが当てはまるわけではないことをご承知おきください。
:::

## スケジュール管理

### SIer

プロジェクト計画時にタスクを洗い出し、ガントチャートを作成します。
ガントチャート通りに工程が進んだことは一度たりともありません。

### ゲーム開発会社

チケット管理ツールを使ってスクラム開発に取り組んでいました。
スクラムマスターが不在だったのもあり、差し込みタスクがあったのでスクラム運用には課題が残りました。


## ドキュメント作成

### SIer

システムエンジニアをしていたときは、仕様はExcelで作成していました。
後にプロジェクトマネージャーをすることになりましたが、Excelを仕様書にするのが嫌でMarkdown形式で書いてGitで管理していました。

### ゲーム開発会社

ドキュメントを書かないプロジェクトの方が多いと思います。
※SI出身の人がリーダーだとドキュメントを書くこともしばしば。

直近のプロジェクトではWebドキュメントツールを利用してMarkdown形式で発注先のエンジニアとの折衝や、多職種との共有することを目的に仕様を作成していました。

## ソースコードの管理

ソースコードの管理はGitを使ってたところは同じです。
SIerでは、4～5人くらいしかGitのリポジトリにアクセスしませんでしたが、ゲーム開発会社ではGitのリポジトリにアクセスする50人はアクセスしていました。

## エンジニアの担当範囲

### SIer

フロントエンドもサーバーサイド関係なくひとつの機能につき、ひとりのエンジニアが担当しました。
最近はSIerでもフロントエンドとサーバーサイドのエンジニアが分かれるようなプロジェクトも増えてきてました。

### ゲーム開発会社

フロントエンドとサーバーサイドの役割がキッチリ分かれています。
※ゲーム会社ではクライアントプログラマーと呼称されます。

私はサーバーサイドを担当してましたが、
WebAPI、テーブルなどの設計もサーバーサイドエンジニアが担当してます。

## テスト

### SIer

テストコードは求められた場合のみ書く。書かないことの方が多いです。
設計からテストまでエンジニアが担当します。

### ゲーム開発会社

テストコードは必ず書く。
テストが通らないとマージされない。

## プルリクエスト/マージリクエスト

### SIer

複数人が開発していると導入します。
軽く動作確認して、マージします。
コードレビューは滅多にしないです。※不具合があるときは原因箇所を発見するために見ることもあります。
エンジニアが2人くらいしかいないプロジェクトだとdevelopブランチに直プッシュすることもあります。

### ゲーム開発会社

必ずプルリクエスト/マージリクエストを作成します。
何かがあったときに他の職種の方々への影響が大きいため、責任者が承認しないとマージされません。

## リリース後の対応

### SIer
一度、リリースされると機能追加されることは少ない。
顧客の予算都合もありますが、作りっぱなしの状態でシステムが運用されていく。
設計 or 実装がまずい機能でも運用でカバーすることもしばしば。
例えば、スマートフォンアプリもVer1.0.0を初期バージョンストア公開したらプロジェクトは終了。
Apple/Googleから警告メールが届いて、どうしても対応しなければならない状況になった場合のみアプリをアップデートします。
私が所属していた会社は新規案件を取ってくるを優先していました。
そのため保守契約の時間は大体10～20時間くらいでした。
セキュリティパッチを当てるとき、サーバー監視からSlackのメッセージが飛んできたとき、顧客から問い合わせが来たときのみ稼働するような体制を取っていました。

### ゲーム開発会社

アプリ内課金で儲けるビジネスモデルのため、リリースされたあとも継続して機能追加していきます。
運営フェーズに入ると、3~4ヶ月のスパンでアップデートしてユーザーを飽きさせないようにする必要があります。
一度ユーザーが離れると戻ってこないので、離さないようにみんな必死です。
サーバーサイドエンジニアは運用チームと機能追加チームに分かれ、定期的にメンバーを入れ替えるという方針を取ってました。

# 両方を経験したことで広がった視野

両方の経験があることでいちエンジニアとして働いていたときより、ゲーム開発会社へ戻った時に自分の視野が広がっいて、以前より円滑に仕事することができるようになったと感じています。

### SIerを経験して広がったこと

SIerではプログラマー→システムエンジニア→プロジェクトリーダー→プロジェクトマネージャーというキャリアパスが用意されているので、様々なポジションの業務が経験できます。SIerでもスペシャリストになるキャリアパスが用意されている企業もあります。

私は、お客様(ステークホルダー)と直接やりとりすることに苦手意識がありましたが、お客様とやり取りを繰り返したら、やりがいも出てきて、とてもよかったです。
またタスク管理、予算管理、要員管理、顧客管理などプロジェクトの管理業務を通して、プロジェクトの開始から終了までの流れを学べたことは有意義な経験でした。

### ゲーム開発を経験して広がったこと

プロジェクトマネージャーの役割はゲーム開発ではディレクターが担います。
クライアントプログラマーからディレクター、プランナーからディレクターになるキャリアパスは見聞きしたことありますが、その職種でスペシャリストになる方が多いです。

スマートフォンゲームは多くの方に遊んでもらえるので、自分が開発に携わったゲームのイベントでいいリアクションがあると、とてもやりがいを感じました。
また、日々の会議が少なく、多くの時間をタスクの解決や技術調査に割けるのが良いところだと思いました。

# まとめ

色んな項目で比較していきましたが、プログラミングに対する考えの違いが大きいと思います。
SIer時代は設計通りに実装することが重要なので、プログラミングは初心者メンバー/協力会社メンバー/オフショアが担当してました。特に新しいことをしようとしたはいいけど、ノウハウは全部、社外持っていかれてるのではと心配になることもありました。
PL/PMになるとプログラミングをすることはなく、毎日朝から晩まで打ち合わせをすることが多かったです。
ゲーム開発会社では、設計からエンジニアが一括して担当するため、ほぼ全員がプログラミングを担当します。

エンジニアという言葉で一括りにされることが多いですが、業界によって担当する業務は様々です。
スペシャリストを目指すか、ジェネラリストを目指すかは会社によって考え方が違うと思いますが、与えられた環境で精一杯やることから得られることは沢山あったと思います。
※たまに両方できるスーパーエンジニアもいます（笑）