【ITニュース解説】TUIタイピングゲームを作ったので仕組みをまとめる(Rust × Tree-sitter × Ratatui)
2025年09月14日に「Zenn」が公開したITニュース「TUIタイピングゲームを作ったので仕組みをまとめる(Rust × Tree-sitter × Ratatui)」について初心者にもわかりやすく解説しています。
ITニュース概要
Rust, Tree-sitter, Ratatuiで開発されたターミナルタイピングゲーム「GitType」の仕組みを解説。Tree-sitterがソースコードを構造的に解析し、意味のあるコード片を抽出してタイピング問題にしている。
ITニュース解説
この文書では、ソースコードを素材にしたタイピングゲーム「GitType」の仕組みをシステムエンジニアを目指す初心者にも分かりやすく解説する。GitTypeは、私たちが普段目にしたり書いたりするプログラムのコードそのものをタイピングの練習問題として使う、少し変わったゲームである。このゲームは、私たちがパソコンの画面でよく見るマウス操作を主体としたグラフィカルユーザーインターフェース(GUI)とは異なり、ターミナル上で動作するテキストベースのユーザーインターフェース(TUI)を採用している。TUIアプリケーションは、文字情報だけで構成された画面をキーボード操作で扱うため、シンプルながらも独特な操作感を提供する。
GitTypeの全体的な構成は、大きく分けて二つの主要な流れで成り立っている。一つは、タイピング問題となるソースコードを準備する「問題生成フロー」であり、もう一つは、実際にプレイヤーがタイピングを行う「ゲームプレイフロー」である。これら二つのフローが連携することで、コードタイピングゲームとして機能する。
問題生成フローの中心にあるのが、「Tree-sitter」という強力なツールである。Tree-sitterは、プログラミング言語のソースコードを読み込み、その内部構造を解析する役割を担う。具体的には、私たちが書いたコードが単なる文字の羅列ではなく、意味のある文や関数、変数といった要素で構成されていることをコンピューターが理解するために、「抽象構文木(AST)」というデータ構造を生成する。ASTは、コードの構造をちょうど木の枝分かれのように表現したもので、例えば「if文」の中には「条件式」と「実行される処理」がある、といったプログラミング上の関係性をコンピューターが理解しやすい形で見える化する。
GitTypeが様々なプログラミング言語のコードを扱えるのは、Tree-sitterが多言語に対応しているからだ。これは「パーサーレジストリ」という仕組みによって実現されている。各プログラミング言語にはそれぞれ専用の「パーサー」があり、その言語の文法規則に基づいてコードを解析する。GitTypeはこのレジストリを通じて、問題にしたい言語に対応するパーサーを動的に選択し、適切なASTを生成できる。
ASTが生成された後、次に必要になるのは、タイピング問題として適切な「コード片」をASTの中から選び出すことである。これは「クエリファイル」と呼ばれる特殊なファイルを使って行われる。クエリファイルには、「ASTの中から関数定義の部分だけを選び出せ」とか、「変数宣言の部分だけを選び出せ」といった具体的な指示が記述されている。Tree-sitterは、このクエリファイルの内容に従ってASTを走査し、意味のあるまとまりを持つコードの断片を特定する。例えば、ある関数の定義全体や、特定のループ構造全体などが選ばれる。選ばれたASTノードに対応するソースコードの部分が、最終的にタイピングの問題としてプレイヤーに提示されるコード片となる。このようにして、単なるランダムなコードの塊ではなく、プログラムとして意味のある単位で問題が生成されるのだ。
次に、ゲームプレイフローについて見ていこう。プレイヤーが実際にタイピングを行うゲーム画面の表示や、キー入力の処理、タイマーの管理などは、「Ratatui」というライブラリが中心となって担当する。Ratatuiは、Rustというプログラミング言語でTUIアプリケーションのユーザーインターフェースを構築するために使われるフレームワークである。TUIでは、文字や記号を組み合わせてグラフやボタンのような見た目を作り出す必要があり、Ratatuiはそのような複雑な画面描画を簡単に行えるようにする。
ゲームプレイ中は、「イベントループ」という概念が非常に重要になる。これは、ゲームが常にユーザーからのキー入力を待ち受け、入力があればそれを処理し、その結果に基づいて画面を更新するという一連のサイクルを繰り返す仕組みである。例えば、プレイヤーがキーを打つと、その入力が正しい文字かどうかを判定し、正しければ画面上の文字の色を変えたり、スコアを更新したりする。また、時間の経過を追うタイマーの更新や、プレイヤーの成績(正確性や速度)を計算するロジックもこのイベントループの中で動いている。Ratatuiは、これらのUI描画とイベント処理を効率的に管理し、スムーズなゲーム体験を提供する。
このGitTypeゲーム全体は、「Rust」というプログラミング言語で開発されている。Rustは、その高いパフォーマンスとメモリ安全性(プログラムが不正なメモリアクセスをしないことを保証する仕組み)が特徴の言語であり、システム開発やゲーム開発など、高い信頼性と実行速度が求められる分野で活用されている。TUIアプリケーションのように、リソースを効率的に使いながら高速に動作する必要がある場合、Rustはその能力を最大限に発揮する。
まとめると、GitTypeはTree-sitterを使ってソースコードの意味を理解し、その中からタイピングに適した問題を選び出す。そして、Ratatuiを使ってターミナル上でプレイヤーに分かりやすいゲーム画面を提供し、キー入力をリアルタイムに処理する。これら全ての仕組みがRustの強力な機能によって統合され、コードを楽しく学ぶことができる独特なタイピングゲームを作り出しているのだ。