Common Workflow Language (CWL) とは
バイオインフォマティクスでは複数のツールを組み合わせたパイプラインを構築してデータを処理することが多いと思います。例えばRNA-seq解析であれば以下のような流れが考えられます。
- FASTQファイルの準備 (bcl2fastq)
- シーケンスクオリティーの評価 (e.g. FASTQC)
- マッピング (e.g. hisat2)
- 遺伝子発現量の推定 (e.g. Stringtie)
ここで問題になりがちなのが再現性です。
各ソフトウェアのバージョン、マッピングに用いるリファレンスゲノムのバージョン、GTFファイルの種類...など種々の要因を正しく管理しなければ、完全に結果を再現することは困難です。2年前にシェルスクリプトで構築したパイプラインを動かすと結果も微妙に変わった、というような経験のある人も多いのではないでしょうか。
このような問題を解決する上で役に立つのがCWLをはじめとするワークフロー言語です。
CWLは何が良いのか?
上述したRNAseqのパイプラインをCWLで構築しようとすると次のような構成になります。
用意するファイルは大きく分類すると以下の3種類です。
- 各ステップの要件を記述したcwlファイル (例: bcl2fastq.cwl)
- パイプライン(ステップの並び)を記述したcwlファイル (例: RNAseq.cwl)
- パイプラインへ与える引数 (e.g. 入力ファイル、パラメータ) を記述したyamlファイル (例: RNAseq.yml)
cwlファイルごとに異なるDocker imageを指定することが出来ます。したがって、作成したcwlファイルを別環境に持っていってもすぐに動かすことが出来ますし、依存関係の問題で動かすことが困難なソフトウェアもワークフローに楽に組み込むことが出来ます。
CWLの書き方
CWLの細かな文法に関しては公式ドキュメントに詳しく記載されています。特に
Common Workflow Language User Guideは良く出来た入門ページだと思います。(日本語訳を選択することも可能です)
しかしながらこのUser Guideには記載されていない便利なオプションが色々とありましたので備忘録も兼ねて記録しておこうと思います。以下にメモを残したワークフローはこちらに置いてあります。
CommandLineTool (各ステップのcwlファイル)
ワークフローを構成する各ステップの詳細を記載したcwlファイルを用意します。基本的には以下のような形式です。もっとオプションは色々あるようですが、よく使いそうなものを記載しました。
gistaa0012b7250665b4706e14f23f20fe02
デバッグの際には実際にcwlファイルを走らせてみると良いでしょう。cwlを走らせるには、cwlへの入力についての情報を記載したyamlファイルを用意する必要があります。
gist9813be5a7303d4c8f2fed973b9475bdb
cwlファイルとymlファイルを指定してcwltoolを起動します。この際に何らかの問題があればエラーが表示されるのでそれを元にデバッグしましょう。何も問題なければcwlファイルのoutputにて指定されているファイルが出力されるはずです。
Workflow (ワークフローのcwlファイル)
各コマンドのcwlファイルが完成した後はワークフローのcwlファイルを作成します。
gist04f8be640433260141838466ce17eb28
こちらも同様にインプットの情報を記載したyamlファイルを作成します。cwltool等で実行すればワークフローが走ります。