コマンドラインからCWL定義を書くまでの1つのやり方
いくつも方法はありますが、その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