trigger.dev - ✨ Trigger.dev は、開発者がコード内で直接イベント ドリブンのバックグラウンド タスクを簡単に作成できるようにするオープンソース プラットフォームです。

(✨ Trigger.dev is an open-source platform that makes it easy for developers to create event-driven background tasks directly in their code.)

Created at: 2022-11-30 22:59:07
Language: TypeScript
License: NOASSERTION

Trigger.dev

開発者ファーストのオープンソースZapierの代替。

Trigger.dev は、開発者がコード内で直接イベント駆動型のバックグラウンドタスクを簡単に作成できるようにするオープンソースプラットフォームです。SDKを使用してワークフローをローカルで構築、テスト、実行します。Webhookをサブスクライブし、ジョブをスケジュールし、バックグラウンドジョブを実行し、長い遅延を簡単かつ確実に追加します。当社のWebアプリでは、ワークフローによってこれまでに行われたすべての実行を完全に可視化できるため、監視とデバッグが容易になります。

 

⭐️顔立ち:

  • 👂Webhookを簡単にサブスクライブできます—トンネリングなしでローカルで動作します。
  • 🔥独自のカスタムイベントを発生させる — 1 つのイベントで複数のワークフローをトリガーできます。
  • 📆 ワークフローをスケジュール—タスクを簡単に繰り返したり、高度なケースにCRON構文を使用したりできます。
  • 🚦ワークフロー内に長い遅延(最大1年)を追加すると、中断したところから再開されます。
  • 🤝サーバーがダウンしても問題ではなく、ワークフローは再接続して続行されます。
  • 🪧 すべての実行のすべてのステップを、データ、プレビュー、エラーとともに表示します。
  • 👋カスタム統合を使用してAPIに接続し、認証します。
  • 🚗カスタムユースケースがある場合は、HTTP エンドポイントを呼び出すための Fetch や、API からイベントをサブスクライブするための Webhook がサポートされています。
  • 📡すべての API 呼び出しは、指数バックオフで自動的に再試行されます。
  • 😀TypeScript SDKなので、JavaScriptとTypeScriptのどちらを使用している場合でも、素晴らしい体験ができます。

 

🌱ドキュメンテーション:

 

🔬 ワークフローの構造

  • SDKを使用してサーバー上のコードでワークフローを作成します
  • 各API統合は個別のパッケージです。
    @trigger.dev/slack
  • 各ワークフローには、それをトリガーするイベントがあります。
    github.events.newStarEvent
    scheduleEvent
    customEvent
  • 各ワークフローには、イベントがトリガーされたときに呼び出される関数があります
    run
  • 使用したいAPIの統合がない場合は、任意のHTTPエンドポイントを呼び出し、Webhookをサブスクライブするために使用できます
    fetch
    webhookEvent

ワークフローの例

GitHub 課題が作成または変更されたときに Slack に投稿する

必要なインテグレーション: Slack, GitHub

import { Trigger } from "@trigger.dev/sdk";
import * as github from "@trigger.dev/github";
import * as slack from "@trigger.dev/slack";

new Trigger({
  id: "new-github-star-to-slack",
  name: "New GitHub Star: triggerdotdev/trigger.dev",
  apiKey: "<my_api_key>",
  on: github.events.newStarEvent({
    repo: "triggerdotdev/trigger.dev",
  }),
  run: async (event) => {
    await slack.postMessage("github-stars", {
      channelName: "github-stars",
      text: `New GitHub star from \n<${event.sender.html_url}|${event.sender.login}>`,
    });
  },
}).listen();
ウェルカムメールドリップキャンペーン

必要な統合:スラック、再送信

import { customEvent, Trigger, sendEvent } from "@trigger.dev/sdk";
import * as resend from "@trigger.dev/resend";
import * as slack from "@trigger.dev/slack";
import React from "react";
import { z } from "zod";
import { getUser } from "../db";
import { InactiveEmail, TipsEmail, WelcomeEmail } from "./email-templates";

new Trigger({
  id: "welcome-email-campaign",
  name: "Welcome email drip campaign",
  apiKey: "<my_api_key>",
  on: customEvent({
    name: "user.created",
    schema: z.object({
      userId: z.string(),
    }),
  }),
  async run(event, context) {
    //get the user data from the database
    const user = await getUser(event.userId);

    await slack.postMessage("send-to-slack", {
      channelName: "new-users",
      text: `New user signed up: ${user.name} (${user.email})`,
    });

    //Send the first email
    const welcomeResponse = await resend.sendEmail("welcome-email", {
      from: "Trigger.dev <james@email.trigger.dev>",
      replyTo: "James <james@trigger.dev>",
      to: user.email,
      subject: "Welcome to Trigger.dev",
      react: <WelcomeEmail name={user.name} />,
    });
    await context.logger.debug(
      `Sent welcome email to ${welcomeResponse.to} with id ${welcomeResponse.id}`
    );

    //wait 1 day, check if the user has created a workflow and send the appropriate email
    await context.waitFor("wait-a-while", { days: 1 });
    const updatedUser = await getUser(event.userId);

    if (updatedUser.hasOnboarded) {
      await resend.sendEmail("onboarding-complete", {
        from: "Trigger.dev <james@email.trigger.dev>",
        replyTo: "James <james@trigger.dev>",
        to: updatedUser.email,
        subject: "Pro tips for workflows",
        react: <TipsEmail name={updatedUser.name} />,
      });
    } else {
      await resend.sendEmail("onboarding-incomplete", {
        from: "Trigger.dev <james@email.trigger.dev>",
        replyTo: "James <james@trigger.dev>",
        to: updatedUser.email,
        subject: "Help with your first workflow",
        react: <InactiveEmail name={updatedUser.name} />,
      });
    }
  },
}).listen();

その他の例はこちら

 

👀 表示実行:

Trigger.dev の最も強力な機能の1つは、実行ページです。最初のイベントを含むワークフローのすべてのステップを詳細に表示できます。各ステップのステータス/出力、ログ、リッチプレビュー、エラーなどを確認します。

実行の表示

 

🏠Trigger.dev ローカルで実行する:

Trigger.dev ローカルで実行するには、次の手順を実行します

 

👏貢献:

私たちはオープンソースであり、貢献が大好きです!

 

🧘‍♂️セルフホスティングガイド:

もうすぐです。。。

 

📧サポートと連絡先: