godot-server-architecture について
Godotの専用・ヘッドレス型マルチプレイヤーホスト向けスキルです。起動、ENetホスト、パケット安全性、権限検証、運用を扱い、ロビーやゲームプレイRPCとは異なるサーバー基盤の実装を支援します。
主な機能
- 01ヘッドレスサーバーの初期化
- 02ENet UDPホストとDTLS暗号化
- 03未信頼パケットの安全なデコード
- 04特権操作の権限検証
- 05ピアの切断とヘルステレメトリー
活用シーン
- 01専用またはヘッドレスゲームサーバーの起動
- 02クライアントからの特権リクエストの検証
- 03ホスト状態の監視とマッチメーカーへの引き継ぎ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-server-architectureインストール後、Claude Code で/godot-server-architectureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migration-notes.mdrendering-physics-server-cookbook.mdscripts/dtls_secure_server.gdenet_optimized_host.gdheadless_init_manager.gdheadless_manager.gdisolated_multiplayer_api.gdmanual_network_poll.gdpeer_kick_manager.gdphysics_server_direct.gdrid_performance_server.gdsafe_packet_decoder.gdserver_authority_validator.gdserver_health_exporter.gdserver_matchmaker_client.gdwebsocket_server_compat.gd詳細
スキルの適用範囲(読み込まないでください)
| このスキルを使う場面 | godot-multiplayer-networkingを使う場面 |
|---|---|
--headless/専用サーバーのエクスポート起動 | ロビー UI、マッチメイキングの UX、フレンド招待 |
| ENet/DTLS のホストピアと安全なデコード | RPC シグネチャ、@rpc のゲームプレイハンドラー |
| 特権操作に対する権限検証 | MultiplayerSynchronizer/シーンのレプリケーション |
| キック、ヘルステレメトリー、マッチメーカーへの引き継ぎ | クライアント予測、ラグ補償 |
ホストの起動だけを行う場合は、multiplayer-networking のロビー/RPC チュートリアルスクリプトを読み込まないでください。まず、ここに記載されているホストのゴールデンパスに従ってください。
ホストのゴールデンパス(必須)
- ヘッドレスの検出/初期化 — 必須 headless_init_manager.gd(
--headless/dedicated_server機能)。 - 安全なデコード — 信頼できない
get_varを使う前に、必ず safe_packet_decoder.gd を使ってください。 - ホストピア — enet_optimized_host.gd。UDP を暗号化する場合は dtls_secure_server.gd を追加します。
- 権限 — 特権 RPC ごとに server_authority_validator.gd を使います。
- 運用 — peer_kick_manager.gd、server_health_exporter.gd を使います。マッチメーカーへの引き継ぎには server_matchmaker_client.gd を使います。
利用可能なスクリプト
headless_init_manager.gd
--headless/dedicated_server 用の専用サーバーロジックを検出/初期化します。
headless_manager.gd
ヘッドレスランタイムマネージャーの補助パターンです。
enet_optimized_host.gd
帯域幅/クライアント数の制限に対応した高性能な ENet UDP ホストです。
dtls_secure_server.gd
ENet UDP の DTLS と X509 による強化です。
safe_packet_decoder.gd
信頼できないパケットのオブジェクトデコードを禁止します(RCE 対策)。
manual_network_poll.gd
自動ポーリングが無効な場合に、multiplayer.poll() を手動で実行します。
isolated_multiplayer_api.gd
分離された MultiplayerAPI インスタンスです(1 つのプロセス内にクライアントとサーバーを配置)。
server_authority_validator.gd
権威あるリクエストに対する get_remote_sender_id() のチェックです。
websocket_server_compat.gd
HTML5 互換の WebSocketMultiplayerPeer ホストです。
peer_kick_manager.gd
理由を伝達しながら、ピアを正常に終了させます。
server_matchmaker_client.gd
ゲームホストへのロードバランサー/マッチメーカーからの引き継ぎです。
server_health_exporter.gd
監視スタック向けのヘッドレステレメトリーです。
physics_server_direct.gd / rid_performance_server.gd
ホスト側での RID シミュレーションを任意で行います。ノードの物理演算でティックの予算を維持できない場合に限ります。たとえば、ティックごとのアクティブボディが約 200 個を超える場合や、ノードを使った物理ステップでヘッドレスホストの CPU 使用率が 70% を超える場合です。基準:まずプロファイリングを行ってください。SceneTree のボディが主な負荷である場合は、godot-performance-optimization を優先してください。エンティティが 64 個以下のロビーでは、RID スクリプトを読み込まないでください。
サーバーアーキテクチャ(ホスト)で絶対にしてはいけないこと
- クライアントを絶対に信用しないでください — 状態、購入、ダメージは権威を持つホスト側で検証してください。
- 連続ストリームに
TRANSFER_MODE_RELIABLEを絶対に使用しないでください — 高頻度の変換には、信頼性のない転送を優先してください。 - 信頼できないパケットに
get_var(true)を絶対に使用しないでください — オブジェクトのデコードは RCE につながります。safe_packet_decoder の使用は必須です。 - ペースの速いアクションに TCP を絶対に使用しないでください — ENet UDP を優先してください(または HTML5 の制約がある場合は WebSocket を使用してください)。
- ビジュアル要素を削除せずに専用サーバーを絶対に実行しないでください — Dedicated Server エクスポート/ダミードライバーを使用してください。
connected_to_server/ピアの準備完了前に RPC が届くと絶対に想定しないでください。UNRELIABLEパケットが順番どおりに届くと絶対に仮定しないでください。- 手動で
poll()を呼び出さずにSceneTree.multiplayer_pollを false のままにしないでください。 - 互換性のないエンジン/マルチプレイヤープロトコルのバージョンを、ピア間で絶対に混在させないでください。
- Physics/RenderingServer のプールを使用するホストで、サーバーが作成した RID の
free_ridを絶対に忘れないでください。
ホストのパターン
インタレスト管理
大規模なワールドでは、MultiplayerSynchronizer.public_visibility = false と可視性フィルター(AABB /グリッド)を組み合わせ、ホストがワールド全体をすべてのピアに同期しないようにします。
# Hook on synchronizer — filter peers by grid cell / AABB (no full tutorial)
func _visibility_filter(for_peer: int, node: Node) -> bool:
return _interest_grid.is_visible_to_peer(for_peer, node.global_position)
# Assign: synchronizer.set_visibility_filter(_visibility_filter)
ヘルスメトリクス
server_health_exporter.gd を使って、ホストの FPS、静的メモリ(RID リーク)、孤立数を監視します。
詳細レシピ(必要に応じて)
LLM の知識範囲に関するルール:一般的なエージェントが読む前には知らないような情報は、ここまたは
scripts/に記載します。削除せず、移動してください。
| トピック | リファレンス |
|---|---|
| RID キャンバス/物理クックブック | rendering-physics-server-cookbook.md |
リファレンス
段階的な情報開示:特定の API を調査するときにのみ公式ドキュメントのリンクを開き、関連分野のピアに処理を振り分けるときにのみ関連スキルを読み込んでください。全体を事前に読み込まないでください。
公式ドキュメント
- サーバーの使用 — SceneTree ノードでは処理が遅すぎる場合に使用する、RID ベースの RenderingServer/PhysicsServer/NavigationServer ワークフローです。
- RenderingServer — MeshInstance ノードを使わずにプロシージャル描画やメッシュ群を扱うための、
canvas_item_*/instance_*/free_ridについて説明しています。 - PhysicsServer3D — ヘッドレスの権威あるシミュレーションに使用する、
body_create、スペースへのバインド、直接状態クエリについて説明しています。 - PhysicsServer2D — 同じ SceneTree バイパスのパターンを実現する、2D のボディ/シェイプ RID について説明しています。
- RID — サーバー用の不透明なハンドルです。リークを防ぐには、すべての
*_create()に対応するfree_ridが必要です。 - 高レベルマルチプレイヤー — 専用ホストと分離された MultiplayerAPI ブランチで使用する、権限、RPC、ピアのライフサイクルについて説明しています。
- ENetMultiplayerPeer — UDP ホストの作成、チャネル/帯域幅制限、
peer.hostでの DTLS ホスト設定について説明しています。 - WebSocket マルチプレイヤー — ENet UDP を利用できない場合(HTML5 クライアント)に使用する、ブラウザー互換のピア経路について説明しています。
- 専用サーバー向けのエクスポート — 専用サーバー向けのエクスポートプリセットと、本番ホストでビジュアル/オーディオを除外する方法について説明しています。
- コマンドラインチュートリアル — ヘッドレスの初期化やマネージャーで使用する
--headlessと CLI フラグについて説明しています。 - バイナリシリアル化 API — 信頼できないパケットからの RCE を防ぐ、
get_var(false)とオブジェクトのデコード規則について説明しています。 - DTLSServer — X509/TLSOptions を使用する、ENet の
dtls_server_setupを補完する DTLS の受け入れ経路について説明しています。
関連スキル
前提条件
- godot-project-foundations — 専用サーバーやヘッドレスでの起動に必要な、プロジェクトの構成、Autoload、機能タグについて説明しています。
- godot-gdscript-mastery — サーバースクリプト全体で使用する、型付き RID 配列、
@rpcアノテーション、安全な Variant デコードのパターンについて説明しています。 - godot-physics-3d — PhysicsServer3D の RID でバイパスする前に理解しておく、ノードレベルの PhysicsBody3D/スペースの概念について説明しています。
補完
- godot-multiplayer-networking — このスキルが構築するヘッドレスのENet/WebSocketホスト上で動作する、ロビー/RPC/シンクロナイザーのツールキットです。
- godot-adapt-single-to-multiplayer — 専用サーバーの検証や関心フィルターを組み込む前に、権限の分割と予測処理の枠組みを整えます。
- godot-export-builds — 実際の複数インスタンスホストテスト向けの、専用サーバー用エクスポートプリセットとCLIパッケージングです。
- godot-2d-physics — SceneTreeのボディを使わずに2Dの権威型スウォームを実現する、PhysicsServer2Dのボディ/シェイプパターンです。
- godot-navigation-pathfinding — AIエージェントが同じ低レベルサーバーパスを共有する場合の、NavigationServerのRIDとベイク更新です。
- godot-performance-optimization — ピア/オブジェクト負荷時にRIDサーバーがノードを上回るタイミングを判断するための、予算とプロファイリングです。
- godot-debugging-profiling — ヘッドレス環境でのFPS/メモリ/孤立オブジェクトのテレメトリーに関する、パフォーマンスモニターとリモートデバッグの手法です。
- godot-platform-web — ENetではなくWebSocketMultiplayerPeerを使用せざるを得ないHTML5クライアントの制約です。
下流 / 利用側
- godot-procedural-generation — RenderingServer/PhysicsServerのRIDプールを利用する、大量のオブジェクト/ボクセルのスポーナーです。
- godot-monte-carlo-balancer — 権威型サーバーのティックレートや検証の変更によって実効戦闘時間が変わった場合に、経済バランス/TTKを再調整します。
- godot-genre-battle-royale — 関心グリッド、キック/ヘルスのエクスポーター、RID規模のシミュレーションを必要とする、大規模ピア向け専用ホストです。
マスター
- godot-master — ライブラリのルーターおよびミラー化されたモジュールのエントリです。複数領域にまたがるサーバーの課題をどのドメインスキルが担当するかを調べる際に開いてください。