1.3. 基本コンセプト#

このセクションでは、Common Workflow Language(CWL)ワークフローの使用を開始するための基本的な概念について説明します。読者は、ワークフローマネージャー、YAML に精通し、コマンドラインの指示に従うことに慣れていることが期待されます。このユーザーガイドの他のセクションは、同じ概念をカバーしていますが、より詳細に説明されています。すでにCWLに精通している場合、またはより高度なコンテンツを探している場合は、このセクションをスキップできます。

1.3.1. CWLの仕様#

CWLは、コマンドラインツールを定義し、それらのツールを繋げてワークフローを作成します。CWLは仕様であり、特定のソフトウェアではないため、CWLを使用して定義されたツールやワークフローは、CWL標準をサポートするさまざまなプラットフォームで利用可能です。

CWL仕様は、CWLコミュニティによって書かれ、維持されている文書です。この仕様には異なるバージョンが存在します。このユーザーガイドで扱うバージョンはv1.2です。

仕様のバージョンは、.s(ドット)で区切られた最大3つの数字を持つことができます。最初の番号はメジャーリリースで、非推奨機能の削除など、後方互換性のない変更に使用されます。2番目の番号はマイナーリリースで、新機能や後方互換性のある小さな変更に使用されます。最後の番号は、仕様の誤字やその他の修正など、バグフィックスに使用される番号です。

注釈

仕様のバージョンアップに使われるモデルは、セマンティックバージョニングです。それについてもっと知りたい方は、このセクションの最後をご覧ください。

1.3.2. 実装#

CWL仕様の実装とは、あるバージョンの仕様書で定義された内容に従って書かれたソフトウェアのことです。ただし、実装は仕様にあるすべてを実装するわけではありません。CWLの実装は、オープンソース・ライセンスと商用ライセンスの両方でライセンスされています。

CWLは、多くのノードでタスクが並列にスケジューリングされるクラスタ、クラウド、ハイパフォーマンスコンピューティング環境における大規模なワークフローを記述するのに適しています。

digraph G { compound=true; rankdir="LR"; ranksep=0.75; fontname="Verdana"; fontsize="10"; graph [splines=ortho]; node [fontname="Verdana", fontsize="10", shape=box]; edge [fontname="Verdana", fontsize="10"]; subgraph cluster_0 { label="Implementations"; ranksep=0.25; cwltool; toil; Arvados; runner_others[label="..."]; label="CWL Runners"; } subgraph cluster_1 { label="Tools"; ranksep=0.25; subgraph cluster_2 { "vscode-cwl"; "vim-cwl"; benten; editor_others[label="..."]; label="Editors"; } subgraph cluster_3 { "CWL Viewer"; "vue-cwl"; viewer_others[label="..."]; label="Viewers"; } "And more"; } cwltool -> "CWL Specification" [ltail=cluster_0, dir=back]; "CWL Specification" -> "vscode-cwl" [lhead=cluster_1]; "vscode-cwl" -> "CWL Viewer" [style=invis]; "CWL Viewer" -> "And more" [style=invis]; }

CWL仕様、実装、その他ツール。#

1.3.3. Processes 及び Requirements#

Processとは、入力を受けて出力を生成する計算のユニットです。Processの動作は、inputs、requirements、hintsに影響されることがあります。CWL仕様v1.2では、4種類のProcessが定義されています:

  • コマンドラインツール。

  • Expression ツール。

  • Operation。

  • ワークフロー。

digraph "A GraphViz graph with the CWL processing units, e.g. Process, Workflow, CommandLineTool, etc." { rankdir="TB"; graph [splines=false]; node [fontname="Verdana", fontsize="10", shape=box]; edge [fontname="Verdana", fontsize="10"]; Process; CommandLineTool; ExpressionTool; Operation; Workflow; node[label="", width=0, height=0]; edge[arrowhead=none]; n1; {rank=same; CommandLineTool; ExpressionTool; Operation; Workflow;} Process -> n1 [arrowhead=normal, dir=back]; n1 -> CommandLineTool; n1 -> ExpressionTool; n1 -> Operation; n1 -> Workflow; }

CWLオブジェクトモデルで使用可能な処理単位です。#

CommandLineToolは、echolstar のようなコマンドのラッパーです。CommandLineToolは、Workflowから呼び出せます。

ExpressionToolは、JavaScriptの式のラッパーです。WorkflowやCommandLineToolの簡略化に使用でき、ワークフロー実行の共通部分を、CommandLineToolのように入力を受けて出力を生成する再利用可能なJavaScriptコードに移動させることができます。

Operationは、入力を受け、出力を出す抽象的なプロセスでもあり、ワークフローで使用できます。しかし、あまり一般的に使われていない特別な処理です。このユーザーガイドのOperation編で説明します。

Workflowは、ステップを含むプロセスです。ステップには、他のWorkflow(ネストされたWorkflow)、CommandLineTool、ExpressionToolを使用できます。Workflowの入力は、そのステップのいずれかに渡すことができ、ステップによって生成された出力は、Workflowの最終出力に使用できます。

CWL 仕様では、requirements を通じて、実装が追加機能を提供し、ワークフローの前提条件を指定できます。CWL仕様には、例えば、以下のような多くの要件が定義されています:

いくつかのCWL runnerは、仕様にないrequirementsを提供することがあります。例えば、GPUに関するrequirementsはcwltoolcwltool:CUDARequirement を通してサポートされていますが、v1.2仕様の一部ではないので、他のCWL runnerではサポートされていないかもしれません。

HintsはRequirementsと似ていますが、Requirementsが必須機能を列挙するのに対し、Hintsはオプションの機能を列挙します。Requirementsについては、Requirements セクションで詳しく説明しています。

1.3.4. FAIRワークフロー#

FAIR原則は、デジタル資産、特にデータを共有し公開するための基礎を作りました。FAIR原則は、機械可読性を重視し、すべてのデジタル資産は、検索可能(Findable)、アクセス可能(Accessible)、相互運用可能(Interoperable)、再利用可能(Reusable)であるべきとしています。ワークフローは、科学的プロセスが実施され、データが作成される方法をコード化します。従って、ワークフローがFAIRデータの作成をサポートし、かつワークフロー自身がFAIRの原則を遵守することは重要です。- FAIR Computational Workflows, Workflows Community Initiative.

CWLのルーツは、タスク間の依存関係に基づき、実行順序を決定する "make" や多くの類似ツールにあります。しかし、"make" とは異なり、CWLのタスクは分離されており、入力と出力を明示する必要があります。

CWLで定義されたツールやワークフローは、Dockerなどの技術を透過的に活用し、異なるベンダーのCWL実装と組み合わせて使用することができるためです。

cwltool はまた、データプロベナンスのためのPROV-O標準オントロジーを使用しています。

1.3.5. さらなる学習#