💨

Trigger.dev v2からv3への移行手順 - 2025年1月31日の終了に備えて

2025/01/22に公開

背景

Trigger.devのv2が2025年1月31日でサービス終了となるため、v3への移行が必要になりました。この記事では実際の移行手順と注意点を解説します。

移行手順

1. パッケージのアップデート

まず、関連パッケージをv3にアップデートします:

bash
npm install @trigger.dev/sdk@^3.0.0 @trigger.dev/nextjs@^3.0.0 @trigger.dev/react@^3.0.0

2.Trigger.devのダッシュボードでの準備

  • https://cloud.trigger.dev/ にアクセス
  • 新規プロジェクトを作成
    • 注意:既存のv2プロジェクトは使用せず、新規でv3対応のプロジェクトを作成
  • プロジェクトrefとAPI keyを取得

3.プロジェクトの初期化

bash
npx trigger.dev@latest init -p [your_project_ref] --override-config

4.設定ファイルの作成と設定

bash
touch trigger.config.ts
import { defineConfig } from "@trigger.dev/sdk/v3";

export default defineConfig({
  project: "your_project_ref",  // ダッシュボードで取得したプロジェクトref
  runtime: "node",
  logLevel: "log",
  maxDuration: 3600,
  retries: {
    enabledInDev: true,
    default: {
      maxAttempts: 3,
      minTimeoutInMs: 1000,
      maxTimeoutInMs: 10000,
      factor: 2,
      randomize: true,
    },
  },
  dirs: ["./src/trigger"],  // タスクファイルの配置ディレクトリ
});

5.環境変数の設定

.env.localに以下を追加:

TRIGGER_API_KEY=tr_dev_xxxxxx

6. コードの移行

タスクコードの変更点

v2からv3への主な変更点をコード例で示します:

// v2の書き方
import { client } from "@/trigger";
import { eventTrigger } from "@trigger.dev/sdk";

client.defineJob({
  id: "example-task",
  name: "Example Task",
  version: "0.0.1",
  trigger: eventTrigger({
    name: "example.event",
  }),
  run: async (payload, io, ctx) => {
    const eventId = ctx.event.id;
    
    await io.logger.info("処理開始");
    
    const result = await io.runTask("task-name", async () => {
      // 何らかの処理
      return data;
    });
  },
});
// v3の書き方
import { logger, task } from "@trigger.dev/sdk/v3";

type TaskPayload = {
  // ペイロードの型定義
  data: string;
};

export const exampleTask = task({
  id: "example-task",
  retry: {
    maxAttempts: 3,
  },
  run: async (payload: TaskPayload, { ctx }) => {
    const eventId = ctx.run.context.eventId;
    
    logger.info("処理開始");
    
    // io.runTaskのラッパーが不要に
    const result = await someFunction();
  }
});

APIルートの変更点

// v2でのイベント発火
await client.sendEvent({
  name: "example.event",
  payload: { data: "example" },
});
// v3でのイベント発火
await exampleTask.trigger({ 
  data: "example" 
});

主な変更点

  • client.defineJob → taskへの変更
  • io.logger → loggerへの変更
  • io.runTaskラッパーの削除
  • イベントトリガー方式の簡素化

注意点

移行期限は2025年1月31日
v2とv3は並行稼働可能なので、段階的な移行が可能
v3では多くの制限が緩和され、より直感的なコーディングが可能に
既存の機能は基本的に維持されているため、ロジック自体の変更は最小限で済む

まとめ

v3への移行は比較的シンプルで、手順に従えば問題なく進められます。ただし、本番環境で稼働中のシステムの場合は、十分なテストと段階的な移行を検討してください。

Discussion