Rich
Pythonのターミナル出力を豊かにするライブラリ。色付け、テーブル、プログレスバー、構文ハイライトなどの機能を提供し、TUI開発の基盤として使用されます。
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
スター履歴
データ取得日時: 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)