WORK
ゲーム用ワールドと専用サーバーの構築
ゲームのワールドに独自のルールと見た目を加え、専用サーバーで遊べるようにしました。手元とサーバーで同じ設定を読み込み、ワールドの作り直しやサーバー起動もスクリプトで自動化しています。
概要
ゲーム用のワールドに、挙動のパックと見た目のパック、専用サーバーを足したものです。手元で遊ぶ環境とサーバーで、同じワールドを動かします。ワールドデータの作り直しと、サーバーの起動はスクリプトで行います。ルールと見た目をパックに分け、サーバーはそのパックを読み込んだワールドを配信します。
挙動のパックと見た目のパックを分け、専用サーバーが同じワールドを配信します。手元の環境とサーバーでパックの中身がずれないようにし、ワールドデータはスクリプトで作り直します。サーバーの起動もスクリプトから行い、パックを更新したあとの手順を一つにしています。挙動と見た目のパックを、手元とサーバーで同じ内容に揃えます。
課題
ルールと見た目が、手元の環境とサーバーで揃っていませんでした。手元では動く仕掛けが、サーバーでは別のワールドのまま残っていたり、見た目だけが違っていたりしました。ワールドを作り直すときも、データの再生成とサーバーの起動が別の手順で、どちらを先にやるかを覚えておく必要がありました。パックの置き場所も環境ごとに違い、同じルールを両方へコピーしていました。
手元では動く仕掛けが、サーバーでは以前のワールドのまま残ることがありました。見た目のパックだけを更新すると、挙動と絵が一致しませんでした。ワールドの再生成とサーバーの再起動の順序が人によって違い、どちらのデータがサーバーに載っているかを確認していました。パックの置き場所も環境ごとに分かれていました。
対応
挙動のパックと見た目のパックを分けて置き、同じワールドを専用サーバーで動かします。手元の環境とサーバーが同じパックを読むようにし、ルールと見た目の差が出ないようにしています。ワールドデータはスクリプトで作り直し、サーバーの起動もスクリプトから行います。パックを更新したあとは、ワールドの再生成とサーバーの起動を同じ手順で繰り返せるようにしています。
挙動と見た目をそれぞれのパックに置き、サーバーはそのパックを読み込んだワールドを動かします。更新したあとは、Python のスクリプトでワールドデータを作り直し、起動のスクリプトでサーバーを立ち上げます。手元とサーバーで別々のファイルをコピーしなくても、同じパックを読む状態に戻せます。遊ぶ手順と、配信する手順を分けて残しています。
構成
挙動と見た目の記述は JavaScript、ワールドデータの再生成は Python です。専用サーバーは Docker で起動し、パックとワールドをその環境で読みます。Python のスクリプトがワールドデータを作り、サーバー起動のスクリプトが Docker 上のサーバーを立ち上げます。遊ぶクライアントそのものはこの構成の中心ではなく、パックとサーバーと再生成の手順を揃えるところを構成にしています。
JavaScript は挙動と見た目のパックの記述、Python はワールドデータの再生成、Docker は専用サーバーの実行環境です。起動のスクリプトが Docker 上のサーバーを立ち上げ、パックとワールドをその環境で読みます。クライアントの操作そのものではなく、パック、再生成、サーバー起動を揃えるのがこの構成です。