upfetch について
upfetchは、再利用可能なfetchクライアントの使い方を説明するガイドです。リクエストの既定値、検証、ライフサイクル処理が必要なTypeScript開発者向けに、リクエスト・レスポンス整形やリトライ、タイムアウト、フックを扱います。
主な機能
- 01リクエストごとの動的な既定値設定
- 02認証、パラメーター、リクエストボディの整形
- 03スキーマによるランタイム検証
- 04レスポンス解析とエラー処理の設定
- 05リトライ、タイムアウト、ライフサイクルフック
活用シーン
- 01APIリクエスト間でベースURLとヘッダーを再利用
- 02サーバーレスポンスのデータ構造を検証
- 03リクエストにリトライとタイムアウトを追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ l-blondy/ up-fetch --skill upfetchインストール後、Claude Code で/upfetchを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/auth-and-request-shaping.mdclient-setup-and-dynamic-defaults.mdretries-timeouts-and-lifecycle.mdstreaming-and-runtime-caveats.mdvalidation-parsing-and-errors.md詳細
upfetch
再利用可能なフェッチクライアントが必要な場合は、リクエストごとのデフォルト設定、自動的なリクエスト/レスポンスの整形、実行時検証、リトライ、ライフサイクルフックを備えた up-fetch を使用してください。
基本的な考え方
up(fetchFn, getDefaultOptions?)で再利用可能なクライアントを作成します。getDefaultOptions(input, options, ctx)はリクエストごとに実行されます。upfetch(input, options?, ctx?)でリクエストを1回実行します。SKILL.mdは概要の記述にとどめ、詳細についてはreferences/配下の該当ファイルを読み込んでください。
最小パターン
import { up } from 'up-fetch'
import { z } from 'zod'
export const upfetch = up(fetch, () => ({
baseUrl: 'https://api.example.com',
headers: {
Authorization: readToken() ? `Bearer ${readToken()}` : undefined,
},
timeout: 5000,
}))
const user = await upfetch('/users/1', {
schema: z.object({
id: z.number(),
name: z.string(),
}),
})
ワークフロー
- まず、クライアントのセットアップと動的なデフォルト設定を確認してください。
- リクエストに認証、パラメーター、ボディの整形、またはマージの動作が必要な場合は、認証とリクエストの整形を読んでください。
- レスポンスの契約が重要な場合は、検証、解析、エラーを読んでください。
- リトライ、タイムアウト、フックのタイミングが重要な場合は、リトライ、タイムアウト、ライフサイクルを読んでください。
- ストリーミングまたは実行時の注意点が重要な場合は、ストリーミングと実行環境の注意点を読んでください。
重要なルール
up()の第2引数には、プレーンオブジェクトではなく関数を渡してください。- 値を常に最新に保つため、認証情報などの可変デフォルト設定は、その関数内で読み取ってください。
- クエリー文字列や JSON を手動でシリアライズする代わりに、
paramsとbodyを使用してください。 - 実行時の信頼性が必要な場合は
schemaを使用してください。TypeScript のジェネリクスだけではペイロードを検証できません。 - エラーを値として扱う場合は、
parseResponseに依存する前にreject: () => falseを設定してください。 - インポートした
undici.fetchよりもglobalThis.fetchを優先してください。
リファレンス
コメント
Markdown 対応