

株式会社ハル研究所の中野宏晃氏は理想の開発環境とはどういうものでしょうという問いかけから講演をスタートさせました。理想の開発環境は作りたいゲームごとに異なり、社内外の要素も含めたチームの構成によって得意不得意があるといいます。その上でカービィチームのチーム構成をパネルに表示し、開発環境づくりで大切にしたことを3つのトピックに集約して説明していきました。



トピック1:ツールに振り回されない開発環境

1つ目のトピックについて中野氏は、ツールを使うことはあくまで手段でありゲーム作りの本質ではないと指摘。ツールを使うことに悪戦苦闘してしまっている状態から脱し、ゲーム制作に集中できる環境にするために、中野氏は3つのキーワード「オペレーションがシンプル」「より短い実行時間」「安心感」を挙げます。
キーワード1:オペレーションがシンプル




中野氏は、この講演ではオペレーションとはデータの編集やコードを書くといったことを指すと前置き、オペレーションをシンプルにすることでゲーム制作に集中することができるようになったと語りました。カービィチームでは内製のランチャーツール「Navits」を使っており、何をするにも「Navits」から始めることを徹底。日常的なオペレーションもミドルウェアのバージョンアップチェックなども「Navits」で行っているそうです。また開発者の作業中の視線を考慮することの重要性についても言及し、大きな視線移動は疲れの原因になることや、視線から離れた位置の情報は見落としがちになるとも指摘しました。この視線移動の削減のために、画面左上にアラート機能を表示したり、アクターの真下にワールドコメントを表示できるようにしたとのこと。また、FratFrameworkでコードの同期を気軽に実行できるような、フレームワーク拡張の簡略化も図っているそうです。
キーワード2:より短い実行時間



続いて中野氏はオペレーションにかかる時間についても言及しました。オペレーションの実行時間が長いとゲーム作りへの集中が途切れてしまったり、イテレーションが回しづらくなりクオリティアップが難しくなってしまうといいます。カービィチームでは、オペレーション時間をより短くするため、ホットリロードを徹底しイテレーションの高速化を実現していると説明しました。内製のマテリアル編集ツールを活用し、ゲーム画面の中にモデルを表示しながらマテリアル編集やサウンドの編集を行えるようにしたとのことです。また、ビルドキャッシュによる不要なビルド時間の削減も行っており、非プログラマでもゲーム作りに集中できるようにしていると述べました。
キーワード3:安心感



3つめのキーワードとして中野氏は安心感を挙げます。チーム開発において自分のミスでチームの作業を止めたり不具合を仕込むことを恐れるあまり、ミスを避けることばかり意識してしまうことも問題であると指摘します。そうならないために、ミスが起こりづらく、また起きてもリカバリーが容易な環境を作ることが肝要だと語ります。これには思い当たる節がある方もおられるのではないでしょうか。カービィチームでは、従来はC++で書いていたそうですが、ミスを誘発しかねないC++特有の繊細な言語性を排除するため、ゲームロジック全体をスクリプト化したそうです。また、作ったものをすぐに見せ合い議論をする事後コードレビューも安心感に貢献しているそうで、コミットされたら他の人は後でレビューを行い修正するようにしたことで、安心感とスピード感を確保していると語りました。
トピック2:マスターアップ直前まで作りこめる開発


ここから登壇者は野下徹也氏に交代し、カービィチームがマスターアップ直前まで作りこむ開発環境についてどのような取り組みを行っているかを語りました。
一般的に開発の作りこみ作業は、要素の出揃った終盤の方が行いやすくなる一方で、デバッグに時間を取られてしまうことも多いといいます。そこでカービィチームは、時間をかけて作り込んでいける開発環境を整えるために、開発環境を効率化しデバッグ時間を減少させるアプローチを行ったと語りました。そのための3つのキーワードが「不具合の発見のしやすさ」「不具合再現のしやすさ」「不具合修正のしやすさ」だといいます。
キーワード1:不具合の発見のしやすさ



不具合を発見しやすくするため、野下氏は画面内警告メッセージを活用しているそうです。画面左上に赤色で警告を表示することで、見逃しや警告の放置が軽減されます。ここでも開発者の視線の移動を軽減する取り組みが見られました。またマップ数が増えると、特定のマップだけに起きるエラーなどは見落としやすくなるため、マップ巡回テストをjenkinsで定期的に行っていると説明しました。併せてCPU/GPU負荷を計測しており、負荷軽減にも役立てているとのこと。他にもHIDロボットを活用することで、シビアなタイミングの同時入力など、人の手では再現しづらい不具合を効率的に発見できているといいます。なお、HIDロボットはスクリプトで記述を行っており、汎用デバッグと特定のデバッグ両方に対応できるロボットなど多様なロボットが存在しているそうです。カービィチームの帰宅時にHIDロボットを起動し、夜間にデバッグを行っているとのことでした。
キーワード2:不具合再現のしやすさ


不具合再現のしやすさについては、再現確認や修正確認に時間を要してしまうことが課題でした。それを解決するために2つの仕組みを用意したとのことです。1つ目の仕組みはヒープの分割。メモリの不具合は再現性が低く、調査に時間を要する上にゲームの進行に致命的な影響を及ぼしてしまうため、厄介な問題だったそうです。メモリの破壊等は、中野氏も述べていたゲームロジックのスクリプト化で改善していましたが、メモリ不足やメモリリーク等の不具合については、再現しやすくかつ発生しづらい仕組みづくりが新たに必要だと考えたとのことです。そのためにヒープの管理を丁寧に行い、メモリ回りの不具合の再現を実現していると語りました。2つ目の仕組みとして、野下氏はフライトレコーダについて触れました。これはプレイ状況を記録&リプレイする仕組みで、不具合の再現のしやすさに貢献しているとのことです。フライトレコーダにはリプレイのために必要な情報が記録されており、開発者間での再現のやり取りに活用されているとのことです。フライトレコーダは映像の記録ではなく、プレイの操作そのものを再現する仕組みであるため、コードを変えて挙動の変化を見ることもできるとのことでした。再現しづらい不具合も簡単に再現することができ、バグ修正にかかる時間を大幅に減らすことができたと野下氏は語りました。
キーワード3:修正のしやすさ


野下氏は、不具合の発見後スムースに修正にはいることができる体制も大切だと述べ、修正しやすくする仕組みとしてエラーレポートを挙げました。このエラーレポートはゲームプレイ中にハングが発生すると自動で起動し、担当者はタイトルと内容を記載し送信するだけでコンソール出力やスクリーンショット、フライトレコーダなどのデータも一緒に送信される仕組みです。また、複数人から似たようなエラーレポートが送信されると、一つのイシューにまとめられるのもポイントだと野下氏は言います。
そして、もう一つの修正のしやすさの仕組みとしてエラーコードページへのジャンプ機能を野下氏は挙げました。前述の警告メッセージをクリックすると不具合の詳細と解決方法が記されたURLにジャンプすることができる機能で、自己解決できるようにするのが目的とのことです。困ったときにすぐ情報が表示できるので、修正のしやすさに貢献しているそうです。
トピック3:職域の壁を越えた開発

最後のトピックでは鶴岡友和氏が登壇し、職域の壁を超えた開発について語りました。カービィチームはプランナーが少ない(チーム全体の10%程度)ため、プランナーの負荷が大きいことが課題だったそうです。その負荷を減らすため、職域を超えて分担する仕組みを創り出したとのことでした。そのために活用しているのが、スクリプトシステムとブレインエディタだそうです。
スクリプトシステム


鶴岡氏は、プログラマーが詳細仕様を補完しながら開発することで、プランナーの仕様作成の負担を下げることができるのではないかと考えたと述べました。しかし、ただワークフローを変更しただけではプログラマの負担が増えてしまうため、ビルド時間の短縮やコーディングのトライアンドエラーをやりやすくするなど工夫していると語りました。内製のスクリプトシステムmint(以下mint)を導入したことで、プログラマの実装速度が向上し生産性も上昇したとのことです。mintはwii時代から開発・使用しており、良く記述する言語仕様についてはC++から大きく外さないように設計しているとのこと。ここでもプログラマがツールに振り回されないように配慮していることがわかりました。mintには静的型チェックを行っており安心感をもってコードを変更できたり、130万行あるプロジェクトを30秒程度でビルドし、ホットリロードにも対応していたり、グルーコード制作も簡略化・自動化するなどの特徴があるそうで、長い時間をかけて進化したmintは『星のカービィ スターアライズ』ではソースコードの70%を占めるまでになったと鶴岡氏は語りました。
ブレインエディタ


ブレインとは雑魚敵やボスの行動パターンを指します。従来は、ブレインの行動パターン変更はプランナーからプログラマに伝えて修正を行っていたそうですが、コードを入力しなくてもプランナーがブレインを編集できるよう、ブロックベースのブレインエディタ「fablic」を開発したそうです。「fablic」の編集結果はmintまたはC#コードとして出力するため、ホットリロードでの結果確認もすぐ行うことができるようになったとのことです。
最後に、中野氏が再度登壇して今回の講演を振り返り、開発環境というとツールや機能に着目しがちだが、実際に開発環境を使うチームの個性に寄り添うことも大切なポイントであり、自分のチームの個性や特徴を再確認することが開発環境改善の糸口になるかもしれないと語り、今日の発表が開発環境の改善に携わる方に役立てば幸いです。と講演を締めくくりました。
カービィチームが目指す理想の開発環境づくりは、チームの個性を見つめることから始まり、どうすればチームの開発力を最大化できるのか、どうすればチームメンバーの意識をゲーム開発に向け続けることができるのかという課題に真摯に向き合いながら行われていました。なお、ハル研究所ではカービィシリーズの新作プロジェクトに向けてスタッフを募集中とのこと。9月5日に基本プレイ無料の『スーパーカービィハンターズ』をリリースしたばかりですが、新作にむけての取り組みが早くも始まっているようです。