Steamworks ドキュメンテーション
Steamへのアップロード
以下は、Steamにコンテンツを提供するためのValveのツール、SteamPipeの使い方の説明です。 ゲームをアップデートするためのベストプラクティスの詳細については、こちらゲームのアップデート - ベストプラクティスをご覧ください。

SteamPipeコンテンツシステムの概説

SteamPipeは、Steamのゲーム/アプリケーションコンテンツシステムです。 SteamPipeは、次のような機能を備えています:
  • 効率的かつ迅速なコンテンツ配信
  • パブリックブランチと、複数のビルドのテストを可能にする、プライベートの「ベータ」ブランチ
  • ウェブベースによるシンプルなビルド管理 - 数クリックで、新規ビルドのリリースまたは以前のビルドへのロールバックを実行
  • ライブ設定前にビルドのアップデートサイズを確認
  • 複数のアプリケーション間でのコンテンツを共有
  • パブリックまたはベータコンテンツから インストーラーディスクを構築
  • アップデートのダウンロードの開始後も、ゲーム/アプリをオフラインで使用可能
  • すべてのコンテンツを常に暗号化し、アクティブでないバージョンは顧客からは見えません
  • 開発中に使用可能なSteamPipeローカルコンテンツサーバー
注: SteamPipeにはいくつかの重要な概念がありますので、先に進む前に アプリケーション の内容を理解しておいてください。 個々がどのように組み合わさるのかについて、基本概念を理解しておくだけでも、製品を Steam にアップロードする際には非常に役立ちます。

ゲームのコンテンツ構造-ベストプラクティス


SteamPipeは、ゲームの初回インストール時の効率的なダウンロードと、アップデートのパッチの効率的な適用を目的として設計されました。 一般に、SteamPipeはさまざまなゲームコンテンツ構造に適しています。 しかし、最適化および非効率な状況の回避のために知っておくべき重要な点がいくつかあります。

SteamPipeは、最初に各ファイルを約1メガバイト(MB)のチャンクに分割します。 次に、各チャンクは圧縮および暗号化された後、Steamコンテンツ配信システムにアップロードされます。 それらは、各クライアントによってダウンロードされるまでは、圧縮および暗号化されたままの状態で、ダウンロード後に復号化および展開され、必要なファイルの場所に配置されます。

SteamPipeは、既存のゲームのアップデートを処理する際に、ゲームの以前のビルドに一致するチャンクを検索します。 これにより、理想としては、ファイルの新規または変更部分のみが「新しい」チャンクに変換され、ゲームのアップデートのためにクライアントがダウンロードする必要があるのは、それらの新しいチャンクだけになります。

多くのゲームエンジンは、ゲームアセットの結合に「pack」ファイルを使用しており、より効率的なディスクアクセスを可能にすることでロード時間を短縮しています。 一般に、これはSteamPipeでうまく機能しますが、 一部のpackファイルシステムでは、問題を引き起こす可能性のある機能が使用または有効化されている場合があります。 ほとんどの場合、これらの問題による影響は、アップデートが必要以上に大きくなることです。 また、ローカル ディスクへの大量の入出力を要するため、ダウンロードは高速でもアップデートのプロセスが遅くなる場合があります。

以下は、ゲームでpackファイルを使用する場合の一般的なガイドラインです。

  • アセットの変更がpackファイル内で可能な限り局所的であるようにします
  • packファイル内でのアセットの順序をシャッフルしないようにします
  • packファイルのサイズを制限します
  • アセットは、レベル/レルム/機能ごとに個別のpackファイルにグループ化しておき、アップデートの場合は、既存のファイルを変更するのではなく、新しいpackファイルを追加することを検討してください
  • 各アセットには、元のファイル名、またはファイルやビルドのタイムスタンプ含めないでください

上記の最初のポイントは、ひとつのアセットが変更されたときにファイル内で変更されるバイトの範囲を指しています。 そのアセットのデータがpackファイル内の同じ場所で変更、および/または拡大、縮小されていれば、それが理想的です。 SteamPipeは、アセットデータを含むファイルの部分に対してのみ新しいチャンクを作成します。 ただし、エンジンがアセットデータを見つけられるように、すべてのpackファイルには何らかの目次(TOC)が必要です。 このTOCの構造が、SteamPipeのパッチの効率に大きな影響を与える可能性があります。 ファイルの先頭か末尾付近にTOC、またはTOCツリーが1つあるのが理想的です。 他のアセットがファイル内のバイト位置をシフトする可能性があるため、それらのTOCエントリーも同様に変更されます。 この場合、SteamPipeは、変更されたアセットデータとTOCの変更部分に対して、新しいチャンクを作成します。

しかし、一部のゲーム エンジンでは、TOC情報がファイル全体に分散していることが確認されています。 それだけではなく、絶対バイトオフセット値が使われている場合も確認しています。 この場合、3450バイトのアセットのサイズが8バイト増えると、ファイル内のそれ以降のすべてのアセットのオフセット値も変わります。 各オフセット値はわずか4バイトか8バイトであっても、8バイトへの変更により、SteamPipeは1MBのチャンクを新たに作成することになります。 これにより、packファイル内の小さなアセットをいくつか変更しただけでも、クライアントがアップデートのためにファイル全体の半分以上をダウンロードしなければならないという、深刻な影響が出る可能性があります。 packファイルの構造がこの問題を引き起こしている、またはその疑いがある場合は、できるだけ早くValveの担当者に連絡してください。 トレードオフはありますが、この問題を軽減するのに役立つ代替ビルドアルゴリズムがあります。

さらに、SteamPipeはpackファイル内のアセットの境界を認識しません。 1MB未満のアセットがシャッフルされると、以前に構成されていた1MBのチャンクがファイル内に存在しなくなるため、この並べ替えを検出できない可能性が高くなります。 そのため、ゲームのアップデートを作成する過程で、packファイル内のアセットを並べ替えることによってロード時間を最適化したい場合は、そのアップデートのダウンロードが非常に大きくなる可能性があることに注意してください。 これは、パフォーマンスが大幅に向上する場合にのみ行うことを推奨します。

次に、クライアントデバイスでpackファイルを更新するために、SteamPipeは古いバージョンと並行して新しいバージョンをビルドします。 新しいファイルがすべてビルドされると、古いファイルを削除して新しいファイルを移動することにより、更新を「コミット」します。 これは、25GBのpackファイルを更新する場合、SteamPipeは常に新しい25GBのファイルを作成することを意味します。 更新でそのファイルに10バイトの変更しか必要ない場合でも、SteamPipeは古いファイルから新しいファイルに25GBのほぼ全体をコピーする必要があります。 クライアントストレージハードウェアによっては、これは非常に遅いプロセスになる場合があります。 そのため、次の2つを推奨します。

第一に、packファイルのサイズを制限します。 ゲームをロードするときに効率的にディスクを読み込むには、おそらく1~2ギガバイト(GB)で十分です。

第二に、1つのpackファイル内のアセットの範囲はかなり制限する必要があります。 1つのゲームレベルやアンロック可能な機能に制限してください。 こうすることで、ゲームの特定の部分に対するアップデートによって、他の部分のデータがクライアントマシン上にコピーされることがなくなります。 さらに、新しい機能やレベルなどを追加する場合は、それらの変更を新しいpackファイルに配置することもでき、おそらくそうすべきでしょう。 このアップデートをダウンロードするクライアントは、packファイルの修正に関する上記のような問題を回避しつつ、新しいファイルを単に一度だけダウンロードします。

疑問がある場合は、Beyond Compareなどのローカルバイナリ差分ツールを使用して、packファイルのバージョンを比較できます。 表示されている差分が、変更されたアセットに対して予想されるサイズであり、ファイル全体に数十または数百の小さな変更として分散していないことを確認します。 予期しない結果が表示された場合は、packファイルツールの設定を確認してください。

圧縮:Steamはアップロード/保存/ダウンロードのためにすべてのデータを圧縮するため、通常、packファイルに一般的な圧縮を使用することはお勧めしません。 ただし、ゲームのディスク上のサイズが気になる場合は、packファイルの圧縮をお勧めします。 上記が満たされている限り、SteamPipeで問題なく動作します。 特に、可能な限り圧縮がアセットごとに行われるようにする必要があります。 アセットの境界を越えた圧縮では、変更が分散されるため、クライアントでは必要以上のデータのダウンロードが必要になります。

暗号化:これは圧縮に似ています。ほとんどの場合は不要であり、上記と同じリスクがあります。

以上のルールに従えば、パッチのサイズを最小化でき、新コンテンツのみがダウンロードされるようになります。 こうすることで、顧客の満足度が高まり、また、より頻繁にアップデートを出すことが可能なため製品の質を高めることができます。

ゲームパッケージングがSteamPipeのアップデート処理とうまく作用していないように思われる場合、Valveまで連絡してください。これを支援するさらに高度な機能の有効化を検討します。

Steamworksビデオチュートリアル-SteamPipeでのゲームの構築

このチュートリアルでは、Steam用のサンプルアプリケーションの構築を通じてSteamPipeとその使い方の手順を解説します。
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Steamworksビデオチュートリアル-新しいプラットフォームと言語の追加

このチュートリアルでは、アプリにデポを追加することで、ゲームに新しいプラットフォームや言語を追加する手順を解説します。
https://www.youtube.com/watch?v=PShS32hcing

SteamPipeの技術概説

SteamPipeはHTTPプロトコルを使用してコンテンツを配信します。 ダウンロードは通常のWebトラフィックを使って行われるため、顧客とSteamサーバーの間にサードパーティーHTTPキャッシュがある場合、ダウンロードスピードは向上します。 コンテンツを弊社のコンテンツネットワークに追加できる外部CDNプロバイダーにホストさせることもできます。 ほとんどの顧客のファイアウォールはHTTPトラフィックを許可し、ダウンロードをブロックすることはありません。

SteamPipeには、既存のコンテンツファイルの修正部分だけを変更する、バイナリ差分に基づく効率的なパッチアルゴリズムが搭載されています。 コンテンツがアップデートされると、こうした差分のみが送信されます。 こうすることで、開発者とユーザーによる転送量を少なく抑え、転送時間も短くすることができます。 ほとんどのパートナーは、プライベートブランチ上でビルドを効率よくパッチできるため、SteamPipeローカルコンテンツサーバーは不要だと感じています。

Steamのビルドアカウント

Steam上でビルドを作成可能になるにはまず、「アプリのメタデータの編集」および「アプリの変更をSteamに公開」という権限を持つSteamアカウントをパートナーアカウントに追加してください。 セキュリティ上の理由から、これらの権限だけがある専用のビルドアカウントを使用することを推奨します。必要に応じて、https://store.steampowered.com/joinで新しいSteamアカウントを作成してください。

Steamworksアカウントの管理者であれば、Steamアカウントを追加し、必要な権限を付与することができます。 このプロセスについての詳細は、Steamworksアカウントの管理を参照してください。 以下は、追加するアカウントの例です:

create_build_account.png

新規SteamPipeアプリの初期設定

以下のステップに従い、新規SteamPipeアプリを設定します:
  1. アプリケーションのAppIDを検索 (Steamworks内のホームページでアプリケーションを選択すると、見つけられます)
  2. アプリの一般的なインストール設定ページを開きます
  3. 1つ以上の起動オプションを定義します(ゲーム起動に必要なパスと任意の引数)。 (?) にマウスオーバーすることで各フィールドの情報が得られます。

    以下の例は5つの起動オプションです。Windows用に2例、macOS用に2例、Linux用に1例です。
    3つ目の起動オプションは、ユーザーが特定のDLCを所有している場合にのみWindowsで表示されます。

    updatedlaunchoptions_3.png
  4. デポページにアクセスして、このアプリに必要なデポを追加します。初期設定で、デポがすでにアプリケーションに設定済みの場合があります。
    1. 初期設定のデポをクリックし、デポの名前を(「ベースコンテンツ」または「Windowsコンテンツ」などの)的確で覚えやすいものに変更します。
    2. 言語固有のデポでない場合、言語設定は「すべての言語」のままにします。
    3. OS固有のデポでない場合、OS設定は「全OS」のままにしておいてください(オールインワンアプリ、PC、またはMacの場合、「全OS」のままにしておいてください)。 OS固有のゲームのデポに対してのみ設定します。
    4. 新しいデポを追加するをクリックして、追加のデポを指定します。
    5. 変更を保存するをクリックして、変更点を保存します。
  5. デポの定義が完了したら、公開ページから変更を公開します。
  6. 自分に所有権を与えるには、新規に定義されたデポをパッケージ内に格納してください。 Steam上の各ゲームには、パブリッシャーグループ内のメンバーアカウントに自動付与されるDeveloper Compパッケージがあります。
    新しいデポを関連アプリ&DLCページ上の、パッケージ(または、これらのデポを持つ他のパッケージ)に追加することができます。
注: 実行可能ファイルが、メインインストールフォルダーのサブフォルダーにある場合は、実行可能ファイルフィールドにサブフォルダー名を追加します。 スラッシュやドットを先頭に使用しないでください。
プラットフォーム注記: 上述のとおり、macOSアプリケーションはアプリバンドル(Game.app)またはスクリプト/バイナリ(Game.app/Contents/MacOS/Game)のいずれかを指定することで起動できます。 一般的に、可能な場合にはアプリバンドル形式が好まれます。これは、Steam外から手動で起動されたのと同じようにmacOSが起動パラメーターをより正確に決定できるためです。

Appleシリコンデバイスのアプリバンドルを通して起動されるアプリケーションは、アプリケーションで利用可能な最高のアーキテクチャを起動するのに対し、バイナリの直接起動は、Steamプロセスと同じアーキテクチャ(現時点ではx86_64)を使用することにご留意ください。

SteamPipeアップロードのためのSDKの設定

ビルドをアップロードするマシンに最新バージョンのSteamworks SDKをダウンロードして解凍します。

SteamPipeツールは、2つの関連するサブディレクトリを含むtoolsフォルダー内のSDK内にあります。

ContentBuilderディレクトリは、ゲームコンテンツとSteamPipeビルドツールがある場所です。 このディレクトリには、次のサブディレクトリがあります:
  • builder-デフォルトでは、コマンドラインバージョンのSteamであるsteamcmd.exeのみを含みます。
  • builder_linux-Linuxバージョンのsteamcmdです。
  • builder_osx-macOSバージョンのsteamcmdです。
  • content-デポを構築するすべてのゲームファイルを含みます。
  • output-ビルドログ、チャンクキャッシュ、中間アウトプットが保存されます。 注:このフォルダーは、いつでも削除または空にすることができますが、削除してしまうと、次のアップロードにかかる時間が長くなります。
  • scripts-ゲームのデポを構築するための全ビルドスクリプトを配置する場所です。
steampipebuilddir.png

ビルドシステムをブートストラップするために、プラットフォームのビルダーフォルダーでsteamcmd.exeを必ず一回直接実行してください。 デポを構築するのに必要な全ファイルが、ビルダーディレクトリに作成されます。

ContentServerディレクトリには、専用のSteamPipeローカルコンテンツサーバーを実行するツールが含まれています。

macOS用SteamCmd

macOSでSteamCmdを有効にするには以下の手順に従ってください:
  1. ターミナルから\tools\ContentBuilder\builder_osxフォルダーを参照します
  2. chmod +x steamcmdを実行します
  3. 「bash ./steamcmd.sh」と入力します
  4. SteamCmdが実行されて最新のビルドにアップデートされSteamCmdプロンプトが表示されます
  5. 「exit」と入力してからreturnキーを押してプロンプトを終了します
その後、このドキュメントの以下の手順に従えば(必要に応じてパスの変更が必要です)、コンテンツをSteamにアップロードするためのデポとアプリ設定ファイルを作成できます。

SteamPipeビルド設定ファイルの作成

SteamPipeでアプリ用にファイルをアップロードするには、ビルドと含まれる各デポを記述するスクリプトを作成する必要があります。 以下のスクリプトの例は、Steamworks SDKのTools\ContentBuilder\scriptsフォルダーにあります。

SteamPipe GUIツール

Windowsで実行していて、構成ファイルの作成とビルドのアップロードに役立つGUIツールが必要な場合は、Steamworks SDKのtoolsフォルダー内のSteamPipeGUIを使用できます。 zipファイルには、使用方法に関する追加インストラクションが含まれています。

GUIツールを使用する場合は、SteamPipeシステムの仕組みをさらに理解するために、以下のセクションを読むことをお勧めします。

簡単なビルドスクリプト


最も基本的なビルドスクリプトから始めてみましょう。 この例では、ゲーム(AppID 1000)に1つのデポ(DepotID 1001)があり、コンテンツフォルダーとサブフォルダーからすべてのファイルをアップロードします。 そのために必要なビルドスクリプトは1つだけです。SDKに含まれる「simple_app_build.vdf」を見てみましょう。

"AppBuild" { "AppID" "1000" // あなたのAppID "Desc" "This is a simple build script" // このビルドの内部的な説明 "ContentRoot" "..\content\" // このファイルの場所からの相対的なコンテンツのルートフォルダー "BuildOutput" "..\output\" // ビルドログとビルドキャッシュファイル用のビルド出力フォルダー "Depots" { "1001" // あなたのDepotID { "FileMapping" { "LocalPath" "*" // contentrootフォルダーのすべてのファイル "DepotPath" "." // デポのルートにマップされます "recursive" "1" // すべてのサブフォルダーを含めます } } } }

適宜ゲームに合ったAppIDとDepotIDに変更してください。 ビルドを開始するには、steamcmdを実行し、いくつかのパラメーターを渡す必要があります:
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

注: ビルドの初回実行時には、Steamガードに阻まれる場合があります。 Steamガードによってログインが失敗した場合は、Steamガードコードを確認し、steamcmdを次のように実行して再試行してください:steamcmd.exe "set_steam_guard_code <code>"。 Steamガードでログインに成功すると、sentryファイルによって、正規のログインであることが確認されます。

頻繁に再イメージされるマシンまたは仮想マシンからsteamcmdを使用している場合、イメージ内にconfig ファイルを含めることでSteamガードが毎回プロンプトされないようにすることができます。 configファイルは<Steam>\config\config.vdf 内に位置します。

SteamPipeビルドプロセスでは以下の手順が発生します:
  1. Steamcmd.exeは自身を最新版に更新します。
  2. Steamcmd.exeは、指定されたビルダーのSteamアカウントを使用してSteamバックエンドにログインします。
  3. アプリビルドの開始がMDS(マスターデポサーバー)に登録されます。それにより、ユーザーがこのアプリを修正するのに必要な権限があることを確認します。
  4. コンテンツフォルダーのファイルとデポビルドの設定ファイルで定義されたフィルタールールに基づき、アプリビルド内の各デポのファイルリストが生成されます。
  5. 各ファイルはスキャンされ、約1MBのチャンクに分割されます。 デポが以前に構築されていた場合、この分割プロセスでは、変更のないチャンクはできるだけそのまま維持されます。
  6. 新しいファイルのチャンクは圧縮され、暗号化されてからMDSにアップロードされます。
  7. このデポバージョンの最終マニフェストが生成されます。各マニフェストは一意の64ビットのマニフェストIDで識別されます。
  8. デポがすべて処理されると、MDSはこのアプリビルドの処理を終了し、グローバルビルドIDを割り当てます。
  9. 構築が完了すると、ビルドの出力先フォルダーに*.csm、と*.csdファイルができることがあります。 これらは一時ファイルですので削除することも可能ですが、これらがあるとその後のビルド時間が短縮できます。


ビルドが完了すると、アプリのビルドページに表示されます(この例では、https://partner.steamgames.com/apps/builds/1000 )。 そこでは、デフォルトブランチ、または任意のベータブランチのために構築したビルドをライブに設定することができ、数分で、ユーザーがこのアップデートをダウンロードできるようになります。

高度なビルドスクリプト


アプリに、複雑なファイルマッピングルールを持つデポが多数ある場合は、アプリのビルドスクリプトによって参照されるデポごとのデポビルドスクリプトを作成できます。 まず、アプリのビルドスクリプトで使用可能なパラメーターを見てみましょう:

  • AppID -ゲームのAppID。 アップロードを行うSteamパートナーアカウントには「アプリのメタデータ編集」権限が必要です。
  • Desc -説明は、アプリ管理パネルの「ビルド」セクションでのみ表示されます。 これはビルドをアップロードした後、「ビルド」ページでいつでも変更できます。
  • ContentRoot -ゲームファイルのルートフォルダーです。絶対パスまたはビルドスクリプトファイルからの相対パスを指定できます。
  • BuildOutput -このディレクトリは、ビルドログ、デポマニフェスト、チャンクキャッシュ、および中間出力の保存先です。 最適なパフォーマンスを得るには、ビルドの出力に別のディスクを使用します。 これにより、ディスクへの入出力処理の負荷が分散され、コンテンツのルートディスクが読み取り要求を処理し、出力ディスクが書き込み要求を処理できるようになります。
  • Preview -このタイプのビルドは、ログとファイルマニフェストのみをビルドの出力フォルダーに出力します。 プレビュービルドの作成は、アップロードスクリプトの反復処理やファイルマッピング、フィルター、およびプロパティが意図したとおりに機能していることを確認するのに良い方法です。
  • Local -これをSteamPipeローカルコンテンツサーバー(LCS)のhtdocsパスに設定します。 LCSビルドはコンテンツをあなたのHTTPサーバーにのみ配置するので、Steamクライアントを使用してゲームのインストールテストをすることができます。
  • SetLive -ビルドが成功した場合に、自動的にライブに設定されるベータブランチ名。空白の場合は設定されません。 「default」ブランチは自動的にライブに設定できないことに注意してください。 アプリ管理パネルから設定する必要があります。
  • Depots-このセクションには、各デポのすべてのファイルマッピング、フィルター、ファイルプロパティか、またはデポごとの個々のスクリプトファイルへの参照が含まれます。

すべてのオプションを使用しているアプリビルドスクリプト例「app_build_1000.vdf」
"AppBuild" { "AppID" "1000" // あなたのAppID "Desc" "Your build description here" // このビルドの内部的な説明 "Preview" "1" // プレビュービルドのみに設定し、何もアップロードしません "Local" "..\..\ContentServer\htdocs" // コンテンツをSteamにアップロードせず、ローカルコンテンツサーバーに配置します "SetLive" "AlphaTest" // このビルドをベータブランチでライブに設定します "ContentRoot" "..\content\" // このスクリプトファイルからの相対的なコンテンツのルートフォルダー "BuildOutput" "D:\build_output\" // 最適なパフォーマンスを得るために、ビルドキャッシュとログファイルを別のドライブに置きます "Depots" { // 各デポのファイルマッピング情報は、別のスクリプト内にあります "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

このアプリビルドスクリプトは、すべてのファイルマッピングとファイルプロパティを指定する2つのデポビルドスクリプトファイルを参照します。 以下の設定がデポビルドスクリプトで利用できます(アプリビルドスクリプトにセクションが直接含まれている場合も同様に利用できます)。

  • DepotID -このセクションのDepotID
  • ContentRoot -オプションで、デポごとにアプリビルドスクリプトからContentRootフォルダーを上書きします。
  • FileMapping -これにより、単一のファイルまたは一連のファイルがローカルコンテンツルートからデポにマップされます。 デポにファイルを追加する複数のファイルマッピングが考えられます。 LocalPathパラメーターは、コンテンツルートフォルダーへの相対パスであり「?」や「*」などのワイルドカードを含めることができます。 再帰検索が有効の場合は、サブフォルダー内の一致するファイルにも適用されます。 DepotPathパラメーターは、選択したファイルのデポ内での場所を指定します(特別なマッピング指定がない場合は「.」のみを使用します)
  • FileExclusion -マップされたファイルを再度除外します。「?」や「*」などのワイルドカードを含めることができます。
  • InstallScript -ファイルをインストールスクリプトとしてマークし、ビルドプロセス中にファイルに署名します。 Steamクライアントは、このデポをマウントするすべてのアプリケーションに対して署名を行う必要があることを認識しています。
  • FileProperties -特別なフラグでファイルをマークします:
    • userconfig-このファイルは、ユーザーまたはゲームによって変更されます。 これはアップデートにより上書きされず、ファイルの前のバージョンと異なる場合でも照合エラーを起こすことはありません。
    • versionedconfig-userconfigに似ていますが、デポ内のファイルがアップデートされた場合、ユーザーのゲームがアップデートされるときにローカルファイルを上書きします。 デポ内のファイルのアップデートは、フォーマット変更やバグ修正など必要があるときのみにしてください。

すべてのオプションを使用しているデポビルドスクリプト例depot_build_1002.vdf
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // アプリビルドスクリプトからContentRootを上書きします "FileMapping" { // 「.\bin」内のすべてのソースファイルとフォルダーは、デポ内の「.\executables」フォルダーにマップされます "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // すべてのサブフォルダーを含めます } "FileMapping" { // \\audio内のオーディオファイルをドイツ語版で上書きする "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // ドイツ語版のインストールスクリプトをデポルートフォルダーにコピーします "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // このファイルを除外します "FileExclusion" "*.pdb" // あらゆる場所のすべての.PDBファイルを除外します "FileExclusion" "bin\tools*" // bin\tools\以下のすべてのファイルを除外します "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // このファイルは実行時に変更されます } }

注: これらのスクリプトには任意の名前を付けることができますが、一貫性を保つためにapp_build_<AppID>depot_build_<DepotID>という名前を使用しています。 このマシン上で複数のアプリ用のデポを構築する予定がある場合には、各アプリケーションのビルドスクリプトを整理しやすくするため、各アプリケーション用のスクリプトディレクトリにサブディレクトリを作成することをおすすめします。

アップデートの管理

顧客へのアプリのリリース後、顧客はデフォルトビルドとマークされたビルドを受け取ることになります。 新しいビルドをアップロードするときは、顧客に一般公開する前にテストすることをお勧めします。テストに関する詳細は、Steam上でのテストを参照してください。

ビルドの問題のデバッグ

ビルドがうまくいかなかった場合にエラー情報を探すには、ビルドスクリプトが実行されたコンソールではなく、出力ディレクトリを見てください。 ほとんどのエラー情報は、*.logファイル内に見つかります。
Steamクライアントコマンドとクライアントサイドのファイルを使って問題のデバッグができます:
  • "app_status [appid]"-クライアント上の現在のアプリの状態を表示。
  • "app_info_print [appid]"-このゲームの現在のSteamworks設定(デポ、起動オプションなど)を表示。
  • "app_config_print [appid]"-このゲームの現在のユーザー設定(現在の言語、インストールディレクトリなど)を表示。
  • file "logs\content_log.txt"-ログに記録されたすべてのSteamPipe操作とエラーを表示。
  • file "steamapps\appmanifest_[appid].acf"-このアプリの現在のインストール状況を表示(KeyValuesフォーマット)。

リテール版インストールディスクの構築

SteamPipeゲーム用にリテール版インストールディスクを構築するには、ビルド用のプロジェクトファイルを最初に設定する必要があります。
この例では、SKUファイルには「sku_goldmaster.txt」という名前が付けられています:
"sku" { "name" "Test Game Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
留意点:
  • リテール版ディスクのイメージを書き込む新しいフォルダーを作成してください。例:「D:\retail_disks」 このincluded_depotsセクション内のデポのみが追加され、除外セクションはなくなります。
  • -devと-consoleコマンドラインパラメーターと一緒にSteam.exeを使用するか、steamcmd.exeを使用して、インストーラーイメージを作成してください。 いずれの場合も、「build_installer」コマンドを使用してください。
  • リテールディスクに収録する予定のゲームと全デポを所有するSteamアカウントでログインします。 それ以外は、アカウントに特別な権限は必要なく、誰でもビルドインストーラーディスクを作成できます。
  • Steam.exeを使用する場合、その他すべてのダウンロードは終了してください。
  • コンソールページで、build_installerコマンドを実行します:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    すべてのデポが再ダウンロードされるため、初回はビルドに時間がかかることがあります。
  • ローカルコンテンツサーバーを使用してゴールドマスターをビルドするには、次を実行します:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    「リテール版インストールディスク」とローカルのゲームのバックアップは基本的に同じなので、出力されたものは「バックアップ」を参照します。
  • 「Backup finished for AppID...」という表示が出れば、インストールディスクのイメージの完成です。 バックアップビルドの詳細については、logs\backup_log.txtを参照してください。
  • 「disk_size\mb」で指定したとおり、「D:\retail_disks」内に新しいフォルダー(Disk_1、Disk_2 など)が作成され、それぞれは640 MB以下の大きさになります。 各ディスクフォルダーに、それぞれのデポ用の「sku.sis」ファイルと.csdおよび.csmが作成されます。 より大きなデポの場合は、複数のディスクに収録されることになります。 すべてのリテール版インストールディスクのコンテンツは、ローカルのゲームバックアップファイルとは異なり、常に暗号化されます。 SDK GM設定ファイル(setup.exe, setup.iniなど)を最初のディスクのフォルダーにコピーすると、リテール版ディスクのインストーラーが完成します。
  • macOS用のGMを作成する場合には、必ず、Mac上でgoldmaster/disk_assets/SteamRetailInstaller.dmgイメージを開くようにしてください。 そして、その中にあるアプリをあなたのメディアのルートにコピーします。 また、インストーラーを見分けやすくするために、インストールアプリの名前の変更や、アイコンのブランド化、ウィンドウの装飾をお勧めします。
  • macOS用のマルチディスクGMを作成する場合は、各ディスクのボリューム名を一致させてください。 ボリューム名はマウントパスの一部となるため、名前が一致しない場合、インストーラーが次のディスクを見つけることができません。

任意でベータブランチからリテールインストーラーを構築する

上記のプロセスにより、デフォルトブランチに基づいて、リテール版インストーラーが作成されます。 ベータブランチに基づいたインストーラーを作成する必要がある場合、まずは 「baseline」と名付けたベータブランチを作る必要があります。 そして、次のコマンドを使用してbaselineブランチからビルドを作成します。
build_installer <project file> <target folder> <beta key> <beta pwd> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login user_name password +build_installer "..\Build\GameDataSku.txt" c:\destination beta_key beta_password +exit

リテール版インストーラーからDLCをインストールする

場合によっては、DLCパッケージを含むリテール版インストーラーを作成したいかもしれません。 その際は、インストーラーの作成プロセスを少し変更するだけで作成できます。
「sku_goldmaster.txt」内の「included_depots」セクションの下にDLCのAppIDを追加します。 「build_installer」プロセスを実行したら、インストーラー用に作成されたsku.sisファイルを見つけ、テキストエディターで開きます。
DLCのAppIDを「apps」セクションに追加します。 たとえば、AppIDが1000でDLCのAppIDが1010の場合には、次のように 「app」セクションを調整します:
"apps" { "0" "1000" "1" "1010" }
これによりSteamはDLCの所有を確認し、ログイン済みでDLCを所有していないアカウントに対してはキーを入力するためのプロンプトを開きます。

複数のApp ID用のリテール版インストーラーを単一ディスク/インストールパッケージ上に作成する

複数のSteam Pipeアプリを含むGMを作成するには、 各アプリのインストーラーを1つずつ構築し、それぞれを同一の出力フォルダーに指定してください。 各ビルドは既存のインストールイメージと統合されます。

リテール版インストールディスクのカスタマイズ

リテール版インストールディスクのカスタマイズに関する詳細についてはゴールドマスターのカスタマイズを参照してください。

リリース前のゲームのプリロード

デフォルトでは、すべてのコンテンツは、すべてのリテールディスクとコンテンツサーバー上で必ず暗号化されています。 ゲームをプリロードモードに切り替えると、所有者はコンテンツをダウンロードできますが、コンテンツはユーザーのディスク上で暗号化されたままであり、プレイできません。 ゲームが正式にリリースされると、Steamはプリロードされたコンテンツを復号化し、ユーザーはゲームをプレイすることができるようになります。

次の場合に、ゲームをプリロードモードに切り替えることを推奨します:
  • ゲームが実際に利用可能になる前に、製品キー付きでリテールディスクを出荷する場合(ゼロデイ著作権侵害)。
  • 予約購入ゲームで、ファイルサイズが20GBを超える場合。

あなたのゲームでプリロードが必要だとお考えの場合は、Steamパブリッシングへチケットを提出してください。

DLCの構築

DLCはベースゲームのデポとして構築されます。 詳細はダウンロードコンテンツ (DLC)を参照してください。

SteamPipeのトラブルシューティング

steamcmd経由でログインする際に「Login Failure: Account Login Denied Failed」と表示される

原因:おそらくSteamガードがログインを妨げています。 解決方法:
  • ログインしようとしているアカウントに登録したメールアドレスをチェックして、Steamサポートからのメールを探してください。 メールのコードをコピーします。
  • 次のSteamCMDを実行します:set_steam_guard_code <code>
  • SteamCMDからもう一度ログインしてください:Steam>login <buildaccount> <password>

ダウンロードの問題の一般的なトラブルシューティング

  • コンピューター、モデム、ルーターなどを再起動する。
  • ファイアウォールの設定を確認する。 新システムはport 80(HTTP)とその他すべてのSteamポートを必要とします。必要なポートの一覧はこちらを参照してください。
  • 一時的にローカルのウイルス対策、スパムブロックプログラムを無効にする。
  • Steamクライアント内の設定->ダウンロード地域を確認する。 お住まいの地域と一致させてください。
  • ダウンロードを中止して、アンインストールして再度ゲームをインストールする(マニフェストキャッシュを消去します)。
  • Steamを終了し、Steamインストールフォルダー内のappcacheとdepotchacheという2つのフォルダーを消去する。
  • Steamダウンロード地域をどこか遠い場所に設定する。 これは近くのコンテンツサーバーが破損したデータを提供している場合に有効です。

Mac/Linuxビルドがファイルをインストールしないのは 何故でしょうか。

Steam経由で複数のプラットフォームにわたるゲームやアプリケーションのインストールをテストしようとしている場合、SteamPipeプロセスがMac/Linuxデポをアップロードするように設定されているにもかかわらず、Windows用のビルドのファイルが展開し、Mac/Linux用のファイルが展開しないことがあります。 見落としがちな手順に、展開するパッケージへの代替デポの追加があります。 次のステップで、パッケージに含まれているデポを確認できます:
  1. ゲームのアプリ管理ページを開きます。
  2. 「関連アイテム表示」セクションで、「関連する全てのパッケージ、DLC、体験版、ツール」をクリックします。
  3. ダウンロードしようとしているパッケージのタイトルをクリックします。
  4. 含まれるデポセクションを確認します。
  5. デポの追加/削除ボタンを使って、パッケージに正しいデポが割り当てられていることを確認します。
掲示板に多くの役立つ情報が掲載されています:

steamcmd.exeを実行すると、次のエラーが表示されます:「SteamUpdater:Steamの更新にはインターネットにアクセスする必要があります。 ネットワーク接続をご確認のうえ、もう一度お試しください。」

解決策:インターネットオプション->接続->LANの設定を開き自動的に設定を検出するをチェックしてください。

アプリのビルドを実行すると、以下のエラーが表示されます:「ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6.」

考えられる原因:
  • アカウント上にアプリに対する権限がない。
    • app_build.vdf内のappIDが正しいことを確認します。
    • ビルドアカウントにそのappIDにおける適切な権限があることを確認します。
  • SteamCMDがデポコンテンツを見つけられない。
    • app_buildapp_buildスクリプト内のcontentrootの値が、スクリプトファイルの位置に対して有効なパスであることを確認します。
    • depot_buildスクリプト内のLocalPathの値が、app_buildスクリプト内パスの位置に対して有効なパスであることを確認します。 パスに実際のコンテンツが含まれていることを確認します。

アプリのビルドを実行すると、以下のエラーが表示されます:「ERROR! Failed to get application info for app NNNNN (check login and subscription)」

これは、ビルドが存在しないか、アプリへのアクセスがユーザーに付与されていないため、Steamがアプリ情報を取得できないことを意味します。
  • NNNNNがアプリ用に割り当てられたappIDであることを確認します。
  • app_build.vdf内のappIDが正しいことを確認します。
  • 新規のappIDの場合、Steamworksにおけるアプリ管理の設定が公開済みであることを確認します。 新規アプリでは、インストールタブ内でSteam Pipeインストールディレクトリ、Steam Pipeタブ内にデポ、公開タブにすべての変更が存在しているはずです。
  • 以上すべて問題なければ、アカウントがappIDを所有していることを確認してください。

起動時に次のエラーが表示されます:「[AppName]のインストール中にエラーが発生しました」

考えられる原因:
  • インストールしようとしているブランチ上に、ライブのビルドがない。
    解決策:https://partner.steamgames.com/apps/builds/<YourGameAppId> にアクセスしてビルドをライブに設定し、Steamクライアントでそのブランチを選択します(詳細はこちら)。
  • ゲームの起動オプションが無効
    解決策:ゲームの管理ページhttps://partner.steamgames.com/apps/config/<YourGameAppId> から、インストールタブ>インストール全般を選択し、起動オプションを確認します。
  • ゲームを構成するデポIDを所有していない。
    解決策:必要なデポが開発用のサブスクリプションに追加されていることを確認する(詳細はパッケージの編集を参照してください)。

起動時に「Error code 15」が表示されます

これは、CEGサーバーがCEGに出されたexeリクエストを拒否していることを意味します。 ゲームページでリリース状況を確認してください。 「リリース済」ではない場合、リリース状況を上書きするSteamキーをリクエストする必要があります。

起動時に「Steamサーバーが混みあっているため、あなたのリクエストを処理することができません。
Error Code (2)」と表示されます

CEGサーバーがマッチするCEG exeを見つけられないことを意味します。 アプリ管理>セキュリティタブ>CEGで、実施可能なCEG exeがあることを確認してください。ステータスボタンを使って、設定が正しいことを確認してください。

SteamCMDコマンドが何なのか、またはどのように使うかを思い出せません。

SteamCMDで「find」コマンドを使用して、SteamCMDコマンドを検索できます。 コマンド名を部分的にマッチングさせ、コマンドの構文リストを作成できます。
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>