2.6. パラメータリファレンス#

前の例では、"tar "プログラムを使用してファイルを抽出しました。しかし、その例は非常に限定的なものでした。というのも、私たちが興味を持っているファイルは"hello.txt"と呼ばれ、これが.cwl ファイルに直接書き込まれていると仮定していたからです。これは最良の方法ではありません。なぜなら、"hello.txt "というファイル名は、使用する入力ファイルによって異なるか、または依存する可能性があるからです。 これを避けるために、ジョブパラメーターファイル(.yml)で必要なファイル名を指定できます。この例では、入力パラメーターの値を他のフィールドから動的に参照して、抽出するファイル名を指定する方法を説明します。

tar-param.cwl#
#!/usr/bin/env cwl-runner
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, --extract]
inputs:
  tarfile:
    type: File
    inputBinding:
      prefix: --file
  extractfile:
    type: string
    inputBinding:
      position: 1
outputs:
  extracted_file:
    type: File
    outputBinding:
      glob: $(inputs.extractfile)
tar-param-job.yml#
tarfile:
  class: File
  path: hello.tar
extractfile: goodbye.txt

入力ファイル(入力オブジェクト)を作成し、コマンドラインでツール定義と入力オブジェクトを指定してcwltool を呼び出します:

$ rm hello.tar || true && touch goodbye.txt && tar -cvf hello.tar goodbye.txt
$ cwltool tar-param.cwl tar-param-job.yml
INFO /home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/envs/latest/bin/cwltool 3.1.20240508115724
INFO Resolved 'tar-param.cwl' to 'file:///home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/parameter-references/tar-param.cwl'
INFO [job tar-param.cwl] /tmp/rx2bp5av$ tar \
    --extract \
    --file \
    /tmp/egc9yteh/stgad2b8073-4b80-4762-af73-98830a39f162/hello.tar \
    goodbye.txt
INFO [job tar-param.cwl] completed success
{
    "extracted_file": {
        "location": "file:///home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/parameter-references/goodbye.txt",
        "basename": "goodbye.txt",
        "class": "File",
        "checksum": "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709",
        "size": 0,
        "path": "/home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/parameter-references/goodbye.txt"
    }
}INFO Final process status is success

$(...) で囲まれたパラメータ参照を許可するフィールドもあります。これらは評価され、参照されている値に置き換えられます。

outputs:
  extracted_out:
    type: File
    outputBinding:
      glob: $(inputs.extractfile)

パラメータリファレンスは、Javascriptの構文のサブセットを使用して記述します。 この例では、$(inputs.extractfile)$(inputs["extractfile"])$(inputs['extractfile']) は同じです。

変数 "inputs "の値は、CWLツールの起動時に提供された入力オブジェクトです。

File パラメータはオブジェクトであるため、入力ファイルのパスを取得するには、ファイルオブジェクトのpathフィールドを参照する必要があります。上記の例でtarファイルのパスを参照するには、$(inputs.tarfile.path)となります。

パラメータ参照はどこで許されるのですか?

パラメータ参照は、特定のフィールドでのみ使用できます。 以下はその例です: