TL;DR

  • Ratatui 公式の Hello Ratatui チュートリアルに沿って、ターミナルに「hello world」を表示した。
  • プロジェクトは cargo-generate で公式のテンプレートから作成できる。

環境

  • Rust: 1.93.0
  • cargo-generate: 0.23.7

検証

プロジェクト作成

公式のテンプレートからプロジェクトを作成する。

$ cargo generate ratatui/templates hello-world

Cargo.toml の [dependencies] には、次の 3 つのクレートが入っている。

[dependencies]
color-eyre = "0.6.3"
crossterm = "0.29.0"
ratatui = "0.30.0"

color-eyre は、panic と eyre::Report のエラーレポートを色付きで見やすく出力するためのクレートである。eyre は anyhow をフォークしたクレートで、トレイトオブジェクトを使ったエラーハンドリング型を提供し、エラーレポートをカスタマイズできる。Crossterm は、クロスプラットフォームに対応したターミナル操作のライブラリである。

src/main.rs

app 関数のループの中で「hello world」を描画し、何かのキーが押されたらアプリケーションを終了する。

use ratatui::{DefaultTerminal, Frame};
 
fn main() -> color_eyre::Result<()> {
    color_eyre::install()?;
    ratatui::run(app)?;
    Ok(())
}
 
fn app(terminal: &mut DefaultTerminal) -> std::io::Result<()> {
    loop {
        // hello world という文字列を表示
        terminal.draw(render)?;
 
        // 何かしらのキーが押下されたら、アプリケーションを終了
        if crossterm::event::read()?.is_key_press() {
            break Ok(());
        }
    }
}
 
fn render(frame: &mut Frame) {
    frame.render_widget("hello world", frame.area());
}

動作確認

$ cargo run

キーワード

参考