開発中の機能
コード管理
SDK
defineAction

defineAction

アクションを定義する関数です。typeフィールドで種別を指定し、種別に応じたフィールドを設定します。

typeによって設定できるフィールドが型で絞り込まれるため、存在しないフィールドを指定するとTypeScriptのコンパイルエラーになります。

以下の設定項目はコード管理の対象外です。これらはベースマキナの管理画面から設定してください。

  • 結果の加工(加工スクリプト、ページネーション)
  • 環境ごとの有効/無効
  • 環境ごとのバージョン

共通フィールド

すべてのアクション種別で使用できるフィールドです。

フィールド必須説明
idstringはいアクションの識別子。最大128文字で、使用できる文字は英数字・アンダースコア・ハイフン(^[a-zA-Z0-9_-]+$
namestringはいアクション名
descriptionstringいいえ説明
preferJobExecutionbooleanいいえtrueにすると管理画面でこのアクションの実行UIがジョブ実行形式になる
jobDetailVisibility"EXECUTOR_ONLY" | "PUBLIC"いいえジョブ実行結果の閲覧範囲。EXECUTOR_ONLYは実行者のみ、PUBLICは全ユーザーが閲覧可
reviewSettingIdstringいいえレビュー設定の識別子。設定すると、依頼したレビューが承認されてはじめてアクションが実行できるようになる
notificationSettingsNotificationSettingsConfigいいえ成功時・エラー時の通知設定
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.notificationMethodIdstringはい通知方法の識別子
onSuccess.mentionTargetUserIdsstring[]いいえメンション対象ユーザー
onSuccess.message{ type: "text"; value: string }いいえ通知メッセージ
onError.notificationMethodIdstringはい通知方法の識別子
onError.mentionTargetUserIdsstring[]いいえメンション対象ユーザー
onError.message{ type: "text"; value: string }いいえ通知メッセージ

onSuccessonErrorはどちらも省略可能で、必要な方だけ指定できます。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アクションを指定
dataSourcestringはいgRPCデータソースの識別子
fullMethodNamestringはいgRPCメソッドの完全修飾名。形式は{package}.{Service}/{Method}
headers{ name: string; value: string }[]いいえリクエストヘッダー
body{ payload: string }いいえリクエストボディ。payloadはJSON文字列で指定し、内部で{{ paramName }}の形式でパラメーターを埋め込める
parametersParameterConfig[]いいえパラメーター定義(下記参照)

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アクションを指定
codestringはいJavaScriptコードまたはreadFile()の戻り値
parametersParameterConfig[]いいえパラメーター定義(下記参照)

コード本体の書き方

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アクションで、使用できるパラメーター種別と各フィールドの仕様が一部異なります。

パラメーター種別gRPCJavaScript
TEXT使用可使用可
NUMBER使用可使用可
DATE使用可使用可
BOOL使用可使用可
SYSTEM_VALUE使用可使用可
JSON使用可使用不可
FILE使用不可使用可
ARRAY使用可使用可
TUPLE使用可使用可

すべての種別に共通で、nameはパラメーター名、descriptionはパラメーターの説明として指定できます。

defaultValueを指定できるパラメーターでは、未指定を表す場合はdefaultValueフィールド自体を省略してください。nullは指定できません。ARRAY/TUPLEのdefaultValueでも、配列やタプル内の要素にnullundefinedを含めることはできません。

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"はいテキストパラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
requiredbooleanいいえ必須かどうか
defaultValuestringいいえ初期値
minLengthnumberいいえ最小文字数
maxLengthnumberいいえ最大文字数
multilinebooleanいいえ複数行入力を許可するか
newlineCharactersstringいいえmultiline: trueの場合の改行コード
regexValidation{ type?: "custom"; pattern: string; errorMessage?: string }いいえ入力値のバリデーション正規表現(multiline: falseのみ)
selectOptions{ label?: string; value: string }[]いいえ選択肢(multiline: falseのみ。1件以上必須)。label省略時はvalueを表示
masterDataFetchSettingIdstringいいえマスターデータ取得設定の識別子(multiline: falseのみ)

selectOptionsmasterDataFetchSettingIdは排他関係にあり、どちらか一方のみ指定できます。

NUMBERパラメーター

{
  type: "NUMBER",
  name: "age",
  required: true,
  min: 0,
  max: 150,
}
フィールド必須説明
type"NUMBER"はい数値パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
requiredbooleanいいえ必須かどうか
defaultValuenumberいいえ初期値
minnumberいいえ最小値
maxnumberいいえ最大値
selectOptions{ label?: string; value: number }[]いいえ選択肢(1件以上必須)。label省略時はvalueを表示
masterDataFetchSettingIdstringいいえマスターデータ取得設定の識別子

selectOptionsmasterDataFetchSettingIdは排他関係にあり、どちらか一方のみ指定できます。

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"はい日付パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
requiredbooleanいいえ必須かどうか
includeTimebooleanいいえ時刻を含めるか
useUnixTimestampbooleanいいえUnixタイムスタンプで扱うか。trueの場合formatは指定不可
formatstringいいえ日付フォーマット(useUnixTimestamp: falseの場合のみ)
defaultValuestring | 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"はい真偽値パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
defaultValuebooleanいいえ初期値
formatオブジェクトgRPCで必須、JavaScriptで任意文字列値として扱う場合の設定。{ trueValue: string; falseValue: string; type?: "STRING" }

formatの各フィールドは以下の通りです。

フィールド必須説明
type"STRING"いいえフォーマット種別。現状"STRING"のみサポート。省略時は"STRING"扱い
trueValuestringはいtrueのときに送信する文字列
falseValuestringはいfalseのときに送信する文字列

FILEパラメーター(JavaScriptアクションのみ)

{
  type: "FILE",
  name: "uploadFile",
  required: true,
  maxBytes: 10485760,
}
フィールド必須説明
type"FILE"はいファイルパラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
requiredbooleanいいえ必須かどうか
maxBytesnumberいいえ最大バイト数

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パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
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"はいシステム値パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
requiredbooleanいいえ必須かどうか

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"はい配列パラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
formatオブジェクトいいえ送信時の形式。省略時は配列のまま渡す
childElementElementConfigはい要素の型(TEXT / NUMBER / DATE / ARRAY / TUPLE
defaultValue配列いいえ初期値。要素にはnullundefinedを指定不可
minItemsnumberいいえ最小要素数
maxItemsnumberいいえ最大要素数

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"はいタプルパラメーターを指定
namestringはいパラメーター名
descriptionstringいいえ説明
formatオブジェクトいいえ送信時の形式(ARRAYと同じ指定方法)
tupleElements{ label?: string; childElement: TupleChildElementConfig }[]はい各要素の定義(1件以上必須)
defaultValueタプルいいえ初期値。要素にはnullundefinedを指定不可

tupleElementschildElementにはTEXT / NUMBER / DATE / BOOLが指定できます。BOOLを指定する場合、JavaScriptアクションではformatを省略すると真偽値のまま、gRPCアクションではformatの指定が必須です。