MENU
やすひら
やすひらと申します。
長靴を履いたタヌキ(ITエンジニア)です。
モノ作りの楽しさを発信中。
X(旧Twitter)のフォローもお願いします。

[Python]Richを用いたリッチなCLI作成

richライブラリは、豪華(rich)に出力できるライブラリです。
本記事では、richライブラリの使い方を紹介します。

やすひら

richライブラリの使い方を紹介します

この記事でわかること
  • richライブラリとは
  • richライブラリの使い方
目次

richライブラリとは

richライブラリは、豪華(rich)に出力できるライブラリです。
richライブラリを利用することで、ターミナル上でカラフルな出力ができるようになります。
また、表やソースコード、ツリー構造、Markdownなど、わかりやすく表示することができます。

画像

richライブラリのインストール

pipでライブラリをインストールします。

コマンドライン

pip install rich

richライブラリをインストールします。

richライブラリの使い方

richライブラリの使い方を紹介します。

色をつけて表示

色をつけて表示します。

ソースコード

from rich import print

print("[bold green]成功![/bold green]")
print("[red]エラー[/red]が発生しました")
print("これは [bold]太字[/bold] です")

コマンド実行結果

色をつけて表示できました。

コンソールで色をつけて表示

コンソールで色をつけて表示します。

ソースコード

from rich.console import Console

console = Console()

console.print("Hello [bold cyan]Rich[/bold cyan]!")
console.print("Warning!", style="bold yellow")

コマンド実行結果

コンソールで色をつけて表示できました。

表を表示

表を表示します。

ソースコード

from rich.table import Table
from rich.console import Console
import psutil

console = Console()

cpu_percent = psutil.cpu_percent()
mem = psutil.virtual_memory()

table = Table(title="システムステータス")

table.add_column("項目", style="cyan")
table.add_column("値", style="green")

table.add_row("CPU", f"{cpu_percent}%")
table.add_row("Memory", f"{mem.percent}%")
table.add_row("Status", "OK")

console.print(table)

コマンド実行結果

表を表示できました。

進捗状況を表示

進捗状況を表示します。

ソースコード

from rich.progress import track
import time

for i in track(range(10), description="処理中..."):
    time.sleep(0.5)

コマンド実行結果

進捗状況を表示できました。

複数の進捗状況を表示

複数の進捗状況を表示します。

ソースコード

from rich.progress import Progress
import time

with Progress() as progress:
    task1 = progress.add_task("Task A", total=100)
    task2 = progress.add_task("Task B", total=50)

    while not progress.finished:
        progress.update(task1, advance=1)
        progress.update(task2, advance=0.5)
        time.sleep(0.1)

コマンド実行結果

複数の進捗状況を表示できました。

リアルタイムで表示

リアルタイムで表示します。

ソースコード

from rich.live import Live
from rich.table import Table
import time
import psutil

def make_table():
    cpu_percent = psutil.cpu_percent()
    mem = psutil.virtual_memory()

    table = Table(title="リアルタイム監視")
    table.add_column("項目")
    table.add_column("値")

    table.add_row("CPU", f"{cpu_percent}%")
    table.add_row("Memory", f"{mem.percent}%")

    return table

with Live(make_table(), refresh_per_second=2) as live:
    for _ in range(10):
        time.sleep(1)
        live.update(make_table())

コマンド実行結果

リアルタイムで表示できました。

ログを表示

ログを表示します。

ソースコード

import logging
from rich.logging import RichHandler
import time

logging.basicConfig(
    level=logging.INFO,
    format="%(message)s",
    handlers=[RichHandler()]
)

log = logging.getLogger("app")
log.info("起動しました")
log.warning("警告です")

time.sleep(1)
log.error("エラー発生")

コマンド実行結果

ログを表示できました。

Markdownを表示

Markdownを表示します。

ソースコード

from rich.console import Console
from rich.markdown import Markdown

console = Console()

md_text = """
# [Python]richライブラリの概要と使い方

## richライブラリとは
richライブラリは、豪華(rich)に出力できるライブラリです。

## richライブラリの使い方

### 見出し
以下、見出しの出力です。

# 見出し1
## 見出し2
### 見出し3
#### 見出し4
##### 見出し5
###### 見出し6

### 箇条書き
以下、箇条書きの出力です。

- 箇条書き1
- 箇条書き2
- 箇条書き3

1. 箇条書き1
1. 箇条書き2
1. 箇条書き3

### 太字
以下、太字の出力です。

**太字**

### 斜体
以下、斜体の出力です。

*斜体*

### 引用
以下、引用の出力です。

> 引用

### 水平線
以下、水平線の出力です。

---

### コード
以下、コードの出力です。

`コード`

```python
from rich.console import Console

console = Console()

console.print("Hello [bold cyan]Rich[/bold cyan]!")
console.print("Warning!", style="bold yellow")
"""

markdown = Markdown(md_text)
console.print(markdown)

コマンド実行結果

Markdownを表示しました。

オブジェクトを表示

オブジェクトを表示します。

ソースコード

from rich.console import Console
from rich import inspect

console = Console()

class Tanuki:
    def __init__(self):
        self.name = "yasuhira"
        self.boots = True
        self.skils = ["python", "c", "java"]

obj = Tanuki()

inspect(obj, console=console)

コマンド実行結果

オブジェクトを表示しました。

ソースコードを表示

ソースコードを表示します。

ソースコード

from rich.console import Console
from rich.syntax import Syntax

console = Console()

code = """
from rich.console import Console

console = Console()

console.print("Hello [bold cyan]Rich[/bold cyan]!")
console.print("Warning!", style="bold yellow")
"""

syntax = Syntax(
    code,
    "python",
    theme="monokai",
    line_numbers=True
)

console.print(syntax)

print()

syntax = Syntax(
    code,
    "python",
    theme="github-dark",
    line_numbers=True
)

console.print(syntax)

print()

Syntax(
    code,
    "python",
    theme="dracula",
    line_numbers=True,
    indent_guides=True,
    word_wrap=True
)

console.print(syntax)

コマンド実行結果

ソースコードを表示しました。

ツリー構造を表示

ツリー構造を表示します。

ソースコード

from rich.console import Console
from rich.tree import Tree

console = Console()

tree = Tree("home")

script = tree.add("script")

sample_code = script.add("sample-code")
sample_code.add("README.md")

src = sample_code.add("src")
src.add("test")
src.add("main.py")

console.print(tree)

コマンド実行結果

ツリー構造を表示しました。

プロンプト形式で表示

プロンプト形式で表示します。

ソースコード

from rich.prompt import Prompt
from rich.console import Console

console = Console()

console.print("[bold magenta]Chat started (exitで終了)[/bold magenta]")

while True:
    msg = Prompt.ask("[cyan]You[/cyan]")
    if msg.lower() in ("exit", "quit"):
        break
    console.print(f"[green]AI[/green]: わたしはAIです。")

コマンド実行結果

プロンプト形式で表示しました。

まとめ

Pythonのrichライブラリについて紹介しました。

richライブラリは
  • Pythonで見やすい表示ができる
  • 進捗状況を表示できる
  • ログを表示できる
  • 表を表示できる
  • リアルタイムで表示できる
  • Markdownを表示できる
  • オブジェクトを表示できる
  • ソースコードを表示できる
  • ツリー構造を表示できる
  • プロンプト形式で表示できる

Pythonのrichライブラリを利用すると、見やすい表示のCLIアプリを作成することができます。
通常のCLIアプリより豪華(rich)なCLIアプリを作成したい場合は、活用すると良いと思います。

  • URLをコピーしました!
目次