注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

TypeScript SDK

Compute Module 向けの TypeScript SDK(@palantir/compute-module)を使用すると、TypeScript または JavaScript でデプロイ済み関数を構築できます。この SDK は、スキーマ検証を伴う型安全な関数登録、構造化ロギング、および Foundry リソースを扱うためのユーティリティを提供します。

TypeScript SDK は次の機能を提供します。

  • ComputeModule:関数を作成および登録するためのメインクラス
  • SlsLogger:SLS 形式の構造化ロギング
  • Type(@sinclair/typebox から):実行時の型検証とスキーマ生成
  • リソースエイリアス管理を備えたパイプラインモードのサポート
  • ソースの資格情報の取得
  • Foundry サービス API へのアクセス

インストール

npm または yarn を使用して SDK をインストールします。

Copied!
1 npm install @palantir/compute-module
Copied!
1 yarn add @palantir/compute-module

関数を定義する

基本的な使い方

素の JavaScript を使用して関数を登録します。

Copied!
1 2 3 4 5 6 import { ComputeModule } from "@palantir/compute-module"; new ComputeModule() .register("addOne", async ({ value }) => ({ value: value + 1 })) .register("stringify", async ({ n }) => "" + n) .default(() => ({ error: "Unsupported query name" }));

スキーマ登録

TypeBox ↗ を使用すると、スキーマの自動推論を伴う型安全な関数登録ができます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { ComputeModule, SlsLogger } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const myModule = new ComputeModule({ logger: new SlsLogger(), definitions: { addOne: { input: Type.Object({ value: Type.Number(), }), output: Type.Object({ value: Type.Number() }), }, }, }); myModule.register("addOne", async ({ value }) => ({ value: value + 1 }));

スキーマ登録の利点:

  • 関数パラメーターの自動型推論
  • コンパイル時の型安全性
  • 実行時のスキーマ検証
  • Foundry への自動関数登録

ストリーミング出力

結果セットが大きい場合は、ストリーミングを使用してデータを順次送信します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import { ComputeModule } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const computeModule = new ComputeModule({ definitions: { greet: { input: Type.Object({ name: Type.String() }), output: Type.Array(Type.String()), }, }, }); // 書き込みごとに有効な JSON を生成する必要があります computeModule.registerStreaming("greet", async ({ name }, writeable) => { writeable.write(JSON.stringify("Hello, ")); writeable.write(JSON.stringify(name)); writeable.end(); });

複雑なデータ型を使用したストリーミング:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 const User = Type.Object({ name: Type.String(), role: Type.String(), active: Type.Boolean(), }); const computeModule = new ComputeModule({ definitions: { activeUsers: { input: Type.Object({ users: Type.Array(User) }), output: Type.Array(User), }, }, }); computeModule.registerStreaming("activeUsers", async ({ users }, writeable) => { for (const user of users) { if (user.active) { writeable.write(JSON.stringify(user)); } } writeable.end(); });

ストリーミングでは、出力タイプを Type.Array(...) として宣言する必要があります。各 write() 呼び出しは、有効な JSON を生成する必要があります。

ロギング

SLS ロガー(推奨)

Standard Logging Specification(SLS)形式の構造化ロギングには、SlsLogger を使用します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import { ComputeModule, SlsLogger } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const logger = new SlsLogger(); const myModule = new ComputeModule({ logger, definitions: { addOne: { input: Type.Object({ value: Type.Number() }), output: Type.Object({ value: Type.Number() }), }, }, }); myModule.register("addOne", async ({ value }) => { logger.info("Processing addOne", { input_value: String(value) }); return { value: value + 1 }; });

ログメソッド:

  • logger.debug(message, params?) - デバッグレベルのログ
  • logger.info(message, params?) - 情報レベルのログ
  • logger.warn(message, params?) - 警告ログ
  • logger.error(message, params?) - エラーログ

カスタムのキーと値のペアを第2引数として渡すことができ、ログエントリのパラメーターに追加されます。

また、log、info、warn、error メソッドを持つ任意のオブジェクト(たとえば console)をロガーとして使用できます。

デバッグとログの表示について詳しくはこちら。

パイプラインモード

リソースエイリアスを取得する

パイプラインモードでは、リソースエイリアスを使用して設定済みの入力と出力にアクセスします。

Copied!
1 2 3 4 import { ComputeModule } from "@palantir/compute-module"; const resourceId = ComputeModule.getResource("myResourceAlias"); const result = await someDataFetcherForId(resourceId);

環境の検出

実行環境の詳細を取得します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 import { ComputeModule } from "@palantir/compute-module"; const environment = ComputeModule.getEnvironment(); // Pipeline モード const buildToken = environment.type === "pipelines" ? environment.buildToken : undefined; // Functions モード const thirdPartyAppCredentials = environment.type === "functions" ? environment.thirdPartyApplication : undefined;

実行モードについて詳しくはこちら。

ソースを使用する

ソースの資格情報を取得する

外部システムの認証に使用するソースの資格情報にアクセスします。

Copied!
1 const myCredential = myModule.getCredential("MySourceApiName", "MyCredential");

起動時にソースを検証する

モジュールの設定でソースを宣言し、検証します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 const myModule = new ComputeModule({ sources: { MyApi: { credentials: ["MyCredential"] }, AnotherApi: {} // ソースの存在は検証しますが、特定の資格情報は検証しません } }); // ✅ 型チェックに合格します myModule.getCredential("MyApi", "MyCredential"); // ❌ 型エラーが発生します myModule.getCredential("YourApi", "YourCredential"); // ✅ 資格情報が宣言されていないソースでは、任意の資格情報名を使用できます myModule.getCredential("AnotherApi", "AnyString");

検証: ソースが宣言されている場合、モジュールは起動時にソースを検証し、コンパイル時の型安全性を提供します。宣言されていない場合、検証は行われません。

ソースの設定について詳しくはこちら。

Foundry サービスを取得する

Foundry サービス API のエンドポイントにアクセスします。

Copied!
1 2 3 import { FoundryService } from "@palantir/compute-module"; const streamProxyApi = myModule.getServiceApi(FoundryService.STREAM_PROXY);

これにより、プラットフォームへのイングレス用のソースを設定せずに、Foundry のエンドポイントを呼び出せます。

Docker の設定

Dockerfile の例

Copied!
1 2 3 4 5 6 7 8 9 10 FROM node:18-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --production COPY src . # USER は root 以外で、数値である必要があります USER 5000 CMD ["node", "index.js"]

コンテナの設定について詳しくはこちら。

GitHub リポジトリ

TypeScript SDK はオープンソースで、GitHub で利用可能です。