Steam インベントリサービスでアイテムを配る手順|アイテム定義・ドロップ・ストア
Steam インベントリサービスは、ユーザーやアイテムを管理する特別なサーバーを用意せずに、ゲーム内で永続的なプレイヤーインベントリを有効化できる機能セットです。サーバーレスで使う方法と、ゲームの状態を把握している信頼できるサーバーを追加する方法があります。
インベントリサービスでできること
Steam インベントリサービスは、ユーザーやアイテムを管理する特別なサーバーを用意せずに、ゲーム内で永続的なプレイヤーインベントリを有効化できる機能セットです。インベントリのクエリと操作の API は ISteamInventory にあり、Web API は IInventoryService にあります。
ゲーム内または Web ベースのストアフロントを通じて、個別のアイテムやカート内のアイテムを、インベントリサービスと連動させて販売することもできます。
2つの使い方
インベントリサービスは2つの方法で使用できます。サーバーレスで使う方法と、ゲームの状態を把握している信頼できるサーバーを追加する方法です。
- サーバーレス:ゲームサーバーなしの場合、ゲームクライアントは Steam サービスと直接通信することで、ユーザーインベントリのコンテンツの取得、アイテムの消費と交換、プレイタイムに応じた新規アイテムの受け取りができます。ユーザーはアイテムストアで直接アイテムを購入でき、Steam コミュニティ内でもトレードや取引を行えます。ただし、クライアントは信頼できないため、このスキームではユーザーに特定のアイテムを与えることはできません。その代わり、ドロップできるアイテムを指定して、ドロップの頻度を設定できます。適切なタイミングで、ゲームクライアントが
ISteamInventory::TriggerItemDropを呼び出します。プレイヤーごとのプレイ時間とドロップ頻度は、Steam サーバーが管理します。 - 信頼できるサーバーを追加:信頼できるサーバーがある場合には、そのサーバーに権限を持った Steam API キーを使用して、適切な状況で指定アイテムを与えることができます。
準備の順
- アイテム定義(ItemDefs)を作成してアップロードします。これらの定義はゲーム内で可能なアイテムセットについての記述です。定義をゲームから使用する必要はありませんが、Steam が正しくインベントリを表示するために必要です。ItemDefs の作成には、Steamworks 設定エリア内の「コミュニティ」タブから「インベントリサービス」を開きます。
- アイテム定義をアップロードしたページの「インベントリサービスを有効化」のボックスにチェックを入れて、サービスを有効化します。
- アプリ用のパブリッシャー Web API キーを作成し、Steam エコノミー設定のアセットサーバーキー欄に入力します。
Steam エコノミー設定でアイテムの公開設定が非公開の間、ゲーム内アイテムにアクセス可能なのは Steamworks パートナーグループ内のアカウントのみです。
アイテム定義の項目
type は、次のいずれかです。
item
bundle
generator
playtimegenerator
tag_generator
最後の値は、アイテムインスタンスにタグを適用する特別なアイテム定義です。ほかの値の内容は次のとおりです。
| 値 | 内容 |
|---|---|
item |
プレイヤーのインベントリ内にあるアイテムタイプ |
bundle |
各タイプに関連する quantity(数量)を備えた ItemDef の集合を表します。このアイテムが付与されると bundle プロパティ内に設定された一連のアイテムへと自動的に展開されます。 |
generator |
ランダムアイテムを表します。このアイテムを付与すると、bundle プロパティから1つのアイテムタイプをランダムに選択して、そのタイプのインスタンスを作成します。 |
playtimegenerator |
特別な形式の generator で、アプリケーションからの ISteamInventory::TriggerItemDrop 呼び出しによって付与されます。 |
bundle フィールドは、セミコロン「;」で区切られた一連のアイテムレシピとして表現されます。各レシピは1つの itemdef ID で構成され、任意で「x」セパレーターと必要な数量(整数)が後に続きます。数量が明記されていない場合、デフォルトで「1」が使用されます。たとえば、type: bundle で bundle: 201;202;203 と書くと、itemdef 201、itemdef 202、itemdef 203 をそれぞれ1つずつ付与します。type: generator で bundle: 501x90;502x9;503x1 と書くと、itemdef 501 を90%の確率、itemdef 502 を9%の確率、item 503 を1%の確率でランダムに付与します。
主な項目には、たとえば次のものがあります。
| 項目 | 内容 |
|---|---|
itemdefid |
この ItemDef の ID。ワークショップアイテムでない場合、1,000,000未満かつ2,147,483,647より小さい値である必要があります。 |
name |
アイテムの英語名。 |
description |
アイテムの英語の説明。 |
price |
各通貨ごとに価格を指定します。定義のない通貨は、購入時に自動的に変換されます。 |
marketable |
false / true の値をとり、コミュニティマーケットでこのアイテムを他のユーザーに販売できるかどうかを示します。 |
tradable |
false / true の値をとり、Steam トレーディングでこのアイテムを他のユーザーとトレードできるかどうかを示します。 |
hidden |
false / true の値をとり、true の場合、アイテム定義はクライアントに表示されず、購入できません。使用していない itemdef や、開発中の itemdef を非表示にする際に使用します。 |
アイテムの価格は、price か、プリセットの価格カテゴリーのいずれかの方法で定義できます。両方で定義することはできません。プリセットの価格カテゴリーでは、価格をひとつ定義すると、Valve が管理する価格設定テーブルを使用して、すべての対応通貨で表示されます。
false / true の値をとる項目には、true の場合にそのアイテムをアプリの Steam アイテムストアに表示しなくなるものもあります。デフォルトでは、価格付きのアイテムはすべてストアに表示されます。
アイテムを取得して配る関数
ISteamInventory には、たとえば次の関数があります。
| 関数 | できること |
|---|---|
GetAllItems |
現在のユーザーインベントリ内にある全てのアイテムの取得を開始します。この関数の呼び出しはレート制限の対象となり、頻繁に呼び出されるとキャッシュされた結果を返すことがあります。 |
GenerateItems |
特定のアイテムを現在のユーザーに付与します(開発者のみ使用)。この API はプロトタイプ専用で、ゲームのパブリッシャーグループに属する Steam アカウントでのみ使用可能です。 |
TriggerItemDrop |
ユーザーが十分な時間をプレイした場合、アイテムドロップを発生させます。dropListDefinition は「playtimegenerator」型の itemdefid を参照する必要があります。 |
ConsumeItem |
ユーザーのインベントリからアイテムを消費します。指定されたアイテムの数量がゼロになると、永久に削除されます。一旦アイテムが削除されると回復できません。 |
ExchangeItems |
他のアイテムのセットと引き換えに 1 個のアイテムを付与します。 |
ISteamInventory::GetAllItems を呼び出すと、ゲームクライアントがユーザーのインベントリをダウンロードします。ISteamInventory::GenerateItems を使うと、開発目的で現在のプレイヤーに特定のアイテムを追加できます。
ExchangeItems の交換レシピ
ExchangeItems で付与できるアイテムは、itemdef 内に「exchange」属性が必要です。exchange 属性は、このアイテムに対して交換が有効なレシピのセットを指定します。交換レシピはインベントリサービスによって細かく検証され、供給された素材がレシピと一致しない場合や、十分な数量が含まれていない場合、交換は失敗します。
exchange は、セミコロンで区切られた1つ以上のレシピのセットとして指定します。各レシピには、コンマ区切りの必須の素材アイテムを書きます。必須の素材は、タグまたは itemdefid で明確に示されます。数量が指定されない場合、1が想定されます。
例:exchange: 101x1,102x1;103x5;104x3,105x3 では、次のいずれかの場合に交換が許可されます。#101 と #102 を1個ずつ、#103 を5個、#104 と #105 をそれぞれ3個ずつ。
API では現在、生成するアイテムの配列を使用しますが、この時点での配列のサイズは 1 である必要があり、新規アイテムの数量も 1 でなければなりません。
プレイ時間ドロップ
プレイ時間アイテムドロップ機能により、Steam サーバーでユーザーのプレイ時間に応じたアイテムドロップの追跡、管理が可能になります。ドロップを実行するには、「playtimegenerator」タイプのアイテムを作成する必要があります。
プレイ時間による付与は、アプリケーションによって制御されます。ユーザーのプレイ時間のみに基づいた自動的な付与に対するサポートはありません。プレイ時間は付与に必要な条件であり、アプリケーションが付与検証のトリガーです。
TriggerItemDrop は、通常、ゲームやレベル、またはマッチの終了時や、アイテムドロップが発生する可能性がある等のゲーム内の重要なポイントで呼び出します。playtime generator 設定の単位は分であり、それよりも頻繁に呼び出すことは有用ではなく、Steam クライアントではレート制限が適用されます。Steam サーバーは、頻繁なドロップを防止するために、プレイ時間の計算を行います。また、サーバーは、プレイヤーのインベントリへのアイテムの追加も管理します。
アイテムドロップの頻度はアプリケーションレベルで、コミュニティ>インベントリサービス>プレイ時間でのアイテム付与のセクションから制御できます。コントロールは、アイテムがドロップするまでの時間・一定期間内のアイテムドロップの数・次のアイテムドロップが可能になるまでのクールダウン期間の長さです。同じコントロールが itemdef ごとにも存在し、アイテムに対して設定した値は、指定のアイテムに対するアプリケーションのあらゆる設定をオーバーライドします。
ドロップに関わる項目には、たとえば次のものがあります。
drop_interval 整数。アイテムがユーザーに付与されるのに必要なプレイ時間(分単位)。
use_drop_limit false / true。true の場合、drop_limit に応じて TriggerItemDrop によるアイテムの付与を制限する。
drop_limit 整数。TriggerItemDrop により特定のユーザーに対してこのアイテムがドロップする回数を制限する。ゼロに設定すると、以降このアイテムがドロップしなくなる。
use_drop_window false / true。true の場合、この itemdef に drop_window を使用する。
drop_window 整数。アイテムを付与するまでのクールダウン期間の分単位での経過時間。
drop_max_per_window 整数。期間内のクールダウンの適用までに許可される付与数。既定値は1。各期間の最大数は10。
設定の例です。プレイ時間が30分経過後のドロップを1日1回に制限するには、次のように書きます。
"drop_interval" : 30, "use_drop_window" : "true", "drop_window" : "1440"
90分以上プレイするユーザーに対し、1日あたり3つのアイテムを取得させるには、次のように書きます。このプレイ時間は連続している必要はありません。
"drop_interval" : 30, "use_drop_window" : "true", "drop_window" : "1440", "drop_max_per_window" : "3"
特定の itemdef 設定が見つからない場合は、アプリケーションで定義された設定がデフォルト値になります。
アイテムを売る
マイクロトランザクション(課金)サポートを追加するには、itemdefs 内で価格を定義します。価格を定義すると、アイテムは次の方法で購入できるようになります。
- カスタマイズ可能な Web ベースのアイテムストアを使用する
- 専用のゲーム内アイテムストアを実装する
- シンプルな Steam 購入用 Web UI を使用する(
https://store.steampowered.com/buyitem/:appid/:itemdefid/にリンクする)
Web のアイテムストア
Steam アイテムストアは、Steam インベントリサービスで定義されたアイテムを販売するために、Steam がホストするカスタマイズ可能な Web ストアです。顧客は、利用可能なゲーム用アイテムを閲覧、フィルター、検索して、ストア内でカートに追加し、Steam ウォレットを使って購入できます。
有効化するには、まず機能する Steam インベントリサービスを実装する必要があります。インベントリサービスを設定し、アイテム価格の定義をひとつでも済ませた時点で、アプリケーション用の Steam アイテムストアを有効化できます。アプリの「ストアページを編集」セクションに移動して「アイテムストア」タブを選択し、ボックスにチェックを入れてアイテムストアを有効化します。ゲームでサービスが有効化されると、Steam オーバーレイを起動し、アイテムストアページの URL を渡すことで、ゲーム内からアイテムストアページを開くことができます。
アイテムストアのテストについては、次のとおりです。
- アイテムストアはデフォルトでは、Steamworks パートナーのメンバーにのみ表示されます。
- 購入はマイクロトランザクション「sandbox」を介して実行され、ユーザーの Steam ウォレットから引かれることはありません。
- リリース前の場合、アイテムストアの URL に「beta=1」パラメーターを使用する必要があります(例:
https://store.steampowered.com/itemstore/<appid>/?beta=1)。 - アイテム定義に価格が設定されていない場合、アイテムが表示されません。
- アプリがリリース済みで、アプリのストア管理からアイテムストアを手動でライブに設定した場合にのみ、アイテムストアは全員に見えるようになります。
ゲーム内のストア
専用のゲーム内アイテムストアを実装する場合の流れです。
ISteamInventory::RequestPricesを呼び出して、ユーザーの現地通貨と価格を取得します。呼び出し結果のSteamInventoryRequestPricesResult_tは、ユーザーの現地支払通貨コードで返されます。ISteamInventory::GetItemPrice、またはISteamInventory::GetNumItemsWithPricesとISteamInventory::GetItemsWithPricesによって返された価格を表示します。- ユーザーが購入したいアイテムの定義と
ISteamInventory::StartPurchaseを呼び出します。ユーザーは、Steam オーバーレイ内で使用通貨での購入を完了し、必要に応じて Steam ウォレットにチャージするよう指示されます。 SteamInventoryResultReady_tコールバックを処理して、ユーザーが購入または獲得したアイテムを提供します。ユーザーが取引を承認し購入を完了すると、このコールバックがトリガーされ、その後ユーザーが購入した新しいアイテムを取得できます。
ワークショップのアイテムの販売については、Steam ワークショップに対応する手順にあります。マイクロトランザクションの API の流れは、Steam でゲーム内の購入を作る手順にあります。
情報源
- Steamworks — Steamインベントリサービス(2つの使い方・実装の概要・アイテムの販売)https://partner.steamgames.com/doc/features/inventory?l=japanese確認日 2026-10-21
- Steamworks — Steamインベントリスキーマ(アイテムのタイプ・ItemDefのプロパティ・価格の設定・プレイ時間アイテムドロップ)https://partner.steamgames.com/doc/features/inventory/schema?l=japanese確認日 2026-10-21
- Steamworks — Steamインベントリアイテムストア(セットアップ・アイテムストアのテスト)https://partner.steamgames.com/doc/features/inventory/itemstore?l=japanese確認日 2026-10-21
- Steamworks — ISteamInventory インターフェイス(GetAllItems・GenerateItems・TriggerItemDrop・ConsumeItem・ExchangeItems・RequestPrices・StartPurchase)https://partner.steamgames.com/doc/api/ISteamInventory?l=japanese確認日 2026-10-21