【ITニュース解説】I'm building a text based, online TUI-RPG in Rust

2025年09月05日に「Dev.to」が公開したITニュース「I'm building a text based, online TUI-RPG in Rust」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

RustでオンラインのテキストベースRPG(TUI-RPG)を開発中。データ駆動型ワールド、スキルチェック付き対話システム、画像からASCIIアートを生成する動的マップなど、QUICで安全に接続されるゲームの主要機能を実装した。

ITニュース解説

ニュース記事は、ターミナルで動作するテキストベースのオンラインRPGをRustというプログラミング言語で開発しているという報告だ。このゲームは、私たちが普段目にするようなグラフィックを多用したものではなく、文字と記号だけで表現される「ターミナルユーザーインターフェース(TUI)」を採用しているのが大きな特徴である。オンラインで多人数が同時に遊べるよう、クライアント・サーバーアーキテクチャが採用され、ネットワーク通信には「QUIC」という高速で安全なプロトコルが使われている。

このプロジェクトでは、ゲームの核となる機能が多数実装されている。その一つが「完全にデータ駆動型」のワールドだ。ゲーム内に登場するアイテム、ノンプレイヤーキャラクター(NPC)、スキル、クエスト、さらには会話の分岐まで、すべてがシンプルなJSONファイルから読み込まれる。これは、ゲームの内容をプログラムのコードに直接書き込むのではなく、外部のデータファイルに分離して管理する手法だ。この方式の利点は、新しいコンテンツ(例えば新しいアイテムやクエスト)を追加する際に、プログラマーがコードを修正する必要がなく、デザイナーやライターが直接JSONファイルを編集するだけで済むため、開発が非常に効率的になることだ。将来的な「MOD(改造データ)」の作成にも対応しやすくなる。

次に注目すべきは、「堅牢な有限状態機械(FSM)ベースの会話システム」である。一般的なRPGの会話は一本道で進むことが多いが、このゲームでは会話の流れがFSMという仕組みで制御されている。FSMは、プログラムの状態と、特定の条件が満たされたときに次の状態へ移るルールを定義するものだ。これにより、プレイヤーの選択に応じて会話が枝分かれしたり、途中でスキルや能力値のチェック(例えば「筋力チェック:15」でガードを威圧する)が発生したり、NPCとの間でアイテムの売買や賄賂のやり取りが行われたりする、非常に複雑でインタラクティブな会話を実現している。FSMを使うことで、会話のパターンがどれだけ複雑になっても、そのロジックが明確になり、設計やデバッグが容易になるというメリットがある。

ゲームのアーキテクチャ(設計思想)の中心にあるのが、「中央集権的な『エフェクト適用器』とシステムナレーター」だ。ゲーム内でプレイヤーが行うあらゆるアクション(リンゴを食べる、会話の選択肢を選ぶ、剣を装備するなど)は、一連の「ゲームエフェクト」を生成する。このゲームエフェクトは、ゲーム内で何らかの変化を引き起こす命令のリストのようなものだ。そして、このエフェクトを処理する単一のシステムが用意されている。これにより、キャラクターの能力値の変更、アイテムの増減、所持金の変化、装備の付け替えといった、ゲームの状態が変化する処理がすべて一箇所で集中管理される。この集中管理によって、ゲームの状態が常に一貫していることを保証しやすくなる。さらに、エフェクト適用器は、プレイヤーへのフィードバックを自動的に生成する「システムナレーター」の役割も果たす。例えば、「体力が増加した」「ナイフを装備から外した」「お金が減った」といった情報を、クラシックRPGのような形式で分かりやすくプレイヤーに提示する。

見た目の面では、「動的なASCII/点字アートレンダリング」がユニークな特徴だ。このゲームはグラフィックを使わないにもかかわらず、NPCの肖像画やエリアマップ、世界地図といった画像ファイルを、ターミナル上で高品質な点字アートとして表現できる。点字アートとは、文字の濃淡や記号の組み合わせで画像を表現する手法で、ターミナル画面に豊かな視覚情報を提供する。世界地図では、パン(画面のスクロール)やズームといった機能もサポートされており、テキストベースながらも臨場感のある体験が可能だ。

プレイヤーの操作性を高めるために、「インテリジェントなクライアントサイドUI」も実装されている。まず、「スマートコマンドパーサー」は、プレイヤーが入力したコマンドにタイプミスがあっても、あいまいなマッチングで正しいコマンドを推測し、修正してくれる。また、「l」で「look」、「inv」で「inventory」といったエイリアス(別名)にも対応しており、コマンド入力の手間を省く。さらに、「コンテキスト認識型アクション」により、プレイヤーはインベントリ(持ち物)を矢印キーで選択し、「use」と入力するだけで、どのアイテムを使いたいのかをゲームが自動的に判断する。このほか、武器や防具といった特定のスロットにアイテムを装備・解除できる「フル装備&ステータスシステム」も備わっている。装備品の変更に応じて能力値はリアルタイムに更新され、例えば「持久力」のようなステータスは、最大値を超えて「過充電」されることも可能だ。

ゲームの世界に生命感を与えるのが、「ライブワールドティッカー」だ。ゲーム内には独自の時間が流れており、NPCが時間経過と共に移動したり、長距離の移動中にプログレスバーが表示されたりするなど、時間によって発生するイベントが表現される。これにより、ゲーム世界がプレイヤーの行動とは独立して常に動き続けているような、持続的な感覚を生み出す。

この開発プロジェクトは、特にクライアント・サーバーアーキテクチャの構築と、ゲームの状態を常に一貫させることに関して、大きな学習機会となっているという。多くのコンテンツを詰め込む前に、まずは強固で拡張性のある基盤を築くことに重点が置かれているのだ。これは、システム開発において、将来の機能追加や変更に耐えうる土台をいかに作るかが重要であるという、システムエンジニアリングの原則を示している。

【ITニュース解説】I'm building a text based, online TUI-RPG in Rust | いっしー@Webエンジニア