Nextflowのチュートリアル
はじめに
[Nextflowのチュートリアル>https://www.nextflow.io/docs/latest/index.html]に則ってスクリプトを動かしてみたので、その記録を残す。
Nextflowとは
Nextflow関連の記事
- nf-coreのRNA seq解析パイプライン nf-core/rnaseq ← nf-coreのパイプラインの解説。
- [Nextflowで始めるNGSデータ解析ワークフロー] ← アメリエフの技術ブログ。RNA-seqのヒートマップを描画
Nextflowのセットアップ
- Javaバージョン管理ツール(SDKMAN)のインストール
SDKMANはJavaのバージョンの管理を行うツールである。詳しくは次の記事を参考にすること。
- [SDKMANでJava JDK をバージョン管理する](https://www.ios-net.co.jp/blog/20230726-1268/)
curl -s "https://get.sdkman.io" | bash
- Javaのインストール
sdk install java
- Nextflowのインストール
curl -s https://get.nextflow.io | bash
chmod +x nextflow
sudo mv nextflow /usr/local/bin
nextflow info
手元の環境
WSL2 Ubuntu
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
- Nextflowのhttps://www.nextflow.io/docs/latest/install.html
Nextflowのインストール
- Install Nextflow:
$ curl -s https://get.nextflow.io | bash
# This will create the nextflow executable in the current directory.
- Make Nextflow executable:
$ chmod +x nextflow
# Move Nextflow into an executable path:
$ sudo mv nextflow /usr/local/bin
# Confirm that Nextflow is installed correctly:
$ nextflow info
Nextflow環境のTips
- 6 Tips for Setting Up Your Nextflow Dev Environment ← Dockerコンテナを扱うtipsやlong-runningなパイプラインのモニタリング方法について参考になりそう.
- $ nextflow console で 'Nextflow REPL console'を利用できる。
スクリプトの作成
- スクリプトを作成する。
ここでのスクリプト(tutorial.nf)は2つのプロセスを定義する。
- 最初のプロセスは、文字列を6文字ごとに分割し、それぞれを
chunk_
というプレフィックスの付いたファイルに書き込む。 - 次のプロセスは、これらのファイルを受け取り、その内容を大文字に変換する。
- 結果の文字列は
result
チャンネルに出力され、最終的な出力はview
オペレーターによって表示されます。
params.str = 'Hello world!'
process splitLetters {
output:
path 'chunk_*'
"""
printf '${params.str}' | split -b 6 - chunk_
"""
}
# paramsはNextflowでパイプラインの設定や入力パラメータを定義するための特別なオブジェクトである。params.strのstrがパラメーター名である。
# processはNextflowで実行する個々のタスクを定義するためのキーワードである。
# output: このプロセスの出力を定義する。ここでは、chunk_*という名前のファイルが出力されることを示す。
# """ で囲まれた部分は、実行されるシェルコマンドを定義する。
# split -b 6 "ファイル名" でファイルを6バイトごとに分割する。ただし、ここでは標準入力がパイプで渡されていることに注意すること。
process convertToUpper {
input:
path x
output:
stdout
"""
cat $x | tr '[a-z]' '[A-Z]'
"""
}
# input: セクションでは、入力するデータを定義する。ファイルパス("path")をxという変数名で受け取る。
# プロセスの出力を定義する。ここでは標準出力に結果を出力する。
workflow {
splitLetters | flatten | convertToUpper | view { it.trim() }
}
**workflow**は、複数のプロセスを組み合わせてパイプラインを定義するためのセクションである。
splitLettersプロセスの出力をflattenで平坦化(リストやネストされた構造をフラットに)し、それをconvertToUpperプロセスに渡す。
convertToUpperプロセスの出力をviewで表示する。ここでは、出力結果をtrim()メソッドで前後の空白を取り除いた形で表示する。
flattenの役割
flattenは、Nextflowの特殊な演算子であり、リストやネストされた構造をフラットにするために使われる。この場合、splitLettersプロセスが複数のファイルを出力するため、それらをフラットな構造にして次のプロセスに渡す。
例として、splitLettersの出力が [chunk_aa, chunk_ab] というリストであった場合、flattenを使うことで、これらのファイルがフラットなリストとしてconvertToUpperプロセスに渡される。
viewによる出力の表示
viewは、データを標準出力に表示するためのNextflowの演算子である。convertToUpperプロセスの出力を受け取り、それを表示する。ここでは、it.trim()メソッドを使って前後の空白を取り除いた形で表示する。
スクリプトの実行
- ターミナルで以下のコマンドを入力してスクリプトを実行する:
$ nextflow run tutorial.nf
`Launching tutorial.nf [modest_mestorf] DSL2 - revision: f778e0d112
executor > local (3)
[7a/9ea28c] splitLetters | 1 of 1 ✔
[83/27fddd] convertToUpper (1) | 2 of 2 ✔
WORLD!
HELLO
スクリプトの修正と再実行
Nextflowはパイプラインで実行されたすべてのプロセスを追跡する。スクリプトの一部を変更した場合、実際に変更されたプロセスだけが再実行される。変更されなかったプロセスの実行はスキップされ、キャッシュされた結果が使用される。これにより、パイプラインの一部を再実行することなく、テストや修正を行うことが非常に便利になる。
先のconvertToUpperプロセスを修正し、プロセススクリプトをrev $xという文字列に置き換えて、スクリプトを再実行する。
process convertToUpper {
input:
path x
output:
stdout
"""
rev $x
"""
}
同じ名前でファイルを保存し、コマンドラインに-resumeオプションを追加して実行する:
```bash
$ nextflow run tutorial.nf -resume
N E X T F L O W ~ version 23.10.0
executor > local (2)
[69/c8ea4a] process > splitLetters [100%] 1 of 1, cached: 1 ✔
[d0/e94f07] process > convertToUpper [100%] 2 of 2 ✔
olleH
!dlrow
splitLettersプロセスの実行がスキップされ(プロセスIDは同じ)、その結果がキャッシュから取得されることが分かる。2番目のプロセスは予想通り実行され、文字列が逆に表示される。
パイプラインパラメータ
パイプラインのパラメータは、スクリプト内で変数名の前に params という接頭辞を付けて宣言する(前述の通り)。ただし、これらの値はコマンドラインでパラメータ名(str)の前に二重ダッシュ文字を付けて指定することで、スクリプト内のデフォルト値を上書きすることができる。
例:
$ nextflow run tutorial.nf --str 'Bonjour le monde'
N E X T F L O W ~ version 24.04.2
Launching `tutorial.nf` [jolly_shockley] DSL2 - revision: cbb6c8e124
executor > local (4)
[26/e5e27a] spl…tters | 1 of 1 ✔
[ee/dd4f08] con…r (1) | 3 of 3 ✔
edno
m el r
uojnoB
その他チュートリアル
以下のリンクから別のNextflowのチュートリアルを体験できる。おすすめ
Discussion