undici
Node.js向けのHTTPクライアントライブラリ
https://github.com/nodejs/undici
Claude Code.icon
イタリア語で「11」を意味します(HTTP/1.1の「1.1」にちなんだ命名)。
概要
node:httpモジュールに代わる、ゼロ依存・高性能なHTTPクライアント
Node.js v18以降で導入されたグローバルfetch()の内部実装として採用されている
Node.jsコアチームが開発・メンテナンスしている
主な特徴
1. 高性能
C言語で書かれたHTTPパーサー(llhttp)を使用
コネクションプーリングやHTTPパイプラインを効率的に処理
従来のhttpモジュールより大幅に高速
2. 主要API
code:js
import { request, fetch, Agent, Pool } from 'undici'
// request API(低レベル、高速)
const { statusCode, body } = await request('https://example.com')
const data = await body.json()
// fetch API(Web標準互換)
const res = await fetch('https://example.com')
const json = await res.json()
3. コネクション管理
Pool: 単一ホストへの接続プール
Client: 単一接続の管理
Agent: 複数ホストへの接続を自動管理
BalancedPool: 複数オリジンへのロードバランシング
Node.jsとの関係
table:_
Node.jsバージョン 状況
v16以前 別途npm install undiciが必要
v18+ グローバルfetch()の内部実装として同梱
v22+ undiciの多くのAPIが安定版に
なぜ生まれたか
Node.jsの従来のhttp.requestには以下の課題があった:
APIが古く、コールバックベース
パフォーマンスに改善余地があった
Web標準のfetch()がなかった
HTTP/1.1のパイプライン処理が不十分
undiciはこれらを解決するためにゼロから書き直されたものです。
使い分け
fetch()で十分な場合 → そのまま使えばOK(内部でundiciが動いている)
細かい制御が必要な場合 → undici.request()やPool/Clientを直接使う(タイムアウト、リトライ、接続数の制御など)