INDIE INDEX

レベル:開発者向け

Steam のゲームサーバーを動かす手順|サーバーブラウザー・ISteamGameServer

公開 2026-10-21更新 2026-10-21Steam(Steamworks Partner Program / Steam Direct)

Steam Game Servers API は、ゲームの専用サーバーの作成に使う API です。ゲームサーバーは、自分でホストすることも、コミュニティがホストすることもできます。

このページの目次
  1. ゲームサーバーの API でできること
  2. サーバー側の始め方
  3. サーバーの情報を知らせる
  4. ユーザーを認証する
  5. サーバーブラウザーとサーバーリスト
  6. ロビーとの関係
  7. 情報源

ゲームサーバーの API でできること

Steam Game Servers API は、ゲームの専用サーバーの作成に使う API です。ゲームサーバーは、自分でホストすることも、コミュニティがホストすることもできます。

コミュニティに専用サーバーのホストを許可する場合は、専用サーバーファイルへのアクセスを与える際に特に考慮すべき点があります。詳細は、Steamworks ドキュメントの「専用ゲームサーバーの配布」にあります。

サーバー側の始め方

ISteamGameServer のインスタンスの初期化には、InitGameServer があります。InitGameServer は SteamGameServer_Init から呼び出され、通常は直接呼び出す必要はありません。InitGameServer には、次の値を渡します。

引数 内容
unIP バインドする IP アドレスです(ホスト順。例 127.0.0.1 == 0x7f000001)。すべてのローカル IPv4 アドレスのバインドに INADDR_ANY を使用できます。
usGamePort ゲームプレイのためにクライアントが接続するポートです。
usQueryPort サーバーブラウザー関連とクライアントからの情報 ping を管理するポートです。
unFlags 1つ以上の ServerFlags の結合です。
nGameAppId このサーバーを使うゲームの AppID です。
pchVersionString バージョン文字列です。形式は通常 x.x.x.x で、サーバーが古くなったことを検出するためにマスターサーバーによって使用されます(最新バージョンのサーバーのみがリストされます)。

ゲームサーバーは、次の関数でログオンします。

関数 内容
LogOn 永続的なゲームサーバーアカウントにログインするプロセスを開始します。
LogOnAnonymous 一般的な匿名アカウントにログインします。

どちらの関数も、SteamServerConnectFailure_t・SteamServersConnected_t・SteamServersDisconnected_t の各コールバックをトリガーします。BLoggedOn は、ゲームサーバーがログオンしているかを確認します。true はサーバーがログオンしているときのみで、それ以外の状態では false です。

サーバーの情報を知らせる

サーバーの情報を設定する関数には、たとえば次のものがあります。

関数 内容
SetDedicatedServer 専用サーバー(true)かリッスンサーバー(false)かを設定します。規定ではリッスンサーバーです。LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。
SetProduct ゲームの製品識別子を設定します。バージョンチェックの理由で、現在マスターサーバーによって使用されます。NULL または空の文字列以外の必要があります。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。
SetGameDescription ゲームの説明を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerGameDescription より長くてはいけません。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。
SetModDir ゲームディレクトリを設定します。ゲームがインストールされるディレクトリと同じである必要があります。フォルダー名のみで、パス全体ではありません。NULL または空の文字列以外の必要があり、k_cbMaxGameServerGameDir より長くてはいけません。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。
SetServerName サーバーブラウザー内に表示されるサーバー名を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerName より長くてはいけません。
SetMapName サーバーブラウザー内に報告するマップ名を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerMapName より長くてはいけません。
SetMaxPlayerCount サーバー上に同時に許可される最大プレイヤー数を設定します。この値はいつでも変更できます。
SetBotPlayerCount ゲームサーバー上のボット/AI プレイヤーの数を設定します。規定値は0です。
SetPasswordProtected ユーザーがログインを試みた際にゲームサーバーがパスワードを要求するかを設定します。
SetGameTags このサーバー用に "gametags" を定義する文字列を設定します。これは任意ですが、設定するとユーザーがマッチメイキング/サーバーブラウザーインターフェイスを値でフィルターできるようになります。NULL または空の文字列以外の必要があり、k_cbMaxGameServerTags より長くてはいけません。
SetKeyValue ルールのキー/値のペアを追加/更新します。
SetRegion 地域識別子を設定します。これは任意のフィールドです。デフォルト値は空の文字列で、"全世界"(地域)を意味します。

ユーザーを認証する

ゲームサーバーは、BeginAuthSession でエンティティのチケットを検証します。BeginAuthSession には、検証する認証チケット pAuthTicket・そのバイト単位のサイズ cbAuthTicket・このチケットを送信したエンティティの Steam ID を渡します。cbAuthTicket は、このチケットを作成した呼び出しによって提供された pcbTicket のサイズである必要があります。

BeginAuthSession は、エンティティの Steam ID からのチケットが有効であり、再利用されていないことを検証します。コールバック ValidateAuthTicketResponse_t を受け取り、コールバックの戻り値が成功かどうかチェックされるまで、ID は確認されません。

チケットは、エンティティに対して ISteamUser::GetAuthSessionTicket または GetAuthSessionTicket で作成された後、検証のためにネットワークを介してもう一方のエンドエンティティへ提供される必要があります。エンティティがオフラインになったときやチケットがキャンセルされたときに、ValidateAuthTicketResponse_t コールバック用に登録されます。

EndAuthSession は、BeginAuthSession で開始された認証セッションを終了します。指定のエンティティとそれ以上プレイしなくなったときに呼び出される必要があります。マルチプレイヤーセッションの終了時に、EndAuthSession を呼び出す必要があります。

サーバーブラウザーとサーバーリスト

プレイヤーは、Steam クライアントまたは Steam オーバーレイからサーバーブラウザーを開けます。ISteamMatchmakingServers で利用可能な API 関数を使うと、サーバーブラウザーと同じデータを取得できます。

サーバーリストを要求する関数には、次のものがあります。

関数 要求するサーバーリスト
RequestInternetServerList 「インターネット」サーバーリスト
RequestLANServerList 「LAN」サーバーリスト
RequestFriendsServerList 「フレンド」サーバーリスト
RequestFavoritesServerList 「お気に入り」サーバーリスト
RequestHistoryServerList 「履歴」サーバーリスト
RequestSpectatorServerList 「観戦者」サーバーリスト

どの関数も、それぞれのサーバーリストからゲームサーバーの新しいリストを要求します。RequestLANServerList 以外は、ユーザーが関心のあるサーバーのみを取得するフィルターの配列を渡します。pRequestServersResponse は、ISteamMatchmakingServerListResponse から継承するオブジェクトでなければなりません。戻り値は HServerListRequest で、新規の非同期サーバーリスト要求オブジェクトです。この要求オブジェクトは、使用が終了したら ReleaseRequest を呼び出して解放する必要があります。

リスト内で指定されたサーバーの詳細情報は、GetServerDetails で取得します。インデックス値の有効な範囲は GetServerCount を呼び出すことにより取得でき、ISteamMatchmakingServerListResponse::ServerResponded コールバックでもインデックス値を受け取ります。

ユーザーのお気に入りのサーバーの取得と操作には、たとえば ISteamMatchmaking の次の関数があります。

関数 内容
GetFavoriteGameCount お気に入りとユーザーがローカルに保存してある最近のゲームサーバーの数を取得します。
GetFavoriteGame お気に入りのゲームサーバーの詳細をインデックスで取得します。GetFavoriteGameCount を呼び出してから、これを呼び出す必要があります。
AddFavoriteGame ゲームサーバーをローカルのお気に入りリストに追加するか、リストにすでに存在する場合はサーバーのプレイ時間を更新します。
RemoveFavoriteGame ローカルのお気に入りリストからゲームサーバーを削除します。

ロビーとの関係

ロビーの作成・検索と、ゲームの開始時にゲームサーバーへ参加する流れは、ロビーとマッチメイキングを作る手順にあります。

情報源

Steam 完全ガイドを順番に読む60本のうち51本目

このページに出た言葉

このページの内容の誤りは、問い合わせの窓口で受け付けています。