Rich

Pythonのターミナル出力を豊かにするライブラリ。色付け、テーブル、プログレスバー、構文ハイライトなどの機能を提供し、TUI開発の基盤として使用されます。

pythontuilibraryterminalstylingoutput

GitHub概要

Textualize/rich

Rich is a Python library for rich text and beautiful formatting in the terminal.

スター52,884
ウォッチ537
フォーク1,859
作成日:2019年11月10日
言語:Python
ライセンス:MIT License

トピックス

ansi-colorsemojimarkdownprogress-barprogress-bar-pythonpythonpython-librarypython3richsyntax-highlightingtablesterminalterminal-colortracebacktracebacks-richtui

スター履歴

Textualize/rich Star History
データ取得日時: 2025/7/17 23:24

ライブラリ

Rich

概要

RichはPythonのターミナル出力を豊かにするライブラリです。色付け、テーブル、プログレスバー、構文ハイライト、マークダウンレンダリングなどの機能を提供し、美しく機能的なターミナルアプリケーションの構築を支援します。

詳細

Richは2020年にWill McGuganによって開発され、Pythonのターミナル出力を革新的に改善しました。単純なprintの代替から本格的なTUIアプリケーションの基盤まで、幅広い用途で使用されています。Textualフレームワークの基盤ライブラリとしても機能しています。

主要な特徴

  • 豊富なテキストスタイリング: 色、太字、斜体、下線など多様なスタイル
  • テーブル表示: カスタマイズ可能な境界線とスタイルを持つテーブル
  • プログレスバー: ライブ更新される進捗表示
  • 構文ハイライト: 多言語対応のコードハイライト
  • マークダウンレンダリング: ターミナルでのMarkdown表示
  • パネルとボーダー: 内容を囲むボーダー付きパネル
  • ツリー表示: 階層データの視覚化
  • Pretty Printing: Pythonオブジェクトの美しい表示
  • ログ機能: リッチフォーマットのログ出力
  • トレースバック改善: エラー表示の見やすさ向上

アーキテクチャ

Richの中核はConsoleクラスで、以下の機能を提供します:

  • 自動ターミナル検出: 色対応、サイズ検出
  • レンダリングプロトコル: __rich__()メソッドによる拡張可能な出力
  • セグメント生成: 最下位レベルの表示単位
  • スタイルシステム: 柔軟なスタイル適用機構

メリット・デメリット

メリット

  • 簡単で直感的なAPI
  • 豊富な出力オプション
  • 高いカスタマイズ性
  • 優れたパフォーマンス
  • 自動的なターミナル互換性検出
  • Jupyter Notebook対応
  • 充実したドキュメント
  • アクティブなコミュニティ

デメリット

  • 単体では完全なTUIフレームワークではない
  • 複雑なインタラクティブUIには限界がある
  • 一部の古いターミナルでは機能制限
  • 大量の出力では性能に影響の可能性

主要リンク

書き方の例

from rich.console import Console
from rich.table import Table
from rich.progress import Progress, TaskID
from rich.syntax import Syntax
from rich.panel import Panel
from rich.tree import Tree
import time

# Console オブジェクトの作成
console = Console()

# 基本的なスタイル付きテキスト
console.print("Hello", style="bold red")
console.print("World", style="italic blue")

# テーブルの作成
table = Table(title="TUI Frameworks")
table.add_column("Language", style="cyan")
table.add_column("Framework", style="magenta")
table.add_column("Stars", justify="right", style="green")

table.add_row("Python", "Textual", "20,000+")
table.add_row("Go", "Bubble Tea", "15,000+")
table.add_row("Rust", "Ratatui", "8,000+")

console.print(table)

# プログレスバー
with Progress() as progress:
    task = progress.add_task("[green]Processing...", total=100)
    
    for i in range(100):
        time.sleep(0.01)
        progress.update(task, advance=1)

# 構文ハイライト
code = '''
def hello_world():
    print("Hello, Rich!")
    return True
'''

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

# パネル
console.print(Panel("This is a [bold blue]panel[/bold blue]!", title="Info"))

# ツリー構造
tree = Tree("🌳 Project Structure")
tree.add("📁 src/")
python_branch = tree.add("📁 python/")
python_branch.add("📄 textual.py")
python_branch.add("📄 rich.py")
tree.add("📄 README.md")

console.print(tree)

# マークダウンレンダリング
from rich.markdown import Markdown

markdown_text = '''
# Rich Library

This is **bold** and this is *italic*.

- Feature 1
- Feature 2
- Feature 3

```python
print("Code block with syntax highlighting")

'''

md = Markdown(markdown_text) console.print(md)