Skip to Content
リファレンス組み込み関数高度な関数使用法

高度な関数使用法

このページでは、関数の組み合わせ方と書き方のコツをまとめます。

関数チェーン

パイプ演算子(|)は左辺の値を第1引数として渡します。

vars: clean_name: "{{RAW_NAME | trim | lower | replace(' ', '-')}}" api_base: "{{BASE_URL | trimSuffix('/')}}" with: url: "{{vars.api_base}}/api"

同じことは入れ子の関数呼び出しでも書けます。 チェーンが3段を超えるようなら、varsに分けたほうが読みやすくなります。

vars: clean_name: "{{replace(lower(trim(RAW_NAME)), ' ', '-')}}"

条件式での利用

testskipifはブール式なので、テンプレートの波カッコは不要です。

test: | res.code == 200 && len(res.body.items) > 0 && upper(res.body.status) contains "SUCCESS" skipif: vars.environment != "production"

デフォルト値とフォールバック

??演算子がnil合体演算子です。 default()coalesce()という関数はないので、??をつなげます。

vars: timeout: "{{REQUEST_TIMEOUT ?? '30s'}}" api_url: "{{CUSTOM_API_URL ?? DEFAULT_API_URL ?? 'https://api.example.com'}}" outputs: item_count: "{{len(res.body.items ?? [])}}" user_name: "{{upper(res.body.user.name ?? 'unknown')}}"

データの整形

配列・マップ関数を組み合わせると、レスポンスから必要な値だけを取り出せます。

outputs: # 有効なユーザー名をカンマ区切りで並べる active_users: "{{join(map(filter(res.body.users, #.active), #.name), ', ')}}" # 成功率をパーセントで計算する success_rate: "{{round(res.body.successful * 100 / res.body.total)}}%" # ステータスごとの件数をまとめる by_status: "{{toJSON(groupBy(res.body.items, #.status))}}"

値は一度だけ計算する

ワークフローのvarsは実行開始時に一度だけ評価されます。 複数のステップで同じ値を使うなら、varsに置いて参照します。

vars: api_url: "{{BASE_URL | trimSuffix('/')}}" run_id: "{{random_str(8)}}" jobs: - name: test steps: - name: Health check uses: http with: method: GET url: "{{vars.api_url}}/health" headers: X-Run-Id: "{{vars.run_id}}" - name: Metrics uses: http with: method: GET url: "{{vars.api_url}}/metrics" headers: X-Run-Id: "{{vars.run_id}}"

ステップごとにrandom_str(8)を書くと、ステップごとに別の値になります。 同じ実行を識別するIDが欲しい場合は、上のようにvarsで固定してください。

関連項目

更新日時