mcpField
R
roblox-analytics-liveops

roblox-analytics-liveops

github.com/el4cteoデータ・データベース54471 回インストール2 週間前に更新
リポジトリ

roblox-analytics-liveops について

Roblox 開発者向けの分析・ライブ運用スキルです。サーバー側のイベント記録、実行時設定、実験、バッジ、通知に加え、運用の監視や更新方法を扱います。

主な機能

  1. 01サーバー側の分析イベント記録
  2. 02実行時のエクスペリエンス設定
  3. 03プレイヤー別の実験
  4. 04バッジと通知のワークフロー
  5. 05ライブ運用のスケジュール例
  6. 06リリース後の指標監視

活用シーン

  1. 01経済や進行イベントの計測
  2. 02プレイヤー別のバランス変更テスト
  3. 03シーズンイベントやショップ更新の計画
  4. 04リリース後の定着率と性能の監視

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/el4cteo/roblox-skills --skill roblox-analytics-liveops

インストール後、Claude Code で/roblox-analytics-liveopsを入力して読み込まれたか確認します。

詳細

分析とライブ運用

分析イベント(サーバー側、AnalyticsService)

標準イベントは、クリエイターハブのダッシュボード(経済、ファネル、進行状況、カスタム)に自動的に反映されます。Fire* メソッドは非推奨です。Log* 系のメソッドを使用してください。

--!strict
local AnalyticsService = game:GetService("AnalyticsService")

local Analytics = {}

-- Currency sources and sinks → Economy dashboard.
function Analytics.coinsEarned(player: Player, amount: number, balance: number, source: string)
	AnalyticsService:LogEconomyEvent(
		player,
		Enum.AnalyticsEconomyFlowType.Source,
		"Coins", -- currency type
		amount,
		balance, -- ending balance
		Enum.AnalyticsEconomyTransactionType.Gameplay.Name, -- or a custom string like "QuestReward"
		source -- item SKU / source id
	)
end

function Analytics.itemBought(player: Player, price: number, balance: number, itemSku: string)
	AnalyticsService:LogEconomyEvent(
		player,
		Enum.AnalyticsEconomyFlowType.Sink,
		"Coins",
		price,
		balance,
		Enum.AnalyticsEconomyTransactionType.Shop.Name,
		itemSku
	)
end

-- First-session tutorial funnel (steps must be sequential, 1-based).
function Analytics.onboarding(player: Player, step: number, stepName: string)
	AnalyticsService:LogOnboardingFunnelStepEvent(player, step, stepName)
end

-- Recurring funnels (e.g. shop purchase flow); share a session id per attempt.
function Analytics.shopFunnel(player: Player, sessionId: string, step: number, stepName: string)
	AnalyticsService:LogFunnelStepEvent(player, "ShopPurchase", sessionId, step, stepName)
end

-- Level progression.
function Analytics.levelStarted(player: Player, level: number)
	AnalyticsService:LogProgressionStartEvent(player, "MainPath", level, `Level{level}`)
end
function Analytics.levelCompleted(player: Player, level: number)
	AnalyticsService:LogProgressionCompleteEvent(player, "MainPath", level, `Level{level}`)
end

-- Anything else: numeric custom events, sliced by up to 3 custom fields.
function Analytics.bossKilled(player: Player, bossId: string, seconds: number)
	AnalyticsService:LogCustomEvent(player, "BossKillTime", seconds, {
		[Enum.AnalyticsCustomFieldKeys.CustomField01.Name] = bossId,
	})
end

return Analytics

ガイドライン:

  • 信頼性を確保し、これらの API の要件を満たすため、サーバーからログを記録してください。イベント名とカスタムフィールドの値は、カーディナリティを低く保ってください(自由入力テキストやユーザー ID ではなく、カテゴリの ID を使用します)。
  • 経済イベントでは、正確なendingBalanceが必要です。すべての収入源と支出先をログに記録してください。記録しないとダッシュボードの表示が誤解を招くものになります。
  • 機能を構築する前にファネルを設計してください(オンボーディングの手順、ショップの流れ、初回購入など)。
  • AnalyticsService:GetPlayerSegmentsAsync(player)は、実行時にセグメント情報(課金状況、ゲーム内でのアカウント経過日数など)を返します。オンボーディングやオファーの調整に活用し、pcallで呼び出してください。

エクスペリエンス設定(再公開なしでライブ値を変更)

クリエイターハブ(または Open Cloud)で設定を作成し、残高の数値、機能フラグ、イベントの切り替えなどをサーバー上のConfigServiceで読み取ります。公開した変更は、稼働中のサーバーに反映されます。

--!strict
local ConfigService = game:GetService("ConfigService")

local ok, snapshot = pcall(function()
	return ConfigService:GetConfigAsync()
end)

local function get(key: string, default: any): any
	if not ok then
		return default
	end
	local value = snapshot:GetValue(key)
	return if value == nil then default else value
end

local bossHealth = get("bossHealth", 500)
print("boss health", bossHealth)

if ok then
	snapshot.UpdateAvailable:Connect(function()
		snapshot:Refresh() -- apply newly published values at a safe moment (e.g. between rounds)
		print("new boss health", get("bossHealth", 500))
	end)
end
  • 必ずデフォルト値をコードに設定してください。設定の読み込みに失敗する場合があります。
  • 実験/ターゲット設定はプレイヤーごとに評価されます。ConfigService:GetConfigForPlayerAsync(player)を使用してください(GetConfigAsyncはターゲティングを無視します)。実験期間は14~60日で、最大2つのバリアントと対照群を設定できます。目標指標を選び、最小検出効果を考慮してください。クリエイターハブまたは Open Cloud の実験 API(roblox-open-cloud)で管理できます。早期の悪影響検出では、最初の24時間、プレイ時間、課金者への転換率、ARPUをほぼリアルタイム(5分ごと)で確認できます。悪影響のあるバリアントは早めに停止してください。
  • Studio でのテスト:ConfigService:SetTestingValue(key, value)/ClearTestingValue。

バッジ

BadgeService:AwardBadgeAsync(userId, badgeId)(サーバー側でpcallを使用してください。UserHasBadgeAsyncまたはCheckUserBadgesAsyncですでに所持していると確認できる場合はスキップします)。AwardBadge/UserHasBadgeは非推奨です。バッジはオンボーディングや進行状況の節目に最適で、プレイヤーのプロフィールに表示されます。

エクスペリエンス通知(再エンゲージメント)

  1. 適切なタイミングで、プレイヤーにオプトインを促します。ExperienceNotificationService:CanPromptOptInAsync()の後にPromptOptIn()を呼び出します(クライアント側)。
  2. クリエイターハブで通知文を作成し、Open Cloud のPOST /cloud/v2/users/{userId}/notificationsを使ってバックエンドから送信します(例:「作物が育ちました」、「イベントが始まります」)。通知には送信頻度の制限とモデレーションがあります。プレイヤーにとって価値のある通知を送信してください。

ライブ運用のパターン

  • 期間限定イベント:設定に UTC タイムスタンプ(eventStart、eventEnd)を使ってスケジュールします。サーバー上でos.time()と比較し、属性を使って状態をブロードキャストします。クライアントではworkspace:GetServerTimeNow()を使ってカウントダウンを表示します。
  • シーズンパス/ローテーションショップ:デイリーショップでは、ローテーションシードにmath.floor(os.time() / 86400)を使います。シーズンごとに、獲得済み報酬をプレイヤーデータに保存してください。
  • デイリー報酬/連続ログイン:lastClaimDay(UTC の通算日数)と連続日数を保存し、サーバー上で報酬を付与してください。
  • コンテンツは設定フラグを使って公開し、小規模なロールアウトや実験で検証してから、100%に展開してください。
  • リリースのたびに、クリエイターハブのダッシュボードでリテンション(D1/D7/D30)、セッション時間、コンバージョン、ARPPU、ファネル、パフォーマンス(クラッシュ率、FPS、メモリ)を確認してください。ディスカバリーのインプレッション/プレイには、2026年10月12日から新しい測定パイプラインが使われています(数値が増え、プレイスルー率は若干低下します)。この増加を実際の変化と捉えないでください。
  • 公開前:公開フローから、最大10人の友達またはグループメンバーを早期テスターとして招待できます。
  • プレイヤーサポート(早期アクセス、年齢確認済みの13歳以上):ゲーム内に「問題を報告」ボタンを追加し、SocialService:PromptFeedbackSubmissionAsync({ FeedbackType = Enum.FeedbackType.PlayerSupport })を呼び出します(クライアント側でpcallを使用)。報告はデバイス情報とスクリーンショットとともに、クリエイターハブ → オーディエンス → プレイヤーサポートに届きます。

Related skills

roblox-monetization (offers, pricing), roblox-data-stores (streaks, season data), roblox-open-cloud (configs/experiments/notifications APIs), roblox-game-systems.

コメント