バイオインフォマティクスにおけるパイプラインの構築にはどのフレームワークを使用すれば良いか

バイオインフォマティクス解析においては、多数のOSS(オープンソースソフトウェア)を組み合わせてパイプラインを構築することがよくあります。パイプラインの構築は、自分の好きな言語を選んで自己流で行うことも可能ですが、パイプライン構築用のフレームワークを使用することで、可読性が高く、簡潔なプログラムを書くことができるようになります。
多くのフレームワークではDockerコンテナに対応しているため、多数のOSSの実行環境を整備するといった手間のかかる作業を短縮することができます。また、Dockerコンテナを使用すると、パイプラインのポータビリティが高まりますので、他の研究者へパイプラインを渡したり、クラウド上でパイプラインを実行したりすることも容易になります(再現性の向上)。
パイプライン構築用のフレームワークは、awesome-pipelineにまとめられています。たくさんありますので、そのうち主なものを以下にまとめました。

snakemake

Pythonベースのフレームワーク。Pythonの記法が使えるので、柔軟なワークフローが設計できる。ただ、柔軟なワークフローが設計できる分、タスクごとにDockerで実行環境を分離する考え方と相性が悪く、パイプラインのポータビリティはあまり良くない印象。

例)

  1. rule targets:
  2. input:
  3. "plots/dataset1.pdf",
  4. "plots/dataset2.pdf"
  5.  
  6. rule plot:
  7. input:
  8. "raw/{dataset}.csv"
  9. output:
  10. "plots/{dataset}.pdf"
  11. shell:
  12. "somecommand {input} {output}"

Common Workflow Language(CWL)

ワークフローを記述するための統一言語。CWLを実行するためのソフトウェアはcwltoolArvadostoil等たくさん開発されている。

例)

  1. #!/usr/bin/env cwl-runner
  2.  
  3. cwlVersion: v1.0
  4. class: CommandLineTool
  5. baseCommand: echo
  6. inputs:
  7. message:
  8. type: string
  9. inputBinding:
  10. position: 1
  11. outputs: []

Nextflow

CWLと目指す方向はほぼ一緒であるが、CWLは言語仕様と実行エンジンが分離しているのに対して、Nextflowは同一である。その分、Nextflowの方がCWLと比べて柔軟にワークフローを記述できる印象。

例)

  1. params.query = "$HOME/sample.fa"
  2. params.db = "$HOME/tools/blast-db/pdb/pdb"
  3.  
  4. process blast {
  5. output:
  6. file top_hits
  7.  
  8. """
  9. blastp -query ${params.query} -db ${params.db} -outfmt 6 \
  10. | head -n 10 \
  11. | cut -f 2 > top_hits
  12. """
  13. }
  14.  
  15. process extract {
  16. input:
  17. file top_hits
  18. output:
  19. file sequences
  20.  
  21. "blastdbcmd -db ${params.db} -entry_batch $top_hits > sequences"
  22. }
  23.  
  24. process align {
  25. input:
  26. file sequences
  27. echo true
  28.  
  29. "t_coffee $sequences 2>&- | tee align_result"
  30. }

メモ

NextflowのGitHubスター数が635、CWLのGitHubスター数が815(2018年11月19日)であることから、CWLがやや優勢?

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です