アクションノード
決定論的なワークフロー操作のための、非LLMプログラマティックなノードです。アクションノードは、データ変換、APIインテグレーション、制御フロー、および自動化ロジックを処理することで、LLMエージェントを補完します。
概要
アクションノードは、LLMエージェントノードとは視覚的に異なります — ワークフローを簡単にスキャンできるように、独自の色とアイコンを使用しています。各ノードタイプは、HTTPリクエストからデータベースクエリ、条件分岐まで、特定の操作カテゴリを処理します。
すべてのアクションノードは、エラー処理、トレース、実行制御、およびI/Oマッピングのための一連の標準プロパティを共有しています。これらは文字列フィールドでの{{variable}}補間をサポートし、先行ノードの出力を自動的に受け取ります。

利用可能なノード
| ノード | アイコン | 色 | 説明 |
|---|---|---|---|
| トリガー | 🎯 | インディゴ | ワークフローのエントリポイント(手動、ウェブフック、スケジュール、イベント) |
| HTTP | 🌐 | 青 | 外部のAPIsにHTTPリクエストを行う |
| 設定 | 📝 | 紫 | ワークフローの状態変数を定義し、操作する |
| 変換 | ⚙️ | ピンク | 式または組み込み操作を使用してデータを変換する |
| スイッチ | 🔀 | アンバー | 条件に基づいた条件分岐 |
| ループ | 🔄 | エメラルド | 配列を反復処理するか、操作を繰り返す |
| マージ | 🔗 | Cyan | 複数のブランチを単一のフローに結合します |
| 待機 | ⏱️ | Gray | 期間または条件に基づいてワークフローを一時停止します |
| コード | 💻 | Red | サンドボックス化されたランタイムでカスタムJavaScriptを実行します |
| データベース | 🗄️ | Teal | データベース操作 (PostgreSQL, MySQL, SQLite, MongoDB, Redis) |
| メール | 📧 | Rose | SMTP経由でメールを送信するか、IMAP経由で監視します |
| 通知 | 🔔 | Orange | Slack、Discord、Teams、またはウェブフックに送信します |
| RSS | 📡 | Lime | 新しいエントリについてRSS/Atomフィードを監視します |
| ファイル | 📁 | Sky | ローカルまたはクラウドストレージ (S3, GCS, Azure) でのファイル操作 |
標準プロパティ
すべてのアクションノードは、これらの共有プロパティを継承します。
識別子
| プロパティ | 型 | 説明 |
|---|---|---|
id | string | 一意の識別子 |
name | string | 表示名 |
description | string? | オプションのツールチップ説明 |
エラー処理
| モード | 動作 |
|---|---|
stop | エラー時にワークフローを停止 (デフォルト) |
continue | エラーをログに記録し、次のノードに進む |
retry | 設定可能な回数 (1-10) と遅延 (ミリ秒) で再試行 |
fallback | エラー時にフォールバック値を使用する |
トレース
| プロパティ | 型 | 説明 |
|---|---|---|
enabled | boolean | 詳細な実行トレースを有効にする |
logLevel | none | error | info | debug | ログの冗長性 |
実行制御
| プロパティ | 型 | 説明 |
|---|---|---|
timeout | number | ミリ秒単位のタイムアウト (デフォルト: 30000) |
condition | string? | 式がfalseと評価された場合、ノードをスキップします |
入出力マッピング
| プロパティ | 型 | 説明 |
|---|---|---|
inputMapping | Record<string, string>? | 状態フィールドをノード入力にマッピングします |
outputKey | string | 結果がワークフローの状態に保存されるキー |
ノードリファレンス
Trigger Node 🎯
ワークフローのエントリポイントです。すべてのワークフローはTrigger nodeから始まります。詳細については、専用のトリガーガイドを参照してください。
| トリガータイプ | 説明 |
|---|---|
| 手動 | チャット入力によるユーザー開始 |
| Webhook | HTTP エンドポイント (POST/GET) (オプションの認証付き) |
| スケジュール | Cronベースのタイミング (タイムゾーンサポート付き) |
| イベント | 外部システムイベント (JSONPathフィルタリング付き) |
HTTP ノード 🌐
完全な認証、ヘッダー、ボディ、およびレスポンス処理を備えた外部の APIs に HTTP リクエストを行います。
設定:
| プロパティ | 型 | 説明 |
|---|---|---|
method | GET, POST, PUT, PATCH, DELETE | HTTP メソッド |
url | string | {{variable}} 補間を含む URL |
auth | object | 認証 (none, bearer, basic, api_key) |
headers | Record<string, string> | リクエストヘッダー |
body | object | ボディ (none, json, form, raw) |
response | object | レスポンス処理 (json, text, binary) オプションの JSONPath 抽出あり |
rateLimit | オブジェクト? | レート制限(ウィンドウあたりのリクエスト数) |
例:
{
"type": "http",
"name": "Fetch User Data",
"method": "GET",
"url": "https://api.example.com/users/{{userId}}",
"auth": {
"type": "bearer",
"bearer": { "token": "{{API_TOKEN}}" }
},
"headers": { "Accept": "application/json" },
"body": { "type": "none" },
"response": { "type": "json", "jsonPath": "$.data" },
"errorHandling": { "mode": "retry", "retryCount": 3, "retryDelay": 1000 },
"mapping": { "outputKey": "userData" }
}
Setノード 📝
ワークフローの状態変数を定義および操作します。リテラル値、式、およびシークレットをサポートします。
設定:
| プロパティ | 型 | 説明 |
|---|---|---|
mode | set, merge, delete | 変数操作 |
variables | Variable[] | 設定する変数のリスト |
envVars | object? | オプションのプレフィックスフィルターを使用して.envファイルからロード |
変数型: string, number, boolean, json, expression
isSecret: trueとマークされた変数は、ログとUIでマスクされます。
トランスフォームノード ⚙️
式または組み込み操作を使用してデータを変換します。
トランスフォームの種類:
| タイプ | 説明 |
|---|---|
jsonpath | JSONPath式 |
jmespath | JMESPath式 |
template | 補間付き文字列テンプレート |
javascript | JavaScript式 |
組み込み操作: pick, omit, rename, flatten, sort, unique
型強制ターゲット: string, number, boolean, array, object
Switchノード 🔀
複数の出力ポートを持つ条件分岐です。各条件は、ノード上の個別の出力ポートにマッピングされます。

設定:
| プロパティ | 型 | 説明 |
|---|---|---|
evaluationMode | first_match | all_match | 最初のマッチで停止するか、すべてを評価する |
conditions | SwitchCondition[] | 出力ポートを持つ条件のリスト |
defaultBranch | string? | 条件が一致しない場合の出力ポート |
条件演算子: eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists
例:
{
"type": "switch",
"evaluationMode": "first_match",
"conditions": [
{ "id": "ok", "name": "Success", "field": "status", "operator": "eq", "value": "success", "outputPort": "success" },
{ "id": "err", "name": "Error", "field": "status", "operator": "eq", "value": "error", "outputPort": "error" }
],
"defaultBranch": "unknown"
}
ループノード 🔄
配列を反復処理したり、固定回数繰り返したり、条件が満たされている間ループしたりします。
ループの種類:
| タイプ | 説明 |
|---|---|
forEach | 状態から配列を反復処理する |
while | 条件が真である間ループする |
times | N回繰り返す |
並列実行: オプションの batchSize と delayBetween を使用して、parallel.enabled を有効にし、並行イテレーションを可能にします。
結果の集約: results.collect が true の場合、イテレーション結果は results.aggregationKey の下に配列として集約されます。
マージノード 🔗
複数の並列ブランチを単一のフローに結合します。複数の入力ポートを持ちます。
マージモード:
| モード | 動作 |
|---|---|
wait_all | すべての入力ブランチの完了を待機 |
wait_any | 最初のブランチが完了したときに続行 |
wait_n | N個のブランチが完了した後に続行 |
戦略を組み合わせる: array, object, first, last
オプションのタイムアウト continue または error の動作。
待機ノード ⏱️
ワークフローの実行を一時停止します。
待機タイプ:
| 種類 | 説明 |
|---|---|
fixed | 固定期間待機 (ミリ秒, 秒, 分, 時間) |
until | 特定のタイムスタンプまで待機 |
webhook | 受信ウェブフックを待機 |
condition | 一定間隔で条件をポーリング |
コードノード 💻
サンドボックス化された boa_engine ランタイムでカスタム JavaScript を実行します。グラフの状態はグローバルな input オブジェクトとして注入されます。
設定:
| プロパティ | 型 | 説明 |
|---|---|---|
language | javascript, typescript | コード言語 |
code | string | 実行するコード |
sandbox | object | セキュリティ制限(ネットワーク、ファイルシステム、メモリ、時間) |
サンドボックスのデフォルト:
| 制限 | デフォルト |
|---|---|
| ネットワークアクセス | false |
| ファイルシステムアクセス | false |
| メモリ制限 | 128 MB |
| 時間制限 | 5000 ms |
データベースノード 🗄️
接続プールとパラメータ化されたクエリを使用してデータベース操作を実行します。
サポートされているデータベース:
| データベース | ドライバー | 機能 |
|---|---|---|
| PostgreSQL | sqlx (postgres) | 非同期プール、パラメータ化されたクエリ、行からJSON |
| MySQL | sqlx (mysql) | 非同期プール、パラメータ化されたクエリ、行からJSON |
| SQLite | sqlx (sqlite) | 非同期プール、パラメータ化されたクエリ、行からJSON |
| MongoDB | mongodb | ネイティブBSON、find/insert/update/delete |
| Redis | redis | GET, SET, DEL, HGET, HSET, LPUSH, LRANGE |
接続文字列はシークレットとして扱われ、ログではマスクされます。
メールノード 📧
SMTP経由でメールを送信したり、IMAP経由で受信メールを監視したりします。
送信モード (SMTP):
- TLS/SSL サポート
- 認証
- To/CC/BCC 受信者
- HTML またはプレーンテキストの本文
- 件名と本文における
{{variable}}補間 - 状態からのファイル添付
監視モード (IMAP):
- フォルダー選択 (デフォルト: INBOX)
- フィルター: 送信者、件名、日付範囲、未読のみ
- 処理後に既読としてマーク
通知ノード 🔔
メッセージングプラットフォームに通知を送信します。
チャネル: Slack, Discord, Microsoft Teams, カスタムWebhook
メッセージ形式: プレーンテキスト、markdown、プラットフォーム固有のブロック (Block Kit, Embeds, Adaptive Cards)
RSSノード 📡
RSS/Atomフィードの新しいエントリを監視します。
- 設定可能なポーリング間隔
- キーワード、作成者、カテゴリ、日付フィルター
- 重複を避けるための既読アイテム追跡
- オプションでコンテンツ全体または要約のみ
ファイルノード 📁
ローカルまたはクラウドストレージでのファイル操作。
操作: read, write, delete, list
クラウドプロバイダー: Amazon S3, Google Cloud Storage, Azure Blob Storage
ファイル形式: JSON, CSV, XML, テキスト, バイナリ (区切り文字、ヘッダー、引用符のCSV解析オプション付き)
変数補間
アクションノードのすべての文字列フィールドは、動的な値のために{{variable}}構文をサポートしています。
https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.
変数は実行時にワークフローの状態から解決されます。ドット記法 (user.name) はネストされた値にアクセスします。
マルチポートノード
2つのノードタイプは動的なポート数を持っています。
- Switch — 条件ごとに1つの出力ポートと、オプションのデフォルトポート
- Merge — 複数の入力ポート、着信ブランチごとに1つ
これらのポートはノード上に視覚的に表現され、異なるダウンストリーム/アップストリームノードに接続されます。
コード生成
アクションノードは、LLM agents とともに本番環境のRustコードにコンパイルされます。依存関係は自動検出され、生成されたCargo.tomlに追加されます。
| ノード | Crate | 生成するもの |
|---|---|---|
| HTTP | reqwest | 認証、ヘッダー、ボディ、JSONPath抽出を含むAsync HTTPリクエスト |
| データベース | sqlx / mongodb / redis | コネクションプール、パラメータ化されたクエリ、Redisコマンド |
| メール | lettre / imap | SMTP TLSでの送信; 検索フィルター付きIMAP監視 |
| コード | boa_engine | グラフの状態をinputオブジェクトとして使用した組み込みJavaScript実行 |
| 設定 | native | 変数割り当て (リテラル、式、シークレット) |
| 変換 | native | マップ、フィルター、ソート、リデュース、フラット化、グループ化、ピック、マージ、テンプレート |
| 統合 | ネイティブ | ブランチの組み合わせ (waitAll, waitAny, append) |
生成されたすべてのコードは、エラー処理のために adk-graph FunctionNode クロージャを GraphError::NodeExecutionFailed と共に使用します。
生成されたコードの例(HTTP ノード):
let http_node = FunctionNode::new("fetch_data", |ctx| async move {
let client = reqwest::Client::new();
let resp = client.get("https://api.example.com/data")
.bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
.send().await
.map_err(|e| GraphError::NodeExecutionFailed {
node: "fetch_data".into(),
message: e.to_string(),
})?;
let body: serde_json::Value = resp.json().await?;
Ok(NodeOutput::new().with_update("apiData", body))
});
生成されたコードの例(Code ノード):
let code_node = FunctionNode::new("process", |ctx| async move {
let mut js_ctx = boa_engine::Context::default();
// Graph state injected as global `input` object
// User code executed in thread-isolated sandbox
Ok(NodeOutput::new().with_update("result", output))
});
前へ: ← Studio | 次へ: Triggers →