Edited at

俺の CWL ワークフローがこのエンジンで動かない件 (事件編)


TL;DR



  • requirements を使用した CWL ワークフローやツールは、CWL 準拠のワークフローエンジンであっても動かない場合がある


    • 使用している Requirement に対応しているエンジンを選ぶ必要がある



  • 公式が提供している、準拠度を測るテストを実行することで、どのエンジンがどの Requirement に対応しているかがわかる

  • そんなの見てられない。なんとかするべき。

  • つづく。


注意!

本記事は二部構成になっています。


  • (この記事) CWL で書かれたワークフローが、問答無用で CWL 準拠のワークフローエンジンで動くわけではない話


    • 対象


      • CWL でワークフローを書くユーザー





  • (次の記事) 上を解決するために、機能ごとの準拠度を表すバッジを付ける話


    • 対象


      • README に詳細な準拠度を表すバッジを付けてドヤ顔したいワークフローエンジン開発者

      • バッジが付いてないエンジンに対して、バッジを付けるプルリクエストを投げつけて「このエンジンはわしが育てた」とドヤ顔したいユーザー






はじめに

CWL に対応しているワークフローエンジン一覧は、https://www.commonwl.org/ の Implementations で確認できます。

ここに載っているエンジンであれば CWL で書かれたワークフローを全部実行できる…と思いきや、実はそうでもありません。

問題は仕様の3.3節の Requirements and hints にあります。

この節では、ツールを Docker コンテナで動かすための DockerRequirement や、ワークフローのネストをサポートする SubworkflowFeatureRequirement などの各 Requirement がどう動くべきかが記述されているのですが、ここを読むとこれらが optional な機能であることがわかります。


If an implementation cannot satisfy all requirements, or a requirement is listed which is not recognized by the implementation, it is a fatal error and the implementation must not attempt to run the process, unless overridden at user option.


つまり、 なんとかRequirement が含まれるワークフローやツールを実行する場合、その Requirement に対応したエンジンを使用する必要があります。

じゃあどのエンジンがどの Requirement に対応してるの?と公式サイトの Implementations を確認すると、そういう情報が載っていないことがわかります。つらい。


各エンジンがどの Requirement に対応しているか知りたい

CWL プロジェクトでは conformance test という、エンジンの CWL 準拠度を測るテスト一式と、簡単に全テストを走らせるためのスクリプトが提供されています。

各テスト項目は以下のようになっています。


v1.0/conformance_test_v1.0.yaml

- job: v1.0/bwa-mem-job.json

tool: v1.0/bwa-mem-tool.cwl
output:
args: [bwa, mem, -t, '2', -I, '1,2,3,4', -m, '3',
chr20.fa,
example_human_Illumina.pe_1.fastq,
example_human_Illumina.pe_2.fastq]
label: cl_basic_generation
id: 1
doc: General test of command line generation
tags: [ required, command_line_tool ]

大まかには、入力となる CWL ファイル (tool) 、パラメータファイル (job)、期待される出力 (output) などが書かれていますが、今回注目すべきは tags フィールドです。ここには required (対応が必須) や command_line_tool (ツール定義)、docker (DockerRequirement を使用)など、このテスト内で使用している機能が列挙されています。

つまり、成功・失敗したテストのタグを見ることで、あるエンジンが各機能に対応しているかどうかがわかります。でもそんなのやりたくない。


つづく

CWL の conformance test を実行することで、エンジンの各機能への対応状況が確認できることはわかりました。でも全部のエンジンでテストを走らせて結果を目視するのなんてやりたくありません。

公式サイトの Implementation には passing とか unstable とかバッジが付いているので、同じ要領で各機能ごとのバッジとか付けて欲しいですね。

付けられるようにしました(まだ付いていない)。次の記事で、README にバッジを付ける話をします。