はじめに
七尾百合子さん、お誕生日 73日目 おめでとうございます! nikkieです。
o4-mini-high に作ってもらった、Richを使ったコンソールアプリを理解するためにRichのドキュメントに当たりました。
目次
知りたいことリスト
o4-mini-highは以下を使っていました。
Consoleprint()rule()
PanelPromptask()
Richの日本語README
READMEは多くの言語に翻訳されており、日本語版もあります
from rich.console import Console console = Console()
from rich import printで、太字や色付きなどリッチな出力ができますが、Consoleもprint()メソッドを持っています。
console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")
より細かくスタイリングを行うために、Richはbbcodeに似た構文の特別なマークアップを表示することができます。
[bold cyan]などがマークアップですね
Consoleのprint()メソッドは、完全に理解しました!
Richのリファレンス
Console
rule()メソッドは、線を引いた行を作ります。
行の中にはタイトルを中央揃えできます。
https://rich.readthedocs.io/en/stable/reference/console.html#rich.console.Console.rule
Draw a line with optional centered title.
────────────────────────────────── Random Choice Generator ───────────────────────────────────
rule()は特殊なprint()と思えるので、全部rich.print関数でも実現できそうですよね。
Consoleはリッチな出力の概念単位を区切るために使うのかな?
Panel
A console renderable that draws a border around its contents.
中身の周りに枠を描画するのがPanel。
╭─────────────────────────────────────── Your Choice ────────────────────────────────────────╮ │ D │ ╰────────────────────────────────────────────────────────────────────────────────────────────╯
console.print(Panel("Hello, World!"))のように、PanelをConsoleに渡します。
(READMEではTableをConsoleに渡していました)
Prompt
rich.promptモジュールにはいろいろありました。
例えばConfirmはYes/Noを尋ねます。
Promptはユーザに尋ねて文字列を入力してもらいます。
https://rich.readthedocs.io/en/stable/reference/prompt.html#rich.prompt.Prompt
A prompt that returns a str.
ask()メソッドは、組み込み関数のinput()関数のようなものと捉えています。
終わりに
o4-mini-highが使っていたRichを少しでも理解すべく、ドキュメントに当たりました。
Richについてはprint()関数のようなトップレベルの関数しか知らないところから始めて、Consoleのprint()メソッドや、そこにBBCodeでマークアップした文字列だけでなくPanel(など)も渡せることを知りました。
Consoleを使っていけば、リッチな出力のCLIアプリが作れそうです。