データ型
WELには16種類のデータ型があります。データが式に入るとき、または式から出るときに適切な型を使用して、不正な値によって変換が暗黙的に失敗しないようにします。
_ は、これらの例で式が受け取る入力です。詳細については、入力変数を参照してください。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
WELのすべての型の動作は、次の2つのルールに従います。
- WELはデフォルトでは強制型変換を行いません:
Stringが想定される場所に数値を渡すと、変換されるのではなくE100が発生します。式を成功させるために暗黙的に再解釈されるものはありません。ただし、常に自動変換を行う文字列補間内、および特定の強制型変換を設定する2つのTransform dataフラグは例外です。 - コレクションが誤って文字列になることはありません:
ListまたはMapは、to_jsonなどの明示的な呼び出しによってのみシリアライズされます。
この2つのルールがあるのは、失敗した変換は目に見えますが、誤った値を暗黙的に生成する変換は見えないためです。
クイックリファレンス
WELには次のデータ型があります。
| タイプ | 説明 | リテラル |
|---|---|---|
| Null | 値がないこと | null |
| Bool | ブーリアン | true, false |
| Integer | 任意精度の整数 | 42 |
| Float | 64-bit IEEE 754浮動小数点数 | 3.14 |
| Decimal | 任意精度の正確な小数 | Decimal('1.00') |
| String | UTF-8テキスト | 'hello' |
| Binary | 生バイト | 0x"48656C6C6F" |
| PlainDate | 時刻とゾーンのないカレンダー日付 | PlainDate('2026-03-15') |
| DateTime | オフセット付きの正確な時点 | DateTime('2026-03-15T09:30:00Z') |
| PlainDateTime | ゾーンのない日付と時刻 | PlainDateTime('2026-03-15T09:30:00') |
| PlainTime | 日付とゾーンのない時刻 | PlainTime('09:30:00') |
| Duration | 時間の長さ | Duration('PT2H30M') |
| List | 順序付きコレクション | [1, 2, 3] |
| Map | キーと値のコレクション | {a: 1} |
| Skip | 「これを省略」を意味するマーカー | Skip() |
| Lambda | インライン関数 | x ~> x * 2 |
値の型を確認
値の型を確認するにはtype_ofを使用します。
数値
WELには3つの数値型があり、ほとんどの連携では、その選択が最も重要な型の決定になります。
Integer
Integerは任意精度の整数です。 64-bitの上限はなく、2^53を超えても暗黙的な損失はありません。
64-bitの上限なし
次の例の結果は、JavaScriptの数値であれば精度が失われる地点を超えています。数値は64-bitの上限がない整数であるため、結果は正確なままです。
| Formula | 結果 |
|---|---|
9007199254740993 + 1 | 9007199254740994 |
これにより、大きな整数キーを発行するシステムからのレコード識別子を、そのまま受け取ることができます。
Float
Floatはバイナリ浮動小数点数です。 Float演算は高速で、測定値、比率、割合、科学的な値に適しています。 Floatはほとんどの小数を正確に表現できません。金額を扱う場合など、小数の精度が重要なケースではDecimalを使用します。
小数の不正確さ
次の例は、小数を扱うときのfloatの不正確さを示しています。
| Formula | 結果 |
|---|---|
0.1 + 0.2 | 0.30000000000000004 |
これは、floatが数値を2進数で保存し、ほとんどの小数は正確に表現できないために発生します。同じ丸めは、バイナリ浮動小数点を使用するあらゆる言語で発生します。
Decimal
Decimalは任意精度で正確な小数演算を提供します。金額を扱う場合など、小数の精度が重要なケースで使用します。
Decimalはスケールを保持
Decimalはスケールを保持するため、次の例の結果は余分な桁を取得したり短縮されたりせず、桁数を維持します。
| Formula | 結果 |
|---|---|
Decimal('0.1') + Decimal('0.2') | 追加の桁なしで0.3を返します。 |
Decimal('12.50') + Decimal('0.00') | 12.5に短縮されずに12.50を返します。 |
これにより、通貨は送信先まで正確な値を保持できます。
DECIMAL変換には文字列を使用
Decimal()変換には、Decimal(19.99)のようなfloatではなく、Decimal('19.99')のような文字列を渡します。 float形式では、まず19.99がFloatとして解析され、不正確な値がDecimalに渡されます。文字列形式では、桁19.99がDecimalに直接渡されるため、何も失われません。
数値型の混在
IntegerはDecimalおよびFloatの両方と組み合わせることができます。 DecimalとFloatを直接混在させることはできません。
| Formula | 結果 |
|---|---|
1 + Decimal('1') | 2 |
1.5 + Decimal('1') | E103が発生 |
この制限により、Floatが結果を暗黙的に近似値にすることを防ぎます。 E103を発生させることで、近似を明示的にすることを強制します。 E103を修正するには、DecimalオペランドをFloatに降格するのではなく、FloatオペランドをDecimalに変換します。
スキーマ推論はDECIMALを生成しません
サンプルJSONをTransform dataアクションに貼り付けると、12.50はFloatとして推論されます。金額を扱う場合など、ユースケースで小数の精度が重要な場合は、型を手動で設定します。
テキストとバイト
次の2つの型は、テキストと生バイトデータを保持します。
String
Stringは、一重引用符または二重引用符('または")で囲まれたUTF-8テキストです。
コードポイントまたは書記素クラスターで長さを測定
length関数は、ユーザーが認識する文字やバイトではなく、コードポイントを数えます。
| Formula | 結果 |
|---|---|
length('👨👩👧') | 5 |
grapheme_length('👨👩👧') | 1 |
一部の絵文字やアクセント付き文字は、読者には1文字に見える場合でも、複数のコードポイントで構成されています。ユーザーが認識する文字(書記素クラスター)を数えるには、grapheme_lengthを使用します。
文字列を連結
++による連結では、両側の型が一致している必要があります。
| Formula | 結果 |
|---|---|
'a' ++ 'b' | ab |
'x' ++ 1 | E101が発生 |
まずString(...)で要素を変換するか、補間時に変換するf-stringを使用します。
f"Order {_.id} has {_.count} items"Binary
Binaryは、16進形式で記述された生バイトです。例:0x"48656C6C6F"。
BINARY文字列変換
String()変換は、Binaryの表現を選択するのではなく、Binaryを拒否します。代わりに次のいずれかの変換を使用します。
- テキストセーフな形式には、encode_base64またはencode_hex_stringを使用します。
- 16進数をテキストとして読み取るには、名前付き文字エンコーディングとともにdecode_stringを使用します。
日付と時刻
WELには5つの時系列型があります。一般的な日付のバグを避けるため、ユースケースに合った型を使用します。
DateTime
DateTimeは、タイムゾーンまたはオフセットを持つ正確な時点です。作成、発送、ログ記録など、イベントの特定の時刻を記録するために使用します。例:DateTime('2026-03-15T09:30:00Z')。
PlainDate
PlainDateは、時刻とゾーンのないカレンダー日付です。請求書の日付、生年月日、契約開始日など、見る人全員にとって同じカレンダー日付に使用します。例:PlainDate('2026-03-15')。
タイムゾーンを無視するにはPlainDateを使用する
同じ時点でも、タイムゾーンによって日付が異なる場合があります。たとえば、2026-03-15T00:00:00Zは東京では15日の午前9時、ロサンゼルスでは14日の午後5時です。
PlainDateにはタイムゾーンがないため、すべてのユーザーに同じ日付として読み取られます。請求書の日付をPlainDateではなくDateTimeとして保存することは、1日ずれのエラーが発生する最も一般的な原因です。
PlainTime
PlainTimeは、日付とゾーンのない時刻です。店舗の開店時刻や日次締め時刻など、日付が付かない時刻に使用します。例:PlainTime('09:30:00')。
PlainDateTime
PlainDateTimeは、ゾーンのない日付と時刻です。ソースシステムがゾーンを別途提供し、ローカル時刻を送信する場合など、タイムゾーンが判明する前の壁時計時刻の読み取りに使用します。例:PlainDateTime('2026-03-15T09:30:00')。
Duration
Durationは、カレンダー単位ではなく固定の時計時間を保持し、Duration('PT2H30M')と記述します。年齢、2つのイベント間の経過時間、タイムアウトなど、時間の長さに使用します。
時計時間とカレンダー単位の比較
日などのカレンダー単位は、夏時間の変更をまたぐと実際の長さが変わる可能性があるため、Durationは日数などのカレンダー単位ではなく、時間や分などの固定の時計時間のみを受け入れます。例:
| Formula | 結果 |
|---|---|
Duration('PT72H') | 3日 |
Duration('P3D') | E020が発生 |
詳細については、Temporal functionsドキュメントを参照してください。
コレクション
WELには2つのコレクション型があります。 Listには順序付きデータが含まれ、Mapにはキーと値のデータが含まれます。
List
Listは、混在した型の要素を含めることができる順序付きコレクションです。リストを角括弧で囲み、値をカンマで区切ります。例:[1, 2, 3]。
詳細については、List functionsドキュメントを参照してください。
Map
Mapはキーと値のコレクションであり、JSONオブジェクト用のWEL型です。キーは常にStringで、挿入順序は保持されます。マップを中括弧で囲み、ペアをカンマで区切ります。例:{a: 1, b: 2}。
詳細については、Map functionsドキュメントを参照してください。
コレクションは文字列になりません
ListまたはMapが自動的にStringになることはありません。
| Formula | 結果 |
|---|---|
String([1, 2]) | E100が発生 |
この制限があるのは、誤って文字列化されたコレクション、たとえば配列全体が送信先フィールドに[object Object]や角括弧付きの塊として到着することが、追跡が最も難しい連携バグの1つであるためです。 E100を発生させることで、変換を明示的にすることを強制します。送信先が想定する内容に応じて、JSONにはto_json、WELリテラルにはto_wel、区切りリストにはjoin_to_stringを呼び出します。
NullとSkip
nullとSkipはどちらも不在を表しますが、多くの送信先システムでは動作が異なります。
null:フィールドに値がありません。キーは引き続き出力されます。Skip:これをまったく出力しません。キーはマップから除外されます。
| Formula | 結果 |
|---|---|
{a: 1, b: Skip()} | {a: 1} |
この区別は、CRM更新APIで特によく見られます。 nullを送信するとフィールドがクリアされますが、Skipでキーを省略すると、そのまま変更されません。
map_byでリストをフィルターおよび変換
値をテスト
present?は一般的なテストで、あらゆる種類の不在を同じように扱います。
| Formula | 結果 |
|---|---|
present?('SO-1001') | true |
present?(' ') | false |
present?(null) | false |
present?([]) | false |
present?(false) | true |
present?(false)はtrueを返します。これは、nullや空の文字列のように欠落データの代用ではなく、パイプラインが意図的に運ぶことができる実際の値であるためです。
presenceはあらゆる種類の不在をnullとして報告するため、空の文字列、空白のみの文字列、空のリスト、空のマップを含め、1つのフォールバック演算子(|)ですべて捕捉できます。
型間の変換
各型には、Integer(...)、Decimal(...)、PlainDate(...)などのコンストラクターがあります。コンストラクターは厳格です。たとえば、Integer('3 items')は部分的に解析するのではなくE102を発生させます。
変換で最も信頼性の高い形は、最初にすべてのフィールドを変換することです。
{
order_id: String(_.id),
qty: Integer(_.qty),
total: Decimal(_.total),
ship_date: PlainDate(_.ship_date)
}詳細については、Conversion functionsドキュメントを参照してください。
関連情報
- 標準ライブラリ: すべてのWEL関数に関する情報。
- 変換関数: 各データ型を構築する方法。
- Error codes:
E100、E101、E102、E103などのエラーをトラブルシューティングします。 - Transform data:Transform dataアクションでデータ型を宣言します。
最終更新日: