1.2. 前提条件#
このセクションに記載されているソフトウェアと構成は、このユーザーガイドに従うための前提条件となるものです。CWL標準は、多くの異なるワークフローランナー(訳注:ワークフローを実行するためのソフトウェア)やプラットフォームによって実装されています。この要件のリストは、CWL reference runner であるcwltool
に焦点を当てています。他のCWL-compatible runnerやワークフローシステムを使用することもできますが、結果やインターフェイスは異なるかもしれません(ただし、正確なワークフロー出力は同一でなければなりません)。
CWL実装
CWL標準規格の実装は数多く存在します。あるものは完全なCWL実装であり、他のものはワークフローエンジンのプラグインや拡を含むことがあります。実装のセクションでより詳しい説明をしています。
1.2.1. オペレーティングシステム#
最新のオペレーティングシステムを使用することをお勧めします。OSは、以下のいずれかをお選びいただけます:
Linux
macOS
Windows
注釈
Windowsを使用している場合は、Microsoft Windows ユーザのためのcwltool
文書に記載されているように、Windows Subsystem for Linux 2をインストールする必要があります。インターネットアクセスとPythonの最新バージョン(3.6+)も必要です。
1.2.2. CWL Runner#
CWL ワークフローを実行するために最初に必要なものは、CWL runnerです。cwltool
は、CWL コミュニティによって維持されている Python オープンソース・プロジェクトです。これはCWL reference runner(訳注: CWLの参照実装)でもあり、cwltool
は現在のCWL仕様v1.2
のすべてをサポートしなければならないことを意味します。
cwltool
は pip
、apt
または conda
でインストールできます。venv
や conda
のような仮想環境を使用することを推奨します。
注釈
cwltool
をapt
とconda
とともにインストールする他の方法については、cwltool
ドキュメント を参照してください。
簡単なCWLツール定義true.cwl
でcwltool
を使ってみましょう。
true.cwl
#cwlVersion: v1.2
class: CommandLineTool
inputs: []
outputs: []
# `true` is a Linux command that exits with exit code `0` (success).
baseCommand: "true"
cwltool
コマンドには、CWL ツールおよびワークフロー定義を検証するオプションがあります。このオプションは、CWL文書を解析し、構文エラーを探し、ワークフロー記述がCWL標準に準拠しているかどうかを検証します。ただし、これらの操作は、ドキュメントを実行せずに行われます。CWLワークフロー(または上記のようなスタンドアロンコマンドラインツールの記述も)を検証するには、cwltool
コマンドに--validate
オプションを渡します:
cwltool
を使って true.cwl
を検証します。#$ cwltool --validate true.cwl
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwltool 3.1.20240508115724
INFO Resolved 'true.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/true.cwl'
true.cwl is valid CWL.
--validate
オプションを省略することで、CWLツール定義を実行できます:
cwltool
を使って true.cwl
を実行します。#$ cwltool true.cwl
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwltool 3.1.20240508115724
INFO Resolved 'true.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/true.cwl'
INFO [job true.cwl] /tmp/ui8_39lo$ true
INFO [job true.cwl] completed success
{}INFO Final process status is success
1.2.2.1. 一般的な cwl-runner
エイリアス#
cwl-runner
は、CWL準拠のランナーに対する、実装にとらわれないエイリアスです。これは、cwl-runner
エイリアスコマンドを独立して呼び出すことができ、特定のCWL runner のプログラム名に依存しないことを意味します。ユーザーは、cwltool
のようなCWL runnerを直接呼び出す代わりに、cwl-runner
を呼び出すことができます。cwl-runner
は、システム管理者またはユーザーによってインストールされ、好みのCWL実装を指します。これは、複数のCWL runnerがある環境で便利です。
CWLコミュニティは、cwlref-runner
という名前のPythonパッケージを公開しており、cwltool
のエイリアスをcwl-runner
という名前でインストールします。
cwl-runner
を pip
でインストールします。#$ pip install cwlref-runner
これで cwl-runner
実行ファイルを用いてワークフローを検証・実行し、cwltool
を呼び出すことができるようになりました。前のセクションと同じ結果と出力が得られるはずです。
true.cwl
withcwl-runner
.#$ cwl-runner --validate true.cwl
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwl-runner 3.1.20240508115724
INFO Resolved 'true.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/true.cwl'
true.cwl is valid CWL.
true.cwl
を cwl-runner
で実行します。#$ cwl-runner true.cwl
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwl-runner 3.1.20240508115724
INFO Resolved 'true.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/true.cwl'
INFO [job true.cwl] /tmp/ql4lgs56$ true
INFO [job true.cwl] completed success
{}INFO Final process status is success
cwl-runner
を実行するもう一つの方法は、ファイルを直接起動することです。そのためには、まずtrue.cwl
ワークフローを新しいファイルtrue_shebang.cwl
にコピーし、特別な最初の行、shebang を含める必要があります:
true_shebang.cwl
##!/usr/bin/env cwl-runner
cwlVersion: v1.2
class: CommandLineTool
inputs: []
outputs: []
# `true` is a Linux command that exits with exit code `0` (success).
baseCommand: "true"
chmod u+x
を実行することで、 true_shebang.cwl
を実行可能なファイルにできます。
true.cwl
実行可能なものにする。#$ chmod u+x true.cwl
そして最後に、コマンドラインで直接実行できます。実行時には、shebangで指定されたプログラム(cwl-runner
)が、ファイルの残りの部分を実行するために使用されます。
true_shebang.cwl
をシェバングで実行する。#$ ./true_shebang.cwl
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwl-runner 3.1.20240508115724
INFO Resolved './true_shebang.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/true_shebang.cwl'
INFO [job true_shebang.cwl] /tmp/xs0k60x9$ true
INFO [job true_shebang.cwl] completed success
{}INFO Final process status is success
注釈
shebang (訳注:発音、シバン、シェバン)は、スクリプトの冒頭の2文字列#!
のことです。スクリプトが実行可能な場合、オペレーティングシステムは、shebangの後に指定された実行可能ファイルを使用してスクリプトを実行します。/usr/bin/env <executable>
は <executable>
プログラムを設定されている環境変数PATH
の中で探すので、ハードコードされた場所を使うよりも/usr/bin/env <executable>
を使うことが良い習慣と考えられています
1.2.3. テキストエディタ#
CWLではどんなテキストエディタでも使えますが、シンタックスハイライトのために、YAMLをサポートするエディタをお勧めします。人気のあるエディタは、Visual Studio Code、Sublime、WebStorm、vim/neovim、そしてEmacsです。
Visual Studio CodeとWebStormには、CWLとの統合を実現する拡張機能があり、カスタマイズされたシンタックスハイライトやより優れた自動補完などの機能が用意されています:
Benten(弁天)(CWL)プラグインを使ったVisual Studio Code -rabix/benten
IntelliJ 用 cwl-plugin -https://plugins.jetbrains.com/plugin/10040-cwl-plugin
CWLコミュニティでは、エディターやビューアーのリストも管理しています:https://www.commonwl.org/tools/#editors
1.2.4. Docker#
cwltool
は、ツール、ワークフロー、およびワークフロー ステップで指定されたソフトウェアコンテナをDockerを使用して実行します。Docker ドキュメントの指示に従って、お使いのオペレーティングシステム合わせてインストールしてください:https://docs.docker.com/.
Dockerコンテナの書き方や構築方法を知っておく必要はありません。このユーザーガイドの残りの部分では、実行例として既存のDockerイメージを使用し、コンテナのある実行モデルとない実行モデルの違いを明確にすることにします。
注釈
cwltool
は、Docker、Podman、udocker、Singularityによるコンテナの実行をサポートしています。また、コンテナイメージを取得するために代替のコンテナレジストリを使用することもできます。
1.2.5. さらなる学習#
次項の「基本コンセプト」の実装のトピックを参照してください。
Python
venv
モジュール:https://docs.python.org/3/library/venv.html