🐓

CWL の requirements 一巡り: EnvVarRequirement

2020/12/12に公開

この記事は CWL Advent Calendar 2020 の12日目の記事です。

Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]

今回は CWL v1.2 で定義されている EnvVarRequirement について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。

対象読者

Conformance test #34: tests/env-tool1.cwl:

class: CommandLineTool
cwlVersion: v1.2
inputs:
  in: string
outputs:
  out:
    type: File
    outputBinding:
      glob: out

requirements:
  EnvVarRequirement:
    envDef:
      TEST_ENV: $(inputs.in)

baseCommand: ["/bin/sh", "-c", "echo $TEST_ENV"]

stdout: out

以下は仕様書の 4.2 節 からの引用です。

When executing the tool, the tool must execute in a new, empty environment with only the environment variables described below; the child process must not inherit environment variables from the parent process except as specified or at user option.

  • HOME must be set to the designated output directory.
  • TMPDIR must be set to the designated temporary directory.
  • PATH may be inherited from the parent process, except when run in a container that provides its own PATH.
  • Variables defined by EnvVarRequirement
  • The default environment of the container, such as when using DockerRequirement

ここに書かれている通り、一般に PATH 以外の環境変数はツール実行時には引き継がれません。EnvVarRequirement を使うことで、特定の環境変数をツールに渡すことが可能になります。上の例では、入力パラメータ $(inputs.in) で渡された文字列を環境変数 TEST_ENV に設定し、TEST_ENV が有効な環境下で echo $TEST_ENV が実行されます。

脚注
  1. つまり、Process requiremens を含むワークフローやツール定義は、全ての CWL 準拠のワークフロー実行処理系で動かせるわけではありません。詳細は別記事を参照してください。 ↩︎

Discussion