「APIコールが失敗したとき、ちゃんとリトライ処理を書くの、地味に面倒くさいですよね…」そう感じたことがある方、けっこう多いんじゃないでしょうか。😅
今、GitHubでBackonという新しいPythonライブラリが注目を集めています。外部依存ゼロ・サーキットブレーカー内蔵・async完全対応という、かゆいところに手が届きすぎる構成が話題になっています。
🔍 Backonってどんなライブラリ?

ざっくり言うと、「失敗したら自動で何度か試し直してくれる仕組みを、シンプルに書けるようにしてくれるライブラリ」です。
特徴をまとめるとこんな感じです👇
- ✅ ゼロ依存(zero deps):pip install以外に何もいらない
- ✅ サーキットブレーカー対応:連続失敗したら一定時間リクエストを止めてくれる
- ✅ async/await ネイティブ対応:非同期コードでもそのまま使える
- ✅ デコレータ一発で導入OK:既存コードへの影響が最小限
💡 サーキットブレーカーって何?
聞き慣れない言葉かもしれませんが、イメージとしては「電気のブレーカー」と同じです。
過負荷になったら自動で遮断して、全体が壊れるのを守ってくれる仕組みですね。APIが何度叩いても失敗し続けるとき、無限リトライでサーバーを余計に痛めてしまう問題を防いでくれます。これ、地味に大事なんですよね。
📦 基本的な使い方
まずはインストールから。
pip install backon
あとはデコレータをつけるだけです。ポイントをまとめるとこんな感じです👇
import backon
import httpx
# 指数バックオフで最大3回リトライ
@backon.retry(
strategy=backon.ExponentialBackoff(base=2, max_retries=3),
retry_on=(httpx.HTTPError,), # リトライする例外を指定
)
def fetch_data(url: str) -> dict:
# 外部APIを叩く処理
response = httpx.get(url)
response.raise_for_status()
return response.json()
# 非同期バージョンもほぼ同じ書き方でOK!
@backon.retry(
strategy=backon.ExponentialBackoff(base=2, max_retries=3),
retry_on=(httpx.HTTPError,),
)
async def fetch_data_async(url: str) -> dict:
async with httpx.AsyncClient() as client:
response = await client.get(url)
response.raise_for_status()
return response.json()
ここが重要です。
strategyでリトライの間隔・回数を柔軟に指定できるretry_onでリトライしたい例外クラスを絞れる(無闇にリトライしない)- 同期・非同期で書き方がほぼ変わらないので学習コストが低い
🔄 tenacity との違いは?
Pythonのリトライといえばtenacityが有名ですよね。Backonとの違いは大きく2点です。
- 外部依存なし:tenacityはそれ自体が軽量ですが、Backonはさらに依存をゼロに絞っています
- サーキットブレーカーが最初から組み込まれている:tenacityでは別途実装が必要なケースが多い部分をカバーしています
小〜中規模のプロジェクトで「シンプルに使いたい」ならBackonはかなりアリな選択肢です。💪
まとめ
Backonは「依存ゼロ・サーキットブレーカー内蔵・async対応」という三拍子が揃ったPythonリトライライブラリです。APIを使うプロジェクトなら、導入するだけで堅牢性が一気に上がりますよ。
外部APIを叩く処理を書いている方は、ぜひ一度試してみてください!💡 GitHubリポジトリは https://github.com/Llucs/backon からチェックできます。
📚 関連商品・おすすめ書籍
もしも
ELEGOO Arduino用UNO R3スターターキット レベルアップ チュートリアル付 mega2560 r3 nanoと互換 [並行輸入品]
チュートリアル付きのArduino入門セット
※本記事にはアフィリエイトリンクが含まれます。




