DGS のローカル開発手順 (Windows)
はじめに
CSAR を使うとローカル環境上で簡単に DGS の開発を行うことができます。
Diarkis サーバークラスターは Windows 上で動かすこともできるので、別途サーバー環境を用意せずにローカル環境のみで DGS を動かす事が可能です。
本ページでは Windows 上のローカル環境で開発フローを回すために以下について解説します。
CSAR の開発フローの確認
Diarkis サーバーのビルド、実行方法
Unity での DGS サーバーのビルド方法
動作環境
2025-07-07 現在のバージョン v1.1.0 について、以下の環境で動作を確認しております。
Windows 11
Go 1.24
CSAR DGS のローカル上での動作イメージ
ローカル環境においては、開発効率を重視するために、Diarkis クラスターで管理されている DGS プロセスを allocate するように構築します。それにより、開発者が任意のタイミングで DGS をビルドして動作確認することができます。

以下はローカル環境での開発フローの例です。
Diarkis はローカル環境では各プロセスを実行するだけで、Diarkis クラスターとして管理されます。CSAR は DGS の実装・修正をしてビルドおよび実行(Editor においては Play)するだけでクラスターに参加でき、動作確認ができます。
mars, HTTP, UDP サーバーのビルド、起動手順
Diarkis Server Template のインストール
以下リポジトリより、Diarkis Server Template のソースコードを取得します。
https://github.com/Diarkis/diarkis-server-template
git clone
して利用中のバージョンをチェックアウト、または releases
プロジェクトの生成
PowerShell から以下のコマンドを実行して、プロジェクトを生成します。
# parameters: {project_id} {builder_token} {output\}
> .\run-mage.bat examples:install 12345678901 11111111-1111-1111-1111-111111111111 ../server_bin
project_id
: 弊社が発行したプロジェクトIDbuilder_token
: 弊社が発行したBuilder Tokenoutput
: 生成したプロジェクトの出力先。ここでは../server_bin
として説明します
上記のコマンドを実行することで、 ../server_bin
に Diarkis のサンプルプロジェクトが出力されます。
ビルド
出力されたサンプルプロジェクトの ../server_bin/csar/dgs
が DGS のサンプルプロジェクトとなります。ディレクトリを移動し、以下のコマンドを実行して、Diarkis のサーバーバイナリをビルドします。
> cd ..\server_bin\csar\dgs
> .\run-mage.bat build:local
ビルドが終了すると、 remote_bin
ディレクトリにバイナリが出力されます。
実行
mars, http, udp をそれぞれ起動します。それぞれ別の PowerShell のウィンドウで起動します。
> .\run-mage.bat server mars
> .\run-mage.bat server http
> .\run-mage.bat server udp
必要に応じて、Go のテストクライアントで動作確認を実施してください。
DGS サーバーのビルド、起動手順
Unity で DGS サーバーを実行する
Diarkis Plugin Sample/Sample/Scenes から DiarkisSampleScene を選択してください。
DiarkisSampleScene の DiarkisNetworkManager から、
Pre Stored Http Host
に Diarkis サーバーのアドレス:ポート
を指定してください。DiarkisSampleScene の SceneManager から、
Editor DGS Clound Env
に DGS サーバーを起動する PC のアドレス
(ポート番号は不要) を指定してください。Diarkis サーバーと DGS サーバー を同じ PC で起動する場合は、同じ アドレスを指定してください。
DGS サーバーを複数起動される場合は、
Editor DGS Port
を7400
以外をご利用ください。
BuildSettings
のScenes In Build
で、DGSSSampleScene と DiarkisSample_HostClientGameDemo_2_InGame を選択します。
※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。




DSGサーバー プロセス実行
Unity Editor で DGSSampleScene を起動して、
Play
ボタンで実行します。実行すると、DGS サーバーのプロセス (relay.exe) が起動され、コンソールウィンドウが起動されます。
relay.exe は、UnityEditor で DGSサーバーを起動した時のみ、起動されるプロセスになります。


DGS サーバープロセスを起動する
DGS サーバーのプロセスのビルド手順
Diarkis Plugin Sample/Sample/Scenes から DiarkisSampleScene を選択してください。
DiarkisSampleScene の DiarkisNetworkManager から、
Pre Stored Http Host
に Diarkis Http サーバーのアドレス:ポート
を指定してください。DiarkisSampleScene の SceneManager から、Editor
DGS Clound Env
に DGS サーバーを起動する PC のアドレス
(ポート番号は不要) を指定してください。Diarkis サーバーと DGS サーバー を同じ PC で起動する場合は、同じ アドレスを指定してください。BuildSettings
のScenes In Build
で、DGSSSampleScene と DiarkisSample_HostClientGameDemo_2_InGame を選択します。Platform リストから Dedicated Server を 選択して、Switch Platform ボタンを押下します。
Build
ボタンを押下して、Dedicated Server の ヘッドレスの Standalone バイナリーをビルドします。
※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。
DGS サーバープロセスの実行手順
以下のように、引数を指定して起動してください。
{app} {logFile} {meshFile} {DGS Endpoint} {DGS Port} {DGS Cloud Env}
例
> .\UnityDiarkis_Sample.exe .\log.json .\mesh.json 0.0.0.0 7400 127.0.0.1
logFile : log の config ファイルの log.json パスを指定します。
meshFile : mesh サーバーの config ファイルの mesh.json パスを指定します。
DGS Endpoint : DGS サーバーの IP を指定します。
DGS port : DGS サーバーの Port を指定します。 DGS サーバーを複数起動する場合は、7401, 7402 など 7400 番台以降を指定します。複数起動する際に、同じ Port 番号を指定すると正しく動作しないため予めご留意ください。
DGS Cloud Env : 起動する DGS サーバーの ローカルアドレスを指定してください。
mesh.json の例
{
"marsAddress": "127.0.0.1",
"marsPort": "6779"
}
address, marsAddress には、Diarkis サーバーの ローカルIP を指定します。
log.json の例
{
"level": "sys",
"levels": {
"ROOM": "verbose",
"_FIELD": "verbose",
"_UDP": "network"
},
"timeZone": "local",
"color": true,
"flat": false,
"filePath": "./diarkis.test.log",
"unsafeLogging": true
}
DSGサーバー プロセス実行時の Diarkis サーバー側のログを設定するためのファイルになります。
実行すると以下のようなコンソールが起動します。DGS サーバープロセスのログをご確認頂けます。

DGS サーバープロセスを終了する時は、コンソールで Ctrl + c で終了し、コンソールウィンドウを閉じてください。
DGS クライアントプロセスを起動する
DGS クライアントプロセスのビルド手順
Diarkis Plugin Sample/Sample/Scenes から DiarkisSample_HostClientGameDemo_1_Menu を選択してください。
DiarkisSampleScene の DiarkisNetworkManager から、
Pre Stored Http Host
に Diarkis Http サーバーのアドレス:ポート
を指定してくださいBuildSettings
のScenes In Build
で、DiarkisSample_HostClientGameDemo_1_Menu と DiarkisSample_HostClientGameDemo_2_InGame を選択します。Platform リストから Windows を 選択して、Windows が有効になっていなかったら
Switch Platform
ボタンを押下します。Build
ボタンを押下して、Windows の Standalone バイナリーをビルドします。
※以下の参考画像では、 Diarkis サーバーを ローカルホスト (127.0.0.1)で起動している場合の設定になります。


DGS クライアントプロセスの実行手順
ビルドした DGS クライアントプロセスを 2つ 起動します。
MinMembers :
2
MaxMembers :
4
Connection Mode:
SingleAuthority
Network Type:
DGS
パラメータの意味
MinMembers は、設定した人数が集まったら DGS サーバーに接続
MaxMembers は、Room に入れる最大数

Create / Join Game Instance ボタンを押下して、DGSサーバーと接続が成功すると、以下のような画面になります。

HostClientGameApp.cs の StartGameInstanceProcessCoroutine()
DiarkisSample_HostClientGameDemo のサンプルを DGS モードで動かした場合、
クライアントA が、 MaxMembers=4 を指定して StartGameInstance を呼び出します。
MaxMembers 分 他のクライアントB,C,D が、StartGameInstance が呼び出した後に、
クライアントA,B,C,D の IsGameInstanceStarted() = true になります。
現状 HostClientGameApp.cs のコードで、各クライアント が StartGameInstance を呼び出してから 20秒間に MaxMembers 分 他のクライアントが StartGameInstance を呼ばないとタイムアウトになってしまいますのでご注意ください。タイムアウトになったクライアントは DGS サーバーとの接続に失敗します。必要に応じて こちらのタイムアウト時間を変更してください。
// ConnectionManager を作成しゲームインスタンスの開始リクエストを送信します。
// Authoritative Network の機能は ConnectionManager を使用してアクセスするため、ここ以降 DiarkisInterface の機能は基本的には使用しません。
var connection = DiarkisNetworkManager.GetConnectionManager(gameModeName_);
if (!connection.IsGameInstanceStarted())
{
uid_ = DiarkisNetworkManager.GetDiarkisInterface(gameModeName_).UID;
connection.StartGameInstance(gameConfig_);
// クライアント間の直接通信(メッシュ接続)を許可します
// この設定を有効にすることで Host-Client 型の API だけでなく SendUnicast/Multicast/Broadcast を使用する事が出来るようになります。
DiarkisAsyncResult res = new DiarkisAsyncResult();
// タイムアウトを20秒で設定。DGS モードの時は 20秒以内に 他のクライアントも GameInstanceStart する必要があるので注意してください。
// 必要に応じて調整する必要があります。
yield return DiarkisAsync.WaitFor(() =>
{
return connection.IsGameInstanceStarted();
}, res, 20000);
gameInstanceStarted_ = connection.IsGameInstanceStarted();
if (res.completed == false)
{
Debug.Log("Game instance start sequence: Time Out");
yield break;
}
}
Debug.Log("Game instance start sequence: Success");
connection.AllowSendDataBetweenClients(true);
最終更新
役に立ちましたか?