CWL の requirements 一巡り: EnvVarRequirement
この記事は CWL Advent Calendar 2020 の12日目の記事です。
Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]。
今回は CWL v1.2 で定義されている EnvVarRequirement
について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。
対象読者
- CWL をかじったことがあるけど
requirements
はよくわからない人- つまり中級者以上が対象です。
- 初心者は CWL Advent Calendar 2020 の初日の記事へ Go!
例
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
が実行されます。
Discussion