【29】継続的デリバリー

粉川 貴至

 ゲームを一度作ってリリースすればそこまでだった時代は終わろうとしています。今や、ゲームはサービスとして継続的に提供されていく時代になりつつあります。このようなサービスを提供していく時に必要な考え方と手法として「継続的デリバリー」があります。これは、特に Web アプリケーション開発の分野で発展してきたものです。

 マネジメント的な背景にはアジャイル開発手法、技術的背景には、CI(ContinuousIntegration:継続的インテグレーション)があります。アジャイル開発は開発工程を小さい単位(イテレーション)に区切り、それを繰り返す事で製品を完成に近付けていきます。各イテレーションの最後には成果物を確認し、向かっている方向が正しいかの確認と修正を行います。

 Web アプリケーションではなく、パッケージゲーム開発でも、その中で小さい単位で成果物を出し、マネージャーやテスター、広報担当者などいろんな立場の人を巻き込んで方向修正と作り込みを繰り返す事で、より良い方向に進めていく事ができます。

 継続的デリバリーは、CI をさらに発展させて自動テスト・自動デプロイまで行うものです。最初のステップとして、ソースコードを修正しリポジトリに反映したときに自動でアプリケーションのビルドを行い、正常に結合できる事を確認します。これにより複数人での開発時に他の人との更新衝突や、開発途中の更新によりビルドを壊してしまう事を防ぎます。

 2 番目のステップは、単体テストや静的解析などの品質保証のための仕組みを同時に走らせます。アプリケーションをリリースする為に超えなければならない品質の水準を担保しやすくする仕組みを CI のフローの中に組み込みます。

 そして最後にデプロイ手順を自動化します。デプロイという言葉は、Web アプリケーションをサーバーに展開して実際に動作させる際に多く使われます。開発したものを実際に利用する環境に配置して動作可能な状態にする事です。デプロイ作業を手動で行うと、作業手順と回数が増えるにつれ、作業コストとヒューマンエラーリスクが増えます。デプロイ手順を自動化しておき、いつでも正しくデプロイできる「ワンクリック・デプロイ」環境を整えておくことで、修正が必要になった場合や、利害関係者に開発途中の成果物を見せる必要が出た際にも素早く対応する事ができます。

 ここまでの一連の自動化された手順により継続的デリバリーが実現されます。そうすることで、常に安定した品質のものが動く状態を目指します。理想的には、継続的にどのタイミングでもアプリケーションをリリースする事ができます。

 これらの仕組は CI ツールの登場により一般的になってきました。中でも Jenkins はサーバーの構築・設定の容易さ、可視化された表示のわかり易さ、拡張性の高さなど非常に使い易いツールです。

 CI は、ここ数年でゲームの開発現場でも多く使われるようになってきています。自動でゲームアプリケーションのビルドを行い、最新のゲームイメージがいつでも動く状態を維持することで、品質を向上させようという試みです。

 自動テスト・自動デプロイは、Web アプリケーションと同じ流れで作られているブラウザゲーム開発では既に多くの事例を聞きますが、C++ などを使用するネイティブでのゲーム開発ではまだ標準的なプラクティスが存在しません。ものすごい早さで開発・改善を繰り返し、顧客に価値を提供し続けている Web アプリケーション開発の手法を取り入れて、ゲーム開発の手法も進化していく必要があります。