defineAction
アクションを定義する関数です。typeフィールドで種別を指定し、種別に応じたフィールドを設定します。
typeによって設定できるフィールドが型で絞り込まれるため、存在しないフィールドを指定するとTypeScriptのコンパイルエラーになります。
以下の設定項目はコード管理の対象外です。これらはベースマキナの管理画面から設定してください。
- 結果の加工(加工スクリプト、ページネーション)
- 環境ごとの有効/無効
- 環境ごとのバージョン
共通フィールド
すべてのアクション種別で使用できるフィールドです。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | はい | アクションの識別子。最大128文字で、使用できる文字は英数字・アンダースコア・ハイフン(^[a-zA-Z0-9_-]+$) |
name | string | はい | アクション名 |
description | string | いいえ | 説明 |
preferJobExecution | boolean | いいえ | trueにすると管理画面でこのアクションの実行UIがジョブ実行形式になる |
jobDetailVisibility | "EXECUTOR_ONLY" | "PUBLIC" | いいえ | ジョブ実行結果の閲覧範囲。EXECUTOR_ONLYは実行者のみ、PUBLICは全ユーザーが閲覧可 |
reviewSettingId | string | いいえ | レビュー設定の識別子。設定すると、依頼したレビューが承認されてはじめてアクションが実行できるようになる |
notificationSettings | NotificationSettingsConfig | いいえ | 成功時・エラー時の通知設定 |
permissions | [PermissionTarget, ...](非空) | いいえ | 実行を許可する対象。未指定の場合はプロジェクト内の全ユーザーに実行が許可される。指定する場合は1件以上必要 |
permissions
permissionsは実行を許可する対象の配列です。未指定の場合はプロジェクト内の全ユーザーに実行が許可されます。
permissions: [
{ type: "user", id: "<ユーザーID>" },
{ type: "userGroup", id: "<ユーザーグループID>" },
{ type: "javascriptAction", id: "<JavaScriptアクションの識別子>" },
];type | 説明 |
|---|---|
"user" | 特定のユーザーに実行を許可 |
"userGroup" | 特定のユーザーグループに属するユーザーに実行を許可 |
"javascriptAction" | JavaScriptアクションの判定結果に従って実行を許可 |
notificationSettings
アクションの成功時・失敗時に通知するための設定です。
notificationSettings: {
onSuccess: {
notificationMethodId: "<通知方法の識別子>",
mentionTargetUserIds: ["<ユーザーID>"],
message: { type: "text", value: "ユーザー作成が成功しました" },
},
onError: {
notificationMethodId: "<通知方法の識別子>",
message: { type: "text", value: "ユーザー作成に失敗しました" },
},
};| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
onSuccess.notificationMethodId | string | はい | 通知方法の識別子 |
onSuccess.mentionTargetUserIds | string[] | いいえ | メンション対象ユーザー |
onSuccess.message | { type: "text"; value: string } | いいえ | 通知メッセージ |
onError.notificationMethodId | string | はい | 通知方法の識別子 |
onError.mentionTargetUserIds | string[] | いいえ | メンション対象ユーザー |
onError.message | { type: "text"; value: string } | いいえ | 通知メッセージ |
onSuccessとonErrorはどちらも省略可能で、必要な方だけ指定できます。messageを省略すると、通知方法のデフォルトメッセージが使われます。
gRPCアクション
import { defineAction } from "@basemachina/sdk/oac";
export const fetchOrders = defineAction({
id: "fetch-orders",
name: "注文一覧取得",
type: "grpc",
dataSource: "orders-service",
fullMethodName: "orders.OrderService/ListOrders",
body: {
payload: '{ "customerId": "{{ customerId }}" }',
},
parameters: [{ type: "TEXT", name: "customerId", required: true }],
});| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "grpc" | はい | gRPCアクションを指定 |
dataSource | string | はい | gRPCデータソースの識別子 |
fullMethodName | string | はい | gRPCメソッドの完全修飾名。形式は{package}.{Service}/{Method} |
headers | { name: string; value: string }[] | いいえ | リクエストヘッダー |
body | { payload: string } | いいえ | リクエストボディ。payloadはJSON文字列で指定し、内部で{{ paramName }}の形式でパラメーターを埋め込める |
parameters | ParameterConfig[] | いいえ | パラメーター定義(下記参照) |
JavaScriptアクション
import { defineAction, readFile } from "@basemachina/sdk/oac";
export const createUser = defineAction({
id: "create-user",
name: "ユーザー作成",
type: "javascript",
code: readFile("./js-action-codes/create-user.ts"),
parameters: [
{ type: "TEXT", name: "email", required: true },
{ type: "NUMBER", name: "age", required: true },
],
});| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "javascript" | はい | JavaScriptアクションを指定 |
code | string | はい | JavaScriptコードまたはreadFile()の戻り値 |
parameters | ParameterConfig[] | いいえ | パラメーター定義(下記参照) |
コード本体の書き方
code: readFile("./js-action-codes/<id>.ts")で参照するファイルは、デフォルトエクスポートの関数として記述します。第1引数にdefineActionで宣言したアクションパラメーター、第2引数に事前定義パラメーターを受け取ります。
ダウンロードしたtsconfig.jsonがそのまま@basemachina/sdk/tsconfig.code.jsonを継承しているため、@basemachina/actionのimportパスは追加設定なしで型定義に解決されます。
TypeScriptで書く場合(推奨)
@basemachina/actionからJSActionHandler型をインポートし、アクションIDを型引数で指定します。defineActionで宣言したパラメーターの型が自動で推論されます。
// src/actions/js-action-codes/create-user.ts
import { executeAction, type JSActionHandler } from "@basemachina/action";
const handler: JSActionHandler<"create-user"> = async (
{ email, age },
{ currentUser, vars },
) => {
// email: string, age: number として推論される
return { ok: true };
};
export default handler;readFile()は.tsファイルを自動でJavaScriptにトランスパイルするため、TypeScriptで書いたコードもそのまま実行できます。詳しくはreadFileをご参照ください。
JavaScriptで書く場合
JSDocの@typeコメントでJSActionHandler<"id">を指定すると、エディタ上で型推論を有効にできます。
// src/actions/js-action-codes/create-user.js
/** @type { import("@basemachina/action").JSActionHandler<"create-user"> } */
export default async ({ email, age }, { currentUser, vars }) => {
return { ok: true };
};ブラウザのエディタで使うHandler型は、コード管理では使用できません。アクションIDを型引数に渡すJSActionHandler<"id">を使用してください。
ブラウザからコードを持ち込む場合は、以下のように書き換えます。
- /** @type { import("@basemachina/action").Handler } */
+ /** @type { import("@basemachina/action").JSActionHandler<"create-user"> } */パラメーター定義
parametersには、アクションの入力パラメーターをtypeフィールドで種別を分けて配列で指定します。gRPCアクションとJavaScriptアクションで、使用できるパラメーター種別と各フィールドの仕様が一部異なります。
| パラメーター種別 | gRPC | JavaScript |
|---|---|---|
TEXT | 使用可 | 使用可 |
NUMBER | 使用可 | 使用可 |
DATE | 使用可 | 使用可 |
BOOL | 使用可 | 使用可 |
SYSTEM_VALUE | 使用可 | 使用可 |
JSON | 使用可 | 使用不可 |
FILE | 使用不可 | 使用可 |
ARRAY | 使用可 | 使用可 |
TUPLE | 使用可 | 使用可 |
すべての種別に共通で、nameはパラメーター名、descriptionはパラメーターの説明として指定できます。
defaultValueを指定できるパラメーターでは、未指定を表す場合はdefaultValueフィールド自体を省略してください。nullは指定できません。ARRAY/TUPLEのdefaultValueでも、配列やタプル内の要素にnullやundefinedを含めることはできません。
TEXTパラメーター
{
type: "TEXT",
name: "email",
required: true,
defaultValue: "example@example.com",
minLength: 1,
maxLength: 255,
multiline: false,
regexValidation: {
pattern: "^[\\w.+-]+@[\\w-]+\\.[\\w.]+$",
errorMessage: "メールアドレスの形式で入力してください",
},
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "TEXT" | はい | テキストパラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
required | boolean | いいえ | 必須かどうか |
defaultValue | string | いいえ | 初期値 |
minLength | number | いいえ | 最小文字数 |
maxLength | number | いいえ | 最大文字数 |
multiline | boolean | いいえ | 複数行入力を許可するか |
newlineCharacters | string | いいえ | multiline: trueの場合の改行コード |
regexValidation | { type?: "custom"; pattern: string; errorMessage?: string } | いいえ | 入力値のバリデーション正規表現(multiline: falseのみ) |
selectOptions | { label?: string; value: string }[] | いいえ | 選択肢(multiline: falseのみ。1件以上必須)。label省略時はvalueを表示 |
masterDataFetchSettingId | string | いいえ | マスターデータ取得設定の識別子(multiline: falseのみ) |
selectOptionsとmasterDataFetchSettingIdは排他関係にあり、どちらか一方のみ指定できます。
NUMBERパラメーター
{
type: "NUMBER",
name: "age",
required: true,
min: 0,
max: 150,
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "NUMBER" | はい | 数値パラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
required | boolean | いいえ | 必須かどうか |
defaultValue | number | いいえ | 初期値 |
min | number | いいえ | 最小値 |
max | number | いいえ | 最大値 |
selectOptions | { label?: string; value: number }[] | いいえ | 選択肢(1件以上必須)。label省略時はvalueを表示 |
masterDataFetchSettingId | string | いいえ | マスターデータ取得設定の識別子 |
selectOptionsとmasterDataFetchSettingIdは排他関係にあり、どちらか一方のみ指定できます。
DATEパラメーター
// 文字列で扱う場合
{
type: "DATE",
name: "targetDate",
required: true,
includeTime: false,
format: "YYYY-MM-DD",
defaultValue: "2025-01-01",
}
// Unixタイムスタンプで扱う場合
{
type: "DATE",
name: "targetDate",
required: true,
includeTime: true,
useUnixTimestamp: true,
defaultValue: 1735689600,
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "DATE" | はい | 日付パラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
required | boolean | いいえ | 必須かどうか |
includeTime | boolean | いいえ | 時刻を含めるか |
useUnixTimestamp | boolean | いいえ | Unixタイムスタンプで扱うか。trueの場合formatは指定不可 |
format | string | いいえ | 日付フォーマット(useUnixTimestamp: falseの場合のみ) |
defaultValue | string | number | いいえ | 初期値(useUnixTimestamp: trueの場合はnumber、それ以外はstring) |
BOOLパラメーター
JavaScriptアクションでは、formatを省略すると真偽値のまま扱われ、formatを指定すると指定した文字列値として扱われます。gRPCアクションでは文字列化が必須のため、formatを必ず指定する必要があります。
// JavaScriptアクション(真偽値のまま扱う)
{
type: "BOOL",
name: "isActive",
defaultValue: true,
}
// JavaScriptアクション(文字列値として扱う)
{
type: "BOOL",
name: "isActive",
format: { trueValue: "1", falseValue: "0" },
}
// gRPCアクション(formatは必須)
{
type: "BOOL",
name: "isActive",
format: { trueValue: "true", falseValue: "false" },
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "BOOL" | はい | 真偽値パラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
defaultValue | boolean | いいえ | 初期値 |
format | オブジェクト | gRPCで必須、JavaScriptで任意 | 文字列値として扱う場合の設定。{ trueValue: string; falseValue: string; type?: "STRING" } |
formatの各フィールドは以下の通りです。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "STRING" | いいえ | フォーマット種別。現状"STRING"のみサポート。省略時は"STRING"扱い |
trueValue | string | はい | trueのときに送信する文字列 |
falseValue | string | はい | falseのときに送信する文字列 |
FILEパラメーター(JavaScriptアクションのみ)
{
type: "FILE",
name: "uploadFile",
required: true,
maxBytes: 10485760,
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "FILE" | はい | ファイルパラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
required | boolean | いいえ | 必須かどうか |
maxBytes | number | いいえ | 最大バイト数 |
JSONパラメーター(gRPCアクションのみ)
valueTypeで内部の値の型を指定し、その型に応じたフィールドを追加で指定できます。
// テキスト型
{
type: "JSON",
name: "statusFilter",
valueType: "TEXT",
selectOptions: [
{ label: "有効", value: "ACTIVE" },
{ label: "無効", value: "INACTIVE" },
],
}
// 数値型
{
type: "JSON",
name: "priority",
valueType: "NUMBER",
min: 0,
max: 10,
defaultValue: 5,
}
// 日付型(文字列形式)
{
type: "JSON",
name: "targetDate",
valueType: "DATE",
includeTime: false,
format: "YYYY-MM-DD",
defaultValue: "2025-01-01",
}
// 日付型(Unixタイムスタンプ)
{
type: "JSON",
name: "targetTimestamp",
valueType: "DATE",
useUnixTimestamp: true,
includeTime: true,
defaultValue: 1700000000,
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "JSON" | はい | JSONパラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
valueType | "TEXT" | "NUMBER" | "DATE" | はい | JSONとして送信する値の型 |
valueTypeに応じて、TEXT/NUMBER/DATEパラメーターと同様のフィールドを追加で指定できます(requiredを除く)。
valueType: "TEXT"の場合、regexValidationはTEXTパラメーターと同じく{ pattern: string; errorMessage?: string }形式で指定します。
SYSTEM_VALUEパラメーター
ログイン中のユーザーIDなど、システムが提供する値を自動的に埋め込むパラメーターです。
{
type: "SYSTEM_VALUE",
name: "currentUserId",
required: true,
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "SYSTEM_VALUE" | はい | システム値パラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
required | boolean | いいえ | 必須かどうか |
ARRAYパラメーター
複数要素を配列として入力するパラメーターです。childElementで要素の型を、formatで送信時の形式を指定します。formatを省略した場合は配列のまま渡されます。
// JSON形式
{
type: "ARRAY",
name: "targetIds",
format: { type: "JSON" },
childElement: { type: "NUMBER" },
}
// 区切り文字形式
{
type: "ARRAY",
name: "tags",
format: {
type: "SEPARATOR",
delimiter: ",",
quoteCharacter: '"',
},
childElement: { type: "TEXT" },
}
// 配列のまま渡す(format省略)
{
type: "ARRAY",
name: "rawValues",
childElement: { type: "TEXT" },
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "ARRAY" | はい | 配列パラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
format | オブジェクト | いいえ | 送信時の形式。省略時は配列のまま渡す |
childElement | ElementConfig | はい | 要素の型(TEXT / NUMBER / DATE / ARRAY / TUPLE) |
defaultValue | 配列 | いいえ | 初期値。要素にはnullやundefinedを指定不可 |
minItems | number | いいえ | 最小要素数 |
maxItems | number | いいえ | 最大要素数 |
formatの指定方法は以下の通りです。
format | 送信形式 |
|---|---|
| 省略 | 配列のまま渡す |
{ type: "JSON" } | JSON文字列に変換して送信 |
{ type: "SEPARATOR", delimiter?: string, quoteCharacter?: string } | delimiterで区切った文字列として送信。quoteCharacterで各要素を囲む |
TUPLEパラメーター
複数のフィールドを1つのパラメーターとしてまとめるタプル型のパラメーターです。formatを省略した場合は配列のまま渡されます。
{
type: "TUPLE",
name: "filter",
format: { type: "JSON" },
tupleElements: [
{ label: "開始日", childElement: { type: "DATE" } },
{ label: "終了日", childElement: { type: "DATE" } },
],
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "TUPLE" | はい | タプルパラメーターを指定 |
name | string | はい | パラメーター名 |
description | string | いいえ | 説明 |
format | オブジェクト | いいえ | 送信時の形式(ARRAYと同じ指定方法) |
tupleElements | { label?: string; childElement: TupleChildElementConfig }[] | はい | 各要素の定義(1件以上必須) |
defaultValue | タプル | いいえ | 初期値。要素にはnullやundefinedを指定不可 |
tupleElementsのchildElementにはTEXT / NUMBER / DATE / BOOLが指定できます。BOOLを指定する場合、JavaScriptアクションではformatを省略すると真偽値のまま、gRPCアクションではformatの指定が必須です。