1.1. クイックスタート#

このセクションでは、CWLとは何か、またCWLについてもっと詳しく知ることができる場所について、簡単に紹介します。CWLに関する予備知識は必要ありませんが、コマンドラインを使用することに慣れていると良いです。

1.1.1. "Hello World"#

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

CWLドキュメントはYAML(および/またはJSON)で書かれています。以下の例は、コメントで注釈されたシンプルなCWL "Hello World" ワークフローを示しています。コメントは# で始まることに注意してください:

hello_world.cwl#
cwlVersion: v1.2

# What type of CWL process we have in this document.
class: CommandLineTool
# This CommandLineTool executes the linux "echo" command-line tool.
baseCommand: echo

# The inputs for this process.
inputs:
  message:
    type: string
    # A default value that can be overridden, e.g. --message "Hola mundo"
    default: "Hello World"
    # Bind this message value as an argument to "echo".
    inputBinding:
      position: 1
outputs: []

上記の例は、echo のCommandLineToolのラッパーに過ぎません。デフォルトの入力値で上記のワークフローを実行すると、コマンドラインと同じ結果が得られますecho "Hello World".

注釈

CWLでは、CommandLineToolとWorkflowは区別されています。しかし、ここでは簡略化のため、「ワークフロー」という用語を使用しています。これについては、基本概念のセクションで詳しく説明します。

1.1.2. CWL Runnerのインストール#

cwltool は、CWL仕様の実装の1つです。また、同仕様のCWLReference Runner でもあり、同仕様の最新バージョンに準拠しています:v1.2に準拠しています。cwltool は、pip を使ってインストールできます:

cwltoolpip でインストールします。#
$ pip install cwltool

注釈

pipコマンドを使用してcwltoolをインストールしてもうまくいかない場合は、前提条件セクションに、cwltool をインストールする他の方法と、このユーザーガイドの残りの部分を追うために使用するソフトウェアとライブラリのより詳細なリストがあります。

1.1.3. "Hello World"を実行する#

基本的に cwltool の使い方は、cwltool [OPTIONS] [CWL_DOCUMENT] [INPUTS_OBJECT]です。hello_world.cwl Workflowは、オプションを指定せずに実行できます:

hello_world.cwlcwltool で実行します。#
$ cwltool hello_world.cwl
INFO /home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/envs/latest/bin/cwltool 3.1.20240508115724
INFO Resolved 'hello_world.cwl' to 'file:///home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/hello_world.cwl'
INFO [job hello_world.cwl] /tmp/yby_m8ez$ echo \
    'Hello World'
Hello World
INFO [job hello_world.cwl] completed success
{}INFO Final process status is success

また、echo base コマンドの引数を変更するのと同様に、入力パラメータmessage のデフォルト値を上書きすることもできます:

hello_world.cwlcwltool で入力パラメータを渡して実行する。#
$ cwltool hello_world.cwl --message="Hola mundo"
INFO /home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/envs/latest/bin/cwltool 3.1.20240508115724
INFO Resolved 'hello_world.cwl' to 'file:///home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/hello_world.cwl'
INFO [job hello_world.cwl] /tmp/kqck9x94$ echo \
    'Hola mundo'
Hola mundo
INFO [job hello_world.cwl] completed success
{}INFO Final process status is success

ワークフロー入力パラメータに値を渡すもう一つの方法は、Inputs Object を介する方法です。これは、入力フィールドとその対応する値を含むファイルです。Inputs Objects ファイルは、JSON または YAML で記述できます。例えば、以下のようになります:

hello_world-job.json#
{
  "message": "こんにちは世界"
}

このInputs Objectファイルを使用して、「Hello World」ワークフローを実行することができるようになりました:

cwltool に Inputs Object ファイルを渡します。#
$ cwltool hello_world.cwl hello_world-job.json
INFO /home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/envs/latest/bin/cwltool 3.1.20240508115724
INFO Resolved 'hello_world.cwl' to 'file:///home/docs/checkouts/readthedocs.org/user_builds/common-workflow-language-user-guide-ja/checkouts/latest/src/_includes/cwl/hello_world.cwl'
INFO [job hello_world.cwl] /tmp/fws4xfph$ echo \
    こんにちは世界
こんにちは世界
INFO [job hello_world.cwl] completed success
{}INFO Final process status is success

注釈

ワークフローとInputs Objectファイルには、同様のファイル名を使用しました。-job.json という接尾辞は、Inputs Object ファイルでは非常に一般的ですが必須ではありません。ワークフローとInputs Objectファイルには、任意の名前を付けることができます。

1.1.4. さらなる学習#

このユーザーガイドの次のセクションを読み進めてください!