> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therefrain.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用例

> 一般的な自動化シナリオの実践的な SDK サンプル。

## ログインとデータ抽出

```typescript theme={null}
import { Refrain, loadRunbook } from "@refrainai/sdk";

const client = new Refrain({
  ai: {
    modelId: "claude-sonnet-4-6",
    provider: "anthropic",
    apiKey: process.env.ANTHROPIC_API_KEY!,
  },
  headless: true,
});

const runbook = await loadRunbook("./runbooks/login-and-extract.yaml");

const report = await client.execute(runbook, {
  contextMarkdown: "# 認証情報\n- ステージング環境を使用",
  variables: { email: "admin@example.com" },
  secrets: { password: process.env.APP_PASSWORD! },
  screenshotDir: "./screenshots",
});

// キャプチャした値にアクセス
for (const step of report.steps) {
  if (step.capturedValues) {
    console.log(`ステップ ${step.ordinal}:`, step.capturedValues);
  }
}

console.log(`結果: ${report.succeeded}/${report.totalSteps} 成功`);
await client.dispose();
```

## カスタムロガー

ロギングフレームワークとの統合：

```typescript theme={null}
import { Refrain, CallbackLogger, loadRunbook } from "@refrainai/sdk";
import type { LoggerFactory } from "@refrainai/sdk";

const loggerFactory: LoggerFactory = {
  createLogger: () =>
    new CallbackLogger((level, message) => {
      // ロガーに転送（例: winston, pino）
      console.log(`[refrain:${level}] ${message}`);
    }),
  createSpinner: () => ({
    start: (msg) => console.log(`[spinner] ${msg}...`),
    stop: (msg) => console.log(`[spinner] ${msg}`),
  }),
};

const client = new Refrain({
  ai: {
    modelId: "claude-sonnet-4-6",
    provider: "anthropic",
    apiKey: process.env.ANTHROPIC_API_KEY!,
  },
  loggerFactory,
  debug: true,
});

const runbook = await loadRunbook("./flow.yaml");
const report = await client.execute(runbook, {
  contextMarkdown: "",
  debugLogPath: "./debug.jsonl",
});

await client.dispose();
```

## ファイルのダウンロードとエクスポート

```typescript theme={null}
import { Refrain, loadRunbook } from "@refrainai/sdk";

const client = new Refrain({
  ai: {
    modelId: "claude-sonnet-4-6",
    provider: "anthropic",
    apiKey: process.env.ANTHROPIC_API_KEY!,
  },
});

const runbook = await loadRunbook("./runbooks/export-data.yaml");

const report = await client.execute(runbook, {
  contextMarkdown: "",
  outputDir: "./output",
  mergeDownloads: true,
});

if (report.downloadedFiles?.length) {
  console.log("ダウンロード済み:", report.downloadedFiles);
}

await client.dispose();
```

## 異なる AI プロバイダーの使用

`ai` 設定でプロバイダーとモデルを指定します：

```typescript theme={null}
const client = new Refrain({
  ai: {
    modelId: "gpt-4o",
    provider: "openai",
    apiKey: process.env.OPENAI_API_KEY!,
  },
});
```

Refrain は Anthropic、OpenAI、Google、Azure、Bedrock、Vertex、OpenAI 互換プロバイダーに対応しています。プロバイダー固有の設定（Azure リソース名、Bedrock リージョン、Vertex プロジェクト）については [AI プロバイダーを設定する](/ja/guides/ai-setup) と [`AiConfig` 型リファレンス](/ja/sdk/local-execution#ai-model-configuration) を参照してください。
