はじめに
2009年にWEBエンジニアとしてキャリアをスタートして、気づけば13年もエンジニアを続けてきました。
キャリアの中で一番長い時間を費やしてきたのがゲーム開発です。
ブラウザの簡単なゲームから始まり、モバゲーやGREEのソーシャルゲーム、スマートフォンでプレイするカードゲーム、パズルゲーム、アクションゲームなど、様々なタイトルに携わってきました。
バックエンドエンジニア、フロントエンドエンジニア、Unityエンジニア、リードエンジニア、エンジニアマネージャーなど、一言にエンジニアといっても扱う技術やポジションも様々な経験を積んでいます。
そんな私が、ゲーム開発に携わるエンジニアとして大切にしている価値観を備忘録として残しておきたいと思います。
基本的にはバックエンドエンジニアなので、グラフィックスやUXなどの話は出てきません。 ※ ゲーム開発だけに限らずITエンジニアにも通じるものはあると思います。
ソフトウェアの価値は利用者が決める
ゲームに限らず、社内で利用するツールや、日々の業務を手助けしてくれるツールをつくったりしていますが、全てのソフトウェアの価値は利用者が決めるものだと思っています。
エンジニアは技術を扱いますが、技術が目的になってしまっていることがあります。
- 最新の技術を利用することに価値がある
- 美しくて、高速に処理ができるコードに価値がある
- テストコードのカバレッジが100%なコードに価値がある
例えば、これらの要素をすべて満たしているが、利用者がいないソフトウェアだとしたら...価値があるといえるでしょうか? 少なくとも、ゲーム開発では価値がないと思います。
枯れた技術で、キレイじゃなくて泥臭いコードでも、多くの利用者が楽しめたり、便利だと思えるものの方が価値があると私は思います。
スケジュールと優先順位を意識する
日々様々なタスクがありますが、スケジュールと優先順位をしっかりと意識してやることが重要です。
経験上、ゲーム開発でスケジュールが予定通りに進行することは稀で、だいたいの場合遅れが発生します。
以下は開発の流れの一例です。
- ゲームデザイナーが仕様書を作成する
- ゲームデザイナーが仕様書を関係者に説明する
- アーティストが必要でデザインを行う
- バックエンドエンジニアが必要な実装を行う
- クライアントエンジニアが必要な実装を行う
- ゲームデザイナーがバランス調整を行う
- QA担当者が動作テストを行う
- エンジニアがリリースの準備を行う
- リリース
開発には様々な人が関わり、どこかで遅れが生じると全体にも遅れが生じます。
なので、前後の担当者のスケジュールも意識して、スケジュールを守ることが大切になってきます。
また優先順位に関しても重要です。
エンジニアは開発チーム内で起こる「Unityが起動しない」「Jenkinsが動かない」「ゲームプレイしていたらエラーになった」にようなトラブルへの対応も日々求められます。
また、運営型のゲームの場合、突然エラー発生してしまったりして緊急対応が必要になる場合もあります。
優先順位を意識せずに、トラブルを放置してしまったり、発生しているエラーを放置してしまったりといったことがないように、優先順位を意識することが大切です。
開発スピードと品質のバランス
ソフトウェア開発でよく論争されるのが「スピード VS 品質」です。
トレードオフではないと主張する声もよく聞きますが、たしかにトレードオフではないと考えています。
大前提として両立できるなら両立すべきですが、開発期間が短かったり、どちらも100%満たすのはかなりの力量が必要だったりと、常に実現できるものではありません。
そんなとき、どうするべきか?
私が持っている基準は、プレイヤーの資産に影響するところは品質重視、そうでないところはスピード重視です。
例えば、ショップでアイテムを購入する処理を考えます。
プレイヤーが商品一覧から選択したアイテムと、プレイヤーが所持しているお金を交換する処理になりますが、誤って過剰にお金を消費したり、お金だけ消費してアイテムが手に入らないということはあってはいけないことです。
こういった場合は品質を重視してテストも手厚めに実施します。
例えば、オプションで文字送りの速度を変更する処理を考えます。
プレイヤーが選択した速度にする処理ですが、バグで速度が変更できなかったとしてもプレイヤーの影響はアイテム購入にくらべて軽微なものです。
ゲーム開発では開発終了後にバグがないかQAをするので、大小様々なバグはリリース前に修正されますが、発見されずにリリースされてしまうことは避けることができません。
きちんと品質のことも考え、スピードも両立できるように、常に最適なバランスを意識する必要があります。
工数見積もり-1
仕様書から、開発にかかる時間を工数として見積もりをだすことがあります。
工数の見積もりはとても難しく、日々精度を上げていく努力が必要です。
私は工数見積もりの実践するときは、見積もりを通常通り行い、「工数見積もりした日数より、1日早く終わらせるのを本当の目標」として日々取り組んできました。
継続して達成していくことで、工数の精度を上げられるのは当然ですが、集中力を持続させたり、実装スピードをあげたりなどすることもできています。
相手の立場でコミュニケーション
「エンジニア = デスクに向かってもくもく作業して誰とも関わらない」というイメージを持っている人がいるかも知れませんがそんなことはありません。
ゲーム開発では、ゲームデザイナーと仕様の相談をしたり、エンジニア間で相談やレビューをしたり、エラー対応やQA対応などを行ったり、様々な人とコミュニケーションをする場面が多いです。
事実、コミュニケーションが苦手なエンジニアは一定数おり、コミュニケーションが上手くできるというのは武器になります。
では「コミュニケーションが上手い」とはどういうことでしょうか?
私は「相手の立場でコミュニケーション」できている人はコミュニケーションが上手いなと感じています。
多くの人がやってしまっているのが「技術用語を多用」することです。
ゲームデザイナーやアーティストは技術の知識はないので、技術用語で話されても困ってしまいます。
相手がわかる用語に置き換えて、相手が理解できる言葉でコミュニケーションすることはとても大事なことです。
エンジニアが一番偉いなんてことは全くない
ゲーム開発には多くの人が関わります。
企業によってエンジニアの立ち位置は様々ですが、エンジニアの給料が高い、エンジニアの発言権が強い、エンジニア中心の文化という企業が稀にあります。
昔ながらの老舗ゲームメーカーではプロデューサーやゲームデザイナーが強かったりしますが、ソーシャルゲームから参入したIT企業の場合にエンジニアが強いケースがあります。
ディレクターが最終決定権があるといったことは例外ですが、 基本的に特定の職種が強いなんてことはない方がよく、エンジニアが強いなんてこともありません。
実際にゲームを購入したいとなったときに、エンジニアのプログラム目的で購入する人がどれくらいいるでしょうか?
私自身そうですが、人気シリーズの新作だから、主人公キャラクターのイラストが可愛いから、面白そうなゲーム企画だからというのはゲーム購入の動機になりますが、洗練されたプログラムだからという理由でゲーム購入する人はいないでしょう。
ゲームで表舞台に立つのはプロデューサー、ディレクター、ゲームデザイナー、アーティストが多いです。
でも、実際にゲームが動くのは最終的にはエンジニアがいるからです。
全ての人が協力して完成するのがゲームであり、エンジニアが一番偉いなんてことはありません。
技術を言い訳の材料にしない
ゲーム開発は技術的なチャレンジが多くあります。
時には、目を背けたくなるような難しい課題、難しくはないがとても手間がかかる課題に立ち向かう必要があります。
そういったときに「技術を言い訳にしない」というのはとても重要です。
技術的な懸念がある場合はコミュニケーションをして、リスクをきちんと理解してもらい、その上でリスクを承知でやるのか?別のアプローチを探るのか?といったことを決めていきます。
また、チーム外のエンジニアの意見を聞いたりすることも必要になります。
『難しいのでできません』というのは本当の最終手段であり、代替案を考えたり、別のエンジニアの知識を借りるなどして、安易に技術を言い訳の材料にすべきではありません。
常に快適なゲーム体験を
キャリアのスタートがWEBエンジニアでしたが、当時の新卒研修で教えられた教訓を今でも大事にしています。
「インターネット上のサービスを開発するエンジニアにとって一番大切なことは...利用者が好きなときに利用てきるように、常に正常動作し続けられる品質を保つこと」
これは、インターネットに接続して遊ぶオンラインゲームやソーシャルゲームにも同様のことが言えます。
ゲームをプレイしようとおもったらメンテナンス中でプレイできないとき、プレイヤーはとてもガッカリしますし、ゲーム運営側もできるだけ避けたいことです。
とくにバックエンドエンジニアは大切にすべきことです。
さいごに
ゲーム開発に携わるエンジニアである私が日々大切にしていることをいくつか記載しました。
コンシューマーゲームの開発経験はないので、コンシューマーだと意識する場所が違ったりするケースは大いにあると思いますが、大目にみていただけると嬉しいです。