remix-shop-items について
remix-shop-itemsは、Remixプラットフォームのゲーム開発者向けに、ショップアイテムの管理とRemixSDKとの連携を案内するワークフロースキルです。購入状態の扱いも説明します。
主な機能
- 01ゲームIDの確認と再利用
- 02変更前のアイテム一覧表示
- 03アイテムの作成・更新・削除
- 04RemixSDKのショップ連携
- 05購入コールバックとインベントリの処理
活用シーン
- 01ゲームへの消耗品購入の追加
- 02アイテム価格や名前の更新
- 03作成前のアイテム状態の確認
MCP 対応
可能な場合は公式CLIまたはMCPツールチェーンの利用を推奨します。MCP経由で対象アイテムの `iconUrl` を省略すると、`createShopItem` がアイコンを生成できます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ farworld-labs/ remix-skills --skill remix-shop-itemsインストール後、Claude Code で/remix-shop-itemsを入力して読み込まれたか確認します。
詳細
ショップアイテム管理ワークフロー
概要
このスキルでは、Remix プラットフォーム上のゲーム向けに、ショップアイテムを作成、管理、統合する方法を説明します。
前提条件
- ゲームがすでに存在している必要があります。
gameIdはまずタスクコンテキストから再利用し、次に.remix-cli.json、その次に、利用可能であれば従来の.remix-mcp.jsonから取得してください。- 可能な場合は、手書きの HTTP を使うのではなく、公式の CLI または MCP ツールチェーンを使用してください。
手順
1. 既存のゲーム ID を確認する
まず、タスクコンテキストまたは以前のツールの結果を確認してください。それ以外の場合は、現在のディレクトリにある .remix-cli.json または従来の .remix-mcp.json を読み取ります。いずれかのファイルが存在し、gameId が含まれている場合は、その値を使用してください。
どちらのファイルも存在しない場合、またはどちらにも gameId が含まれていない場合に限り、upload-game ワークフローに従って作成してください。
2. ショップアイテムを管理する
すべてのアイテムを一覧表示する
現在のアイテムを必ず最初に一覧表示し、適切な itemId を再利用してスラッグの重複を避け、アイテムがすでに PENDING、ACTIVE、または INACTIVE かどうかを確認してください。
アイテムを作成する
POST https://api.remix.gg/v1/games/{gameId}/items
Authorization: Bearer $REMIX_API_KEY
Content-Type: application/json
{
"name": "Extra Life",
"slug": "extra-life",
"itemType": "CONSUMABLE",
"bitsCost": 50,
"description": "Spend one to restore a life after game over.",
"iconUrl": "https://asset-url.png"
}
itemTypeはCONSUMABLE、ONE_TIME、TIER_UNLOCKのいずれかですCONSUMABLEとONE_TIMEではbitsCostが必須ですTIER_UNLOCKではtierが必須です- 新しいアイテムの状態は
PENDINGです - MCP を使用する場合、
CONSUMABLEまたはONE_TIMEでiconUrlを省略すると、createShopItemによってアイコンを自動生成できます
アイテムを更新する
POST https://api.remix.gg/v1/games/{gameId}/items/{itemId}
Authorization: Bearer $REMIX_API_KEY
Content-Type: application/json
{ "bitsCost": 75, "name": "Extra Life Pack" }
部分的な本文を受け付けます。変更したいフィールドのみを含めてください。
アイテムを削除する
DELETE https://api.remix.gg/v1/games/{gameId}/items/{itemId}
Authorization: Bearer $REMIX_API_KEY
3. ゲームコードにショップアイテムを統合する
RemixSDK のショップ統合をゲームに追加します。
const sdk = window.RemixSDK
await sdk.ready()
function getConsumableBalance(slug, spentKey) {
const purchased = sdk.getItemPurchaseCount(slug)
const spent = Number(sdk.gameState?.[spentKey] || 0)
return Math.max(0, purchased - spent)
}
async function buyExtraLife() {
const result = await sdk.purchase({ item: 'extra-life' })
if (!result.success) showPurchaseError()
}
sdk.onPurchaseComplete(({ success, item }) => {
if (!success || item !== 'extra-life') return
const currentState = sdk.gameState || {}
const spent = Number(currentState.extraLivesSpent || 0)
sdk.singlePlayer.actions.saveGameState({
gameState: {
...currentState,
extraLivesSpent: Math.max(0, spent - 1),
},
})
})
避けるべきパターン
次のことはしないでください。
-
onPurchaseCompleteを待たずにアイテムを付与する。 プレイヤーに何かを付与する前に、必ずコールバックを待ってください。購入は失敗またはキャンセルされる可能性があります。 -
新しいコードで
singlePlayer.actions.purchase(...)を使用する。sdk.purchase({ item: 'slug' })を呼び出してください。 -
購入状況の追跡に
localStorageを使用する。 購入状況はプラットフォームが管理します。hasItem()、getItemPurchaseCount()、inventory、shopItemsを使用してください。 -
価格やアイテムのメタデータをゲームの状態にハードコードする。 アイテムのメタデータはプラットフォームから読み取り、
gameStateには使用回数のカウンターのみを保存してください。
ヒント
- 繰り返し購入できるアイテムには
CONSUMABLE、恒久的なアンロックにはONE_TIME、進行状況に応じたアイテムにはTIER_UNLOCKを使用してください。 sdk.purchase(...)をawaitする場合も、sdk.onPurchaseComplete(...)を実行してください。- ゲームで現在の価格やアイコンのメタデータが必要な場合は、
sdk.getShopItem(slug)またはsdk.shopItemsを使用してください。