🐥

コマンドラインからCWL定義を書くまでの1つのやり方

2022/09/30に公開

いくつも方法はありますが、その1つを紹介します。

かなり細かくステップをわけて6ステップにしてみました。
ただし1つのステップは非常に短いです。
1度に1つづつ変更していくことで、問題の切り分けを容易にできるようにと考えています。

1つステップを進めて、失敗するときは、1つ前に戻ることをおすすめします。

そのために、git(ほかに好きなものがあればそれで)でバージョン管理しておくことをおすすめします。

Step 1. CWLにしない状態で正しく動くことを確認する。

普通にコマンドを実行して、期待する結果がかえってくることを確認します。

Step 2. そのままコマンドを実行するだけのCWL定義を書く。

この時点では、dockerなどは使用せず、そのままコマンドを実行してみます。
期待する結果が返ってくることを確認します。
この時点では引数も固定で、パラメータで指定するようにはせず、全く同じコマンドを実行するようにします。

Step 3. すべて回収するように outputs を指定する

このように outputs を指定することで、コマンドにより出力された、ファイルおよびディレクトリのすべて、及び標準出力を回収します。

outputs:
  - id: all-for-debugging
    type:
      type: array
      items: [File, Directory]
    outputBinding:
      glob: "*"
  - id: out
    type: stdout
stdout: output.txt

Step 4. dockerを使いたいときはdockerを使うようにする

hintsやrequirementsで DockerRequirement を追加します。
このとき、引数や、出力ファイルの定義はそのままであったほうがよいです。

若干のバージョンちがいにより、出力されるものが変わることがあるためです。

Step 5. 出力として回収したいものを指定する

出力として回収したいものを指定します。
ログファイルなどは不要な事が多いと思います。必要なものだけを回収するように指定するべきです。

Step 6. 引数をパラメータにする

ここで、はじめて引数をパラメータにします。
パラメータが期待するようにわたらないとき、正しく実行できなかったり、必要なファイルが回収できなかったりします。

## この記事は

この記事は、
Common Workflow Language (CWL) Advent Calendar 2019 - Qiitaの2日目、
Common Workflow Language (CWL) Advent Calendar 2021 - Adventarの6日目の記事になります。

Discussion