Rust管理サイト「Rust Manager Ver.2」を作った話
最初に…
ゲームサーバーを管理するというと「難しい」や「めんどくさい」と思われるかもしれません。
RUSTの場合も、例外ではなくたくさんのプレイヤーの管理やサーバーの状態確認を行うのはとても大変なことです。
そんな大変な要素を少しでも減らしたいと思い作り始めたのが前回お話しした「Rust Manager」です。
Rust Managerを運営してみて
Rust Managerを運営してみて、たくさんの方が同じ悩みを持っていたんだなということがわかりました。
RUSTに限らず様々なゲームサーバーの管理サイトは英語がほとんどなので日本語に対応してないことも多々あります。
しかし、個人開発ということもありサーバー維持費・ドメイン維持費・メンテナンス作業など運営面での大変さを痛感いたしました。
当時使用していたフレームワークだとメンテナンスしづらくなっており、安定した運用ができなくなっていたのです。
Rust Managerのを一時閉鎖
とある日、別のゲーム「FiveM」でスクリプトの改良作業を行っているときに「SvelteKit」と「Tailwind UI」の構成でフロントエンドを開発しているスクリプトに遭遇しました。
「SvelteKit」というフレームワークを知らなかった自分はストアという仕組みに感銘を受けました。
このストアという仕組みを使ってRust Managerを新しく作り直すため、一時的に閉鎖をしました。
SvelteKitの「ストア」って何?
「ストア」という言葉を聞くと、買い物をする場所を想像するかもしれませんが、SvelteKitのストアは少し違います。
簡単に言うと、「データを共有するための箱」です!
サイトやアプリの中で、いろいろな場所から同じデータを使いたいときに、この「箱」を使います。
どうしてストアが便利なの?
1. データの管理がラク!
例えば、買い物カゴをイメージしてください。
商品を追加したり、削除したり、合計金額を計算したりしますよね?
SvelteKitのストアを使えば、この「買い物カゴの中身」をアプリ全体で簡単に管理できます。
2. どこでも使える!
ストアで管理しているデータは、アプリのどの部分でも使えます。
例:
ユーザーが選んだ商品の情報をストアに保存。
他のページでその情報をすぐに表示。
これがコードで簡単にできちゃいます!
3. 自動更新がスゴイ!
ストアに保存しているデータが変わると、そのデータを使っている画面も自動で更新されます。
つまり、「新しいデータを反映させるためにわざわざ設定し直す必要がない」ということです!
新しく追加された機能
複数のサーバーに対応
Rust Managerは、1つのサーバーにログインする方式をとってました。
接続するために必要なIPアドレスやポート番号・パスワードは安全性を確保するべく、ユーザーのブラウザに保管するという仕組みになっています。
今回、新しく開発を行ったRust Manager Ver.2では、ブラウザに保管するという仕組み自体は一緒ですが、サーバーを複数追加する仕組みを設けました。こうすることで、何台もRUSTサーバーを運営しているという方の利便性が向上しました。
プラグイン管理
今までになかったプラグイン管理・個別リロードに対応しました。
サーバーにインストールされている Oxideプラグインを取得しているため度のプラグインが今動いているのか、バージョンはいくつなのかといった確認がすぐにできるようになりました。
プレイヤー管理
以前のバージョンにもプレイヤー管理はあったのですが、今回の大型アップデートによりパーミッションの割り当てなどの各プレイヤーに対する管理コマンドの実行の利便性が格段に向上しました。
サーバーに存在するパーミッションのリストを定期的に取得し、割り当てが可能なパーミッションをプルダウンリストで選択することが可能になりました。
また、RUSTに存在するアイテムリストを完備しアイテム付与コマンドの実行時に日本語でのアイテム検索を行えるようになりました。
ホワイトリスト管理
ホワイトリスト管理も以前のバージョンから存在したのですが、利便性がはるかに向上しました。
JSONファイルまたはテキストファイルによるインポート・エクスポートに対応。たくさんのプレイヤーのホワイトリスト登録を一括して行うことができるようになりました。
また、プレイヤーを複数選択してホワイトリストから削除する機能も追加されました。
やはり、RustのWebSocketはSSLに対応してなかった…
SSLサイトからRustゲームサーバーにRconで通信しようとすると、うまくつながらないという緊急事態が起きました。
これは、WebSocketが暗号化されていないためSSLサイトから直接通信しようとすると安全ではないという警告が出るためでした。
何とか、安全な通信を保ちながらできないか….
と考えた結果、NginxでProxyサーバーを構築し暗号化された通信をRustゲームサーバーへ送る仲介役にしました。
暗号化された通信をNginxで仲介し、Rustゲームサーバーへ送信する。
また、RustゲームサーバーからSSLサイトへも同様に仲介する。
この仕組みを構築することで、安全な通信を保ちながらRustManagerで管理ができるようになりました。
アップデートしてみて
今回の大型アップデートでは、セキュリティ面・利便性・安定性に気を付けました。
また、UIにもこだわっていて長時間作業をしても目に負担がかかりづらいダークテーマにし、重要な場所は色を変えました。
新しいフレームワークの学習という面でも今回のアップデートはしてよかったなと思えるものになりました。