2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pprintとrichで快適デバッグ【list型やdict型を整形してターミナルを見やすく改善】

Last updated at Posted at 2024-12-03

はじめに

ある変数に想定データが入っているかどうかを確認をする際、私は今までターミナルにprintで出力していました。

少ないデータを見るときはprintで十分なのですが、何百件ほどあるデータを見るときは、何も改行・インデントがないため探したいデータを見つけるのに一苦労です。

そこで今回は、ターミナル内のlist型dict型変数を整形して見やすく改善できるpprintや更に見やすくできるrichをご紹介致します。

pprintとは?

pprintはPython標準ライブラリに含まれているPretty Printモジュールです。通常のprint関数だと複雑なデータ構造が一行に詰め込まれて読みにくくなりますが、pprintを使うと見やすい形に整形して表示してくれます。

pprintの使い方

例えば、下記のような複雑な構造をしたdict型の変数dataについて考えます。

import pprint

# 複雑なネスト構造を持つ辞書を定義
data = {
    "users": [
        {"id": 1, "name": "Alice", "roles": ["admin", "editor"]},
        {"id": 2, "name": "Bob", "roles": ["viewer"]},
        {"id": 3, "name": "Charlie", "roles": ["editor", "viewer"]},
    ],
    "settings": {
        "theme": "dark",
        "notifications": {"email": True, "sms": False},
        "features": ["feature1", "feature2", "feature3"],
    },
    "logs": [
        {"timestamp": "2024-11-27T10:00:00", "action": "login", "user": "Alice"},
        {"timestamp": "2024-11-27T10:05:00", "action": "view", "user": "Bob"},
    ],
}

print('pprintを用いない場合')
print(data)

print('pprintを用いた場合')
pprint.pprint(data)

・出力結果
pprintを用いない場合
{'users': [{'id': 1, 'name': 'Alice', 'roles': ['admin', 'editor']}, {'id': 2, 'name': 'Bob', 'roles': ['viewer']}, {'id': 3, 'name': 'Charlie', 'roles': ['editor', 'viewer']}], 'settings': {'theme': 'dark', 'notifications': {'email': True, 'sms': False}, 'features': ['feature1', 'feature2', 'feature3']}, 'logs': [{'timestamp': '2024-11-27T10:00:00', 'action': 'login', 'user': 'Alice'}, {'timestamp': '2024-11-27T10:05:00', 'action': 'view', 'user': 'Bob'}]}

pprintを用いた場合
{'logs': [{'action': 'login',
           'timestamp': '2024-11-27T10:00:00',
           'user': 'Alice'},
          {'action': 'view',
           'timestamp': '2024-11-27T10:05:00',
           'user': 'Bob'}],
 'settings': {'features': ['feature1', 'feature2', 'feature3'],
              'notifications': {'email': True, 'sms': False},
              'theme': 'dark'},
 'users': [{'id': 1, 'name': 'Alice', 'roles': ['admin', 'editor']},
           {'id': 2, 'name': 'Bob', 'roles': ['viewer']},
           {'id': 3, 'name': 'Charlie', 'roles': ['editor', 'viewer']}]}

このように、pprintを用いることで冗長に見えていた出力結果が、listの要素毎・dictの要素毎に表示されるようになり、かなり視覚性が向上します。

また、pprintはPython標準ライブラリに含まれているためインストールなどは不要で冒頭にimport pprintと記載するだけで使用することができます。

richとは?

richは、Pythonのターミナル出力をより見やすくするためのライブラリです。

データを色付きで表示したり、スタイルを追加したりすることができ、ターミナルでのデバッグ作業をより快適にしてくれます。

richの使い方

まず、richを使うためにはライブラリをインストールする必要があります。以下のコマンドでインストールできます。

pip install rich

その後、richライブラリから必要なモジュールをインポートし、使用します。

# 必要なモジュールをインポート
from rich.console import Console

# 複雑な辞書データの準備
data = {
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "Machine Learning", "Data Analysis"],
    "experience": {
        "company_1": {"name": "sample_company1", "role": "Intern", "years": 1},
        "company_2": {"name": "sample_company2", "role": "Engineer", "years": 3},
    },
    "hobbies": ["Reading", "Cycling", "Gaming"],
}

# 普通の出力(rich を使わない場合)
print("\n=== 普通の出力 ===")
print(data)

# rich を使った出力
console = Console()
console.print("\n[bold yellow]=== Rich を使った出力 ===[/bold yellow]")
console.print(data, highlight=True)

・出力結果

スクリーンショット 2024-12-02 15.21.03.png

このように、richを使わない場合と使った場合では分かりやすさが一目瞭然です。

また、richを使うと以下のような機能を活用できます:

  • カラー出力:ターミナルに色をつけて、データ構造をより見やすくする
  • テキストのスタイル:太字やイタリック、下線などのスタイルを使って強調表示
  • テーブル(表):表形式でデータをきれいに整形して表示
  • 進捗バー:プログラムの進行状況を視覚的に表示
  • マークダウン表示:ターミナル内でマークダウンをレンダリングして表示

pprintとrichの比較と使い分け

比較表

特徴 pprint Rich
標準ライブラリ ✘(別途インストールが必要)
色付き表示
カスタマイズ性 シンプルで必要最低限 高い(カラーやスタイルの変更が可能)
主な用途 シンプルな整形出力 視覚的に綺麗な出力

使い分けの基準

  • pprint

    • シンプルに整形したい場合に便利
    • 標準ライブラリなので追加インストール不要で手軽
    • ネストの浅いデータ構造や単純なデバッグ向け
  • Rich

    • 色付きやフォーマットの美しさを重視したい場合に最適
    • 視覚的な見やすさが必要なデバッグやデータ可視化に活躍
    • ターミナル環境に依存するが、より分かりやすい出力が可能

最後に

見やすいターミナルを構築することで作業効率が大幅にUPすると思います。
「他にも、こんな方法があるよ」という意見がある方はぜひ教えて下さい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?