create-provider-package-with-core について
create-provider-package-with-coreは、`@prefactor/core`を基盤にプロバイダー用アダプターパッケージを作る開発スキルです。PrefactorにSDKやフレームワークの連携を追加する開発者向けに、コアのトレース機能を再利用し、固有処理を薄いアダプターに分ける方法を示します。
主な機能
- 01アダプターの責務範囲を定義
- 02コアプリミティブによるトレース実装
- 03コンテキスト伝播とSpan関係の維持
- 04ストリーミングの完了、キャンセル、エラー処理
- 05テレメトリー、秘匿化、ペイロード上限の検証
活用シーン
- 01Prefactorアダプターがないプロバイダー向けの連携構築
- 02SDKのリクエストとレスポンスをコアのトレースに対応付け
- 03ストリーミングやエラー時のトレース動作の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ prefactordev/ typescript-sdk --skill create-provider-package-with-coreインストール後、Claude Code で/create-provider-package-with-coreを入力して読み込まれたか確認します。
同梱ファイルreferences/provider-package-checklist.md
詳細
Core を使用したプロバイダーパッケージの作成
@prefactor/core を基盤として、独自のプロバイダーアダプターパッケージを構築します。
基本原則:@prefactor/core はトレーシングのインフラストラクチャを担い、アダプターはプロバイダー固有の API をマッピングします。
トリガーフレーズ
次のようなパターンを含むリクエストで、このスキルを適用します。
- 「新しいプロバイダーパッケージを追加する」
- 「@prefactor/core を使用してプロバイダー X をインストゥルメントする」
- 「自分のフレームワークには Prefactor アダプターがない」
- 「Prefactor 用のカスタム SDK 統合を構築する」
ワークフロー
- アダプターの境界を定義します。
- プロジェクト内に小規模なアダプターパッケージを作成します。
- Core のプリミティブを使ってインストゥルメンテーションを実装します。
- アプリでトレースの動作を検証します。
- 本番環境での使用に向けて堅牢化します。
1) アダプターの境界を定義する
- アダプターは薄く保ちます。リクエスト/レスポンスのマッピング、ミドルウェアフック、ペイロードの適応を担います。
- ライフサイクル、コンテキスト、シリアライズ、トランスポートの動作には
@prefactor/coreを再利用します。 - プロバイダー接頭辞付きのスパンタイプ(
<provider>:agent、<provider>:llm、<provider>:tool)を使用します。
2) 小規模なアダプターパッケージを作成する
アプリまたはワークスペース内に、専用のモジュール/パッケージ(例:prefactor-provider-<provider>)を作成します。
src/index.ts公開エントリーポイントsrc/<provider>-middleware.tsプロバイダー統合ラッパーtests/トレーシングの動作を網羅package.json@prefactor/coreへの依存関係を指定
次のパッケージ構成を使用します。
- ESM のインポート/エクスポートを使用し、相対インポートには明示的に
.jsを指定します。 src/index.tsからは、安定したアダプターのエントリーポイントのみをエクスポートします。
3) Core のプリミティブを使ってインストゥルメンテーションを実装する
- トレーシング、コンテキスト伝播、設定、トランスポートヘルパーには
@prefactor/coreを依存先として使用します。 - アダプターが
initとwithSpanのようなヘルパー API を公開する場合は、同じトレーサーソースに関連付けます。アダプターのヘルパーを介さずに Core のwithSpanを呼び出す場合は、明示的にトレーサーを渡します。 - プロバイダーの実行パスをコンテキスト内(
SpanContext.runAsync(...))でラップし、親/子スパンの関係を維持します。 - 入力/出力と使用量のメタデータを、利用可能な場合に取得し、切り詰め/秘匿化のための保護策を適用します。
- エラー発生時はスパンに失敗データを記録し、元のエラーを再スローします。
- ストリーミングを行うプロバイダーでは、完了、キャンセル、ストリームエラーの各タイミングでスパンを終了します。
4) アプリでトレースの動作を検証する
統合テストまたはローカルのスモークスクリプトで、次の項目を検証します。
- 親/子スパンの関係
- 成功時とエラー時のスパン終了
- ストリーミングの完了/キャンセル/エラー時の終端パス
- ペイロードの取得とサイズ制限
- プロバイダー接頭辞付きのスパンタイプ
設定済みの Prefactor トランスポートを通じてテレメトリが送信されることを確認します。
5) 本番環境での使用に向けて堅牢化する
ロールアウトの前に、次の項目を確認します。
- インストゥルメンテーションがユーザーのリクエストを決してクラッシュさせない
- スパンが必ず一度だけ終了する
- シークレットが秘匿化され、ペイロードのサイズが制限されている
- エラーを再スローする際に、元のスタックと型が保持される
クイックリファレンス
| 判断事項 | 配置場所 |
|---|---|
| 再利用可能なトレーシング/コンテキストヘルパー | @prefactor/core |
| プロバイダーのリクエスト/レスポンスのマッピング | 自分のアダプターパッケージ |
| スパンのライフサイクルロジック | @prefactor/core +薄いラッパー呼び出し |
| プロバイダー専用のミドルウェア/ラッパー | 自分のアダプターパッケージ |
参考資料
- 実装チェックリストには
references/provider-package-checklist.mdを使用します。
よくある間違い
- Core を再利用せず、プロバイダーごとにトレーシングのライフサイクルを再実装する。
- プロバイダー接頭辞付きのタイプではなく、汎用的なスパン名を使用する。
- 切り詰め/秘匿化せずに生のペイロードを取得する。
- インストゥルメンテーション後にプロバイダーのエラーを握りつぶす。
コメント
Markdown 対応