Rustのtui-rsライブラリに入門してみた
はじめに
この記事では、「Rustのtui-rsライブラリの導入の仕方」について書いています。
Rustを色々勉強しており、色々なクレート(ライブラリ)を触ってみているので記事を書いてみました。
自分に向けた備忘録でもありますが、「Rustのtui-rsライブラリって何?」や「ちょっと触ってみたい」な人の一助になれば嬉しいです。
前提(環境)
以下の環境、フォルダ構成で実験をしていきます。
- OS: Windows 10
- Rust: 1.64.0
そもそもtuiとは何か
tui(TUI)とは Text User Interfaceの略で、テキストベースのユーザーインターフェースのことです。
CUIとGUIの中間のような感じで、CUIのようにコマンドラインからコマンドを打ち込むではないですが、GUIのように動画や画像、音声データを結びつけたりすることもできません。
TUIは一般的なテキスト端末で表示できる記号や文字だけで画面を構成されています。
tui-rsとは
tui-rsはRustでTUIを簡単に作ったり扱うことのできるライブラリです。
導入して実際に動かしてみるまで
tui-rsのドキュメントに導入の仕方があるので、それに沿って書いていきます。
まずはCargo.toml
に依存関係を追加します。
...(略)... [dependencies] tui = "0.19" crossterm = "0.25"
ここではバックエンドにcrossterm
を選んでいますが、termion
や他のものにすることも可能のようです。(ここではその話はせずcrossterm
で進めていきます)
次に、main.rs
にコードを書いていきましょう
use std::{io, thread, time::Duration}; use tui::{ backend::CrosstermBackend, widgets::{Widget, Block, Borders}, layout::{Layout, Constraint, Direction}, Terminal }; use crossterm::{ event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode}, execute, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; fn main() -> Result<(), io::Error> { // setup terminal enable_raw_mode()?; let mut stdout = io::stdout(); execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; let backend = CrosstermBackend::new(stdout); let mut terminal = Terminal::new(backend)?; terminal.draw(|f| { let size = f.size(); let block = Block::default() .title("Block") .borders(Borders::ALL); f.render_widget(block, size); })?; thread::sleep(Duration::from_millis(5000)); // restore terminal disable_raw_mode()?; execute!( terminal.backend_mut(), LeaveAlternateScreen, DisableMouseCapture )?; terminal.show_cursor()?; Ok(()) }
これも公式のドキュメントのままです。ターミナルに描画して5秒ほど待って終了するという内容のコードです。
これでcargo run
で実行させてみましょう
非常に寂しい感じですが(笑)、無事表示することが出来ました。
おわりに
「Rustのtui-rsライブラリの導入の仕方」について解説しました。
ターミナル操作系のライブラリはtui-rs以外のものも色々あるそうなので他のものも使ってみていきたいと思います。
さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。