1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2024

Day 14

デバッグに重宝するIceCreamライブラリ

Posted at

はじめに

とあるコミュニティに所属しており,その中でふと話題になってからすっかりハマってしまったライブラリIceCreamについて紹介したいと思います.

IceCreamって?

デバッグに非常に便利なメソッドicを提供するライブラリです.
print文でも実装できるがめんどくさい.そんな時に大きな助けになってくれます.

IceCreamの使いかた

使い方は非常に簡単で,pip install icecreamを実行し,from icecream import icでインポートするだけです.
サンプルコードを確認してみます.

icecream_sample.py
from icecream import ic 


ic.enable()
ic()

def foo():
    ic()
    return 42

def bar():
    ic()
    return {'A': 1, 'B': [2, 3]}

hoge = ic(foo())
ic(hoge)

hoge = ic(bar())
ic(hoge)

実行結果は以下の通り.(ベースイメージがUbuntuのDockerコンテナ内での実行結果です)

スクリーンショット 2024-11-23 23.07.15.png

icメソッドには大きく2つの使い方があります.1つ目は引数与えずに実行する方法,もう一つが引数を与える方法です.

引数を与えない場合,実行位置(行数・関数名)と時刻が標準出力に投げられます.すなわち,ic()と記述するだけでその場所の実行が適切におこなわれているかがわかります.

ic()    # 行数・関数名・時刻が標準出力に

次に,引数を与える場合です.
関数や変数を与えることができ,関数を与える場合にはその関数の返り値を受け取ることができます.printとf-stringを用いれば同様の実装が可能ですが,面倒です.

ic(hoge)            # hogeの値を出力
hoge = ic(fuga())   # fuga()の実行結果を出力し,返り値をhogeに格納

# print(f'{hoge = }')    # print文で書くとこんな感じ

ここまでであれば,手癖で慣れている人にとっては大きな差にならないかもしれませんが,要素数が大きな返り値・変数の時に威力を発揮します.

icecream_sample_2.py
from icecream import ic 


ic.enable()
ic()


def foo_large():
    ic()
    return {idx: [idx_i for idx_i in range(idx)] for idx in range(10)}


hoge = ic(foo_large())
ic(hoge)

実行結果は以下の通りです.
見ていただいてわかるように,ある程度の大きさになると見やすい形に整形してくれます.pprintを用いるなどの方法もありますが,それをするなら個人的にはicだけで良いのではないかと感じています.

スクリーンショット 2024-11-23 23.21.50.png

補足

私の環境(ベースイメージがUbuntuのDockerコンテナ)だけかもしれませんが,ic.enable()icメソッド前に付けなければうまく動作しませんでした.

逆のメソッドとしてic.disinable()というものもあり,デバッグモードの一括管理も可能です.

最後に

IceCreamライブラリを利用し始めてからというもの,どういう訳かIceCreamを使ってみたという記事がよくレコメンドされます.(推薦アルゴリズムの影響か,はたまた流行り始めているのか)
個人的には気に入りました.

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?