このガイドでは、サードパーティライブラリ (OpenAI など) を Weave TypeScript SDK と統合する方法について説明します。アプリケーション内でサポートされるライブラリへの Call を Weave で自動的にトレースしたい TypeScript 開発者を対象としています。
Weave は自動インストルメンテーションをサポートしているため、セットアップが簡単になり、手動で設定する手間も軽減されます。
変更点
PR #4554 以降、Weave は読み込み時に OpenAI などのサポートされるライブラリに自動でパッチを適用します。次のように手動でラップする必要はなくなりました。ほとんどの場合、この処理は Weave が自動的に行います。ただし、エッジケースが発生する場合があります。
TypeScript project で Weave インテグレーションを使用する
以下のセクションでは、project で使用しているモジュールシステムを確認する方法と、Weave がサポート対象のサードパーティライブラリを自動的にインストルメントできるように project を設定する方法について説明します。TypeScript project では CommonJS または ESM のいずれかのモジュールシステムを使用できます。必要なセットアップは、両者で若干異なります。
どのタイプの project かわからない場合
次のようなツールを使って TypeScript ファイルを直接実行する場合:
環境によっては、モジュールシステムが暗黙的に決定される場合があります。動作を一貫させるには、package.json ファイルと tsconfig.json ファイルを明示的に定義してください。
project で CommonJS と ESM のどちらが使用されているかを判別するには、package.json の type フィールドを確認します。
type が "module" の場合、project は ESM を使用します。
type フィールドが存在しないか "commonjs" に設定されている場合、project はデフォルトで CommonJS を使用します。
CommonJS project を設定する
CommonJS project では、追加の設定なしで自動インストルメンテーションが機能します。
project を CommonJS 用に設定するには、次の手順を実行します。
-
package.json を作成または更新します。
-
CommonJS と互換性のある設定で
tsconfig.json を作成します。
これらの設定により、TypeScript は CommonJS 向けにコンパイルするようになります。
-
module: "CommonJS"。モジュールを CommonJS 形式 (require または module.exports) にコンパイルします。
このコンパイラーオプションの詳細については、TypeScript - Module を参照してください。
-
target: "es2022" (推奨)。最近の Node.js バージョンと互換性のあるモダンな JavaScript を出力します。
このコンパイラーオプションの詳細については、TypeScript - Target を参照してください。
-
rootDir: "."。tsconfig.json を含むディレクトリを入力ファイルのルートとして扱います。TypeScript はこれを outDir と組み合わせて使用し、ソースフォルダーの構成を出力先にそのまま反映します。
このコンパイラーオプションの詳細については、TypeScript - Root Dir を参照してください。
-
outDir: "dist"。生成された JavaScript やその他のコンパイラー出力を dist フォルダーに書き込みます。
このコンパイラーオプションの詳細については、TypeScript - Out Dir を参照してください。
-
Weave とその他の必要なライブラリをインストールします。
-
TypeScript ファイルをコンパイルします。
サンプルファイル
test.ts の場合:
これにより、ファイルが dist/test.js にコンパイルされます。
-
コンパイルしたファイルを Node.js で実行します。
これで CommonJS project の設定が完了し、コードの実行時に Weave がサポートされるライブラリを自動的にインストルメントするようになりました。CommonJS は Node.js の require モジュールローダーを使用するため、ESM project で必要な --import フラグを使わなくても、Weave はサポートされるライブラリを自動的にインストルメントできます。
ESM project を設定する
ESM の TypeScript project で Weave を使用するには、project を Node.js ESM 向けに設定してコードをコンパイルし、--import フラグを付けて Node.js を起動します。これにより、Weave は他のモジュールが読み込まれる前にインストルメンテーションを登録できます。
project を ESM 向けに設定するには、次の手順を実行します。
-
package.json を作成または更新します。
-
Node 互換の ESM 設定を含む
tsconfig.json を作成します。
これらの設定により、TypeScript は最新の Node.js ESM 向けにコンパイルを行います。
-
module: "nodenext":Node.js ESM のセマンティクスに従ってモジュールをコンパイルします。
このコンパイラーオプションの詳細については、TypeScript - Module を参照してください。
-
moduleResolution: "nodenext":モジュール解決が Node.js ESM のルールに従うようにします。
このコンパイラーオプションの詳細については、TypeScript - Module Resolution を参照してください。
-
target: "es2022" (推奨) :最近の Node.js バージョンと互換性のあるモダンな JavaScript を出力します。
このコンパイラーオプションの詳細については、TypeScript - Target を参照してください。
-
rootDir: ".":tsconfig.json を含むディレクトリを入力ファイルのルートとして扱います。TypeScript はこの設定と outDir を組み合わせて、ソースのフォルダー構成を出力先に再現します。
このコンパイラーオプションの詳細については、TypeScript - Root Dir を参照してください。
-
outDir: "dist":生成された JavaScript やその他のコンパイラーの出力を dist フォルダーに書き込みます。
このコンパイラーオプションの詳細については、TypeScript - Out Dir を参照してください。
-
Weave と、その他の必要なライブラリをインストールします。
-
TypeScript ファイルをコンパイルします。
サンプルファイル
test.ts の場合:
これにより、ファイルが dist/test.js にコンパイルされます。
-
Weave のインストルメンテーションをプリロードして、コンパイル済みファイルを Node.js で実行します。
--import フラグを指定すると、weave/instrument モジュールが他のモジュールより先に読み込まれるため、Weave はサポートされるライブラリとインテグレーションを自動的にインストルメントできます。
Weave は、実行する project にローカルでインストールしておく必要があります。
これで ESM project の設定は完了です。Weave は他のモジュールより先にインストルメンテーションをプリロードし、サポートされるライブラリへの Call を自動的にトレースします。
高度な使い方とトラブルシューティング
以下のセクションでは、TypeScript SDK の自動パッチ適用が想定どおりに機能しない場合のエッジケースと回避策について説明します。たとえば、ESM のみの環境、Next.js などのバンドラー構成、制約のあるランタイム環境では問題が発生することがあります。トレースが記録されない場合やインテグレーションに問題がある場合は、まずこちらを参照してください。
NODE_OPTIONS を使用する (ESM のみ)
NODE_OPTIONS は環境内のすべての Node.js プロセスに影響し、副作用が生じる可能性があるため、慎重に使用してください。
ESM project で CLI フラグを渡せない場合 (CLI ツールやフレームワークの制約がある場合など) は、NODE_OPTIONS 環境変数を設定します。
バンドラーとの互換性
Next.js などの一部のフレームワークやバンドラーでは、サードパーティライブラリのバンドル方法によって、Node.js が実行時にそれらのライブラリにパッチを適用できなくなる場合があります。
この状況に該当する場合は、次の手順を試してください。
-
バンドラーの設定で、LLM ライブラリを外部モジュールとして指定します。これにより、バンドラーがこれらのライブラリをバンドルしなくなるため、Weave が実行時に正しくパッチを適用できるようになります。
次の例は、
next.config.js の設定で openai パッケージを外部モジュールとして指定し、バンドラーによってバンドルされないようにする方法を示しています。モジュールは実行時に読み込まれるため、Weave が自動的にパッチを適用してトラッキングできます。Next.js などのフレームワークで自動インストルメンテーションを有効にするには、この設定を使用してください。
-
それでもパッチの適用に失敗する場合は、手動インストルメンテーションに切り替えてください。
手動パッチ適用 (フォールバック)
手動パッチ適用は従来の方法です。自動パッチ適用が機能しない場合にのみ使用してください。
場合によっては、引き続き手動インストルメンテーションを使用する必要があります。