ゲームのインストールと保守

ソフトウェア デザイン エンジニア、Dave Bartolomeo 著

Microsoft Corporation

2003 年 7 月

この記事では、ゲームのインストール時間に関するユーザーの不満を軽減し、サポートへの不要な問い合わせをなくし、ユーザーができるだけ早く簡単にゲームのプレイを始められるようにするための一連のベスト プラクティスについて説明します。

この記事は、「最初のインストール」および「インストール後のゲーム プレイ」の 2 つのパートに分かれています。

最初のインストール

ユーザーがゲームを購入するのは、プレイを楽しむためであって、インストールを楽しむためではありません。エンド ユーザーにとって、ゲームのインストールは、できるだけ時間がかからず、かつわかりやすく簡単であることが必要です。理想を言えば、エンド ユーザーがインストール UI を操作することなく、ゲーム ディスクをトレイに入れるだけでプレイを開始できるようにすることが望まれます。

インストール UI の簡素化

既存のゲームのインストール UI には、望ましいエンド ユーザーの体験を妨げる共通の要素があります。

  • ユーザーに不必要な質問をする。

    たとえば、DirectX をインストールするかどうかをユーザーに尋ねるゲームが少なくありません。ゲームの実行に Microsoft DirectX が必要であり、適切なバージョンの DirectX がまだインストールされていない場合は、ゲームで自動的に DirectX をインストールするようにします。

  • ユーザーに大多数のユーザーが同じように回答する質問をする。

    一般のユーザーにとって、インストール パスやスタート メニューでの場所などは既定の設定で問題ありません。既定の設定の変更を希望するユーザーのために、詳細オプションを用意しておきます。

インストール UI は、一般的なユーザーができるだけ早くゲームのプレイを開始できるように設計する必要があります。ユーザーのコンピューターで自動実行が有効になっている場合 (既定の設定) は、ユーザーが不要な質問を飛ばしてできるだけ早くゲームをプレイしたいと考えていると想定してセットアップ プログラムを進めます。セットアップ プログラムでは、できれば「オン デマンド インストール」で説明するようなセットアップを使用して、既定のインストール パスにゲームをインストールする必要があります。インストールを自動的に開始する前に、ユーザーがインストールの設定を変更できるようにしておくのは適切です。ただしその場合は、ユーザーがキーを押すことで詳細なセットアップ オプションを選択できるようにして、5 ~ 10 秒以内にキーが押されなかった場合は自動的に既定のオプションを設定して処理を進めるようにします。

ユーザーのコンピューターで自動実行が有効になっていない場合は、セットアップ プログラムでゲームのインストールが自動的に開始されることをユーザーが望んでいないと想定してセットアップ プログラムを進めます。セットアップ プログラムが自動実行以外の手段で起動された場合は、詳細なセットアップ UI を表示するようにします。

インストールに要する時間の短縮

最近の Microsoft Windows ゲームのほとんどは、インストール プロセスに 5 分から 30 分の時間を要します。その一方で、コンソール ゲームのほとんどは、ユーザーがゲーム CD を挿入してからゲームをプレイできるようになるまでに 30 秒以上かかりません。この違いは、Windows ゲームのほとんどが、そのコンテンツの全部ではありませんがほとんどをコンピューターのハード ドライブから実行するように設計されているという事実によるものです。コンソールでは、大量のコンテンツを永続的に格納する領域がないために、コンテンツをソース メディアから実行する必要があります。コンテンツをローカル ハード ドライブからロードするとゲーム内でのロード時間は短縮されますが、マイナス面として、コンテンツ全体をどこかの時点でソース メディアからハード ドライブにコピーしなければなりません。ほとんどの Windows ゲームは、インストール プロセスの中でコンテンツ全体を一括してハード ドライブにコピーする方法を選択しています。この場合、ユーザーはゲームをプレイできるようになるまで数分間も進行状況バーを眺めることになり、ゲームでの最初の体験が損なわれます。

ゲームの最初のインストールにかかる時間を最小限に抑えるための方法が 2 つあります。最小インストールとオン デマンド インストールです。

最小インストール

最小インストールのシナリオでは、ゲームのコンテンツの最小限のセットのみがハード ドライブにインストールされます。通常、このセットはゲームの実行可能ファイルと DLL だけで構成されます。残りのコンテンツは、ソース メディアから直接アクセスします。ゲームの実行可能ファイルが 10 ~ 20 MB を超えることはまれなので、この方法によりインストールに要する時間が大幅に短縮されます。欠点は、低速なソース メディアからロードしなければならないために、ゲーム内でのコンテンツのロードにかかる時間が長くなることです。

Windows インストーラーベースのセットアップで最小インストール構成を作成するには

  • ハード ドライブにインストールするすべてのコンポーネントを、ローカルにインストールするようにマークされた 1 つの機能にグループ化します。

    この機能は、"ブートストラップ" 機能と呼ばれます。

  • ソース メディアから実行されるすべてのコンポーネントを、"ソースから実行" とマークされた 1 つの機能にグループ化します。

  • ソース メディアにあるファイルを開くときには、ファイルのパスをハード コードするのではなく、MsiGetComponentPath 関数を使用してパスを特定します。

    これにより、ユーザーの CD/DVD ドライブのドライブ文字が変更されてもファイルを見つけられるようになります。

  • CD/DVD 上のコンテンツを圧縮します。

    コンテンツの圧縮解除にかかる CPU 時間は、CD/DVD ドライブからのデータ転送速度が遅いために、通常気付かれることはありません。

  • コンテンツを大きな連続したファイルにグループ化し、シーケンシャルにアクセスします。

    CD/DVD ドライブのシーク タイムはハード ドライブに比べてかなり長く、ほとんどの CD/DVD ドライブは、大きな連続したファイルを読み取る場合を除いて、ピークの転送速度に達することはありません。

  • CD/DVD 上のコンテンツは、アクセスされる可能性の高い順序でレイアウトします。

    ファイルがディスク上のレイアウトと同じ順序でアクセスされると、シーク タイムが大幅に短縮されます。

オン デマンド インストール

オン デマンド インストールのシナリオでは、最小インストールと同様に、ゲームの最初のインストールでゲームの開始に必要なファイルのみがハード ドライブにインストールされます。ただし、残りのコンテンツは必要となるたびにソース メディアからアクセスされるのではなく、個々のコンテンツが最初に必要となった時点で個別にハード ドライブにインストールされ、それ以降は使用されるたびにローカル ハード ドライブからアクセスされるようになります。最初のインストールにかかる時間は最小インストールと同じ程度に短くなり、個々のコンテンツも 2 回目以降のアクセスではロード時間が短くなります。

Windows インストーラー ベースのセットアップでオン デマンド インストール構成を作成するには

  • 最初にハード ドライブにインストールするすべてのコンポーネントを、ローカルにインストールするようにマークされた 1 つの機能にグループ化します。

    これは最小インストールのブートストラップ機能と同じです。

  • 同時に使用される可能性が高いコンポーネントを基準として、残りのコンテンツを複数の機能にグループ化します。

    たとえばレベル ベースのゲームでは、特定のレベルで使用されるすべてのコンテンツを 1 つの機能にグループ化します。Windows インストーラーでは、1 つのコンポーネントを複数の機能で共有できるので、複数のレベルで使用されるコンテンツがある場合は、そのコンテンツを複製することなく必要なすべてのレベルの機能に追加できます。これらの機能はいずれも "アドバタイズ済み" とマークする必要があります。これは、機能が最初にインストールされるのではなく、後から必要に応じてインストールできることを意味します。

  • ファイルが必要となったら、まず MsiQueryFeatureState 関数を使用してそのファイルがインストールされているかどうかをチェックします。

    まだインストールされていない (つまりその状態が INSTALLSTATE_ADVERTISED である) 場合は、MsiConfigureFeature 関数を呼び出して機能をローカルにインストールします。インストールされたファイルを開くときは、MsiGetComponentPath を呼び出してファイルのパスを特定します。この手順は、厳密にはこのシナリオでは不要ですが (コンテンツは使用される前に必ずハード ドライブにインストールされるため)、この手順によってオン デマンド インストールに加えて最小インストールを容易にサポートできるようになります。

  • 可能であれば、すぐに必要となる可能性が高いコンテンツを予測し、アイドル時間にバックグラウンドでインストールします。

    バックグラウンド インストールは、イントロ ムービー、カットシーン、メニューなどを表示している間のように、ゲームがコンピューターの性能をフルに必要としていないときに行うのが適しています。

  • ゲームのオプション メニューに、残りのコンテンツすべてを強制的にインストールするオプションを作成します。

    これを実装するには、すべてのオン デマンド インストール機能の親となる機能を作成し、MsiConfigureFeature を呼び出してこのマスター機能をローカルにインストールします。これにより、サブ機能もローカルにインストールされます。

  • コンテンツのレイアウトは最小インストールの場合と同じようにする必要がありますが、同時に必要となる可能性が高いコンテンツどうしをまとめて配置するようにします (たとえば、同じレベルのすべてのコンテンツを 1 つにまとめます)。

インストール後のゲーム プレイ

自動実行

既にインストールされているゲームをプレイする場合、ユーザーはドライブ トレイにインストール ディスクを入れるだけで済むはずです。ディスク上にある自動実行の実行可能ファイルは、まずゲームがインストールされているかどうかを確認し、インストールされていればゲームを起動します。ゲームが Windows インストーラー ベースのセットアップを使用してインストールされている場合は、MsiQueryProductState 関数を 1 回呼び出すだけでゲームがインストールされているかどうかを確認できます。

オン デマンド インストールによるインストールからフル インストールへの変換

オン デマンド インストールによるインストールでは、フル インストールよりもはるかに早くゲームのプレイを開始できますが、ユーザーが残りのゲーム コンテンツを明示的にローカル ハード ドライブにインストールすることを望む場合もあります。たとえば、ソース メディアなしでゲームをプレイしたい、あるいはコンテンツをオン デマンドでインストールすることでゲーム内でのロード時間が長くなるのを避けたいとユーザーが考えている可能性があります。ゲームのセットアップが Windows インストーラーを使用している場合は、ゲーム内のオプション用 UI に残りのコンテンツのインストールを完了するためのオプションを用意できます。ユーザーがこのオプションを選択すると、ゲームでは MsiConfigureFeature を呼び出して残りの機能を強制的にローカルにインストールします。別のセットアップ アプリケーションを用意する必要はありません。

ゲーム ソフトウェアとコンテンツの保守

Windows ゲームがコンソール ゲームに比べて有利な点の 1 つは、発売元が最初にゲームをリリースした後で比較的簡単にゲームのアップデートをリリースできることです。このアップデートが新しいコンテンツの追加か単なるバグ修正かに関係なく、アップデート プロセスはエンド ユーザーにとってできるだけ簡単なものにすることが重要です。オンライン ゲームでは、アップデート プロセスの重要性がさらに高くなります。一般にオンライン ゲームでは、接続するためにすべてのユーザーが最新バージョンのゲームを実行していなければならないからです。

アップデートの自動チェック

ユーザーが修正プログラムを探さなければならないようであってはなりません。ゲームのアップデートが提供されている場合は、少なくともユーザーに通知するか、理想的には修正プログラムが自動的にダウンロードされるようにします。

ゲームでアップデートを簡単にチェックするには、発売元が運営している Web サーバーに特定の URL で接続し、ゲームの最新バージョンのバージョン番号と、ゲームを最新のバージョンにアップデートするパッケージのダウンロード元 URL が記載されたテキスト ファイルをダウンロードします。

ユーザーがゲームをプレイするたびにアップデートをチェックすることで、ユーザーは確実に最新バージョンを実行することになります。ただし、ユーザーがゲームをプレイしようとする直前に新しいアップデートの存在が検出されると、ユーザーはアップデートのダウンロードが完了するまでゲームをプレイできません。アップデートのサイズが大きい場合や接続が低速である場合は、数時間待たされることもあります。ゲームのプレイ前にユーザーを待たせないために、ゲームでタスク スケジューラを使用して新しいアップデートを定期的にチェックすることができます。アップデートが検出された場合は、ゲームで直ちにアップデートのダウンロードを開始できます。これにより、ユーザーが次にゲームをプレイするときには、アップデートのダウンロードが完了してインストール可能な状態となっているはずです。

修正プログラムの自動ダウンロード

ゲームでは、新しいアップデートが提供されていることを検出したら直ちにアップデートのダウンロードを開始する必要があります。アップデートをチェックするタスクは一般にバックグラウンドで自動的に実行されるので、ダウンロードは可能な限り目立たないように行われなければなりません。バックグラウンド インテリジェント転送サービス (BITS) というオペレーティング システム機能を使用すると、アプリケーションは、アプリケーション自体が実行されていないときでもインターネットからファイルをダウンロードできます。BITS のダウンロード ジョブは、ユーザーがログオンし、かつコンピューターがネットワークに接続されているときにのみ実行されます。BITS 自体がコンピューターを強制的にネットワークに接続することはありません。ユーザーがネットワークとの接続を解除するかログオフすると、BITS ジョブは一時停止され、ユーザーが再びログインしてネットワークに接続するとダウンロードを再開します。アプリケーションでは、ネットワークを使用している他のアプリケーション(オンライン ゲームなど) のパフォーマンスに影響を与えないように、使用されていないネットワーク帯域幅のみを使用するように BITS ジョブを構成できます。BITS は Windows XP と Windows 2000 Service Pack 3 で利用できます。

その他のリソース

この記事で言及しているテクノロジの詳細については、MSDN ライブラリの関連セクションを参照してください。

ゲームに Windows インストーラーを使用する方法の詳細については、来月の Driving DirectX コラム「Introduction to Windows Installer for Game Developers (ゲーム開発者のための Windows インストーラーの概要)」を参照してください。

関連項目

MsiConfigureFeatureMsiQueryProductStateMsiQueryFeatureStateMsiGetComponentPath