Claude Codeのnextflow-developmentスキルでnf-coreを動かす
bio-researchプラグインのnextflow-developmentスキルで、rnaseq・sarek・atacseqをFASTQやGEO/SRAの公開データに適用する流れと、Nextflowの版で詰まる点をまとめます。
nextflow-developmentは、bio-researchプラグインに入っているスキルです。RNA-seq・WGS/WES・ATAC-seqのFASTQ、またはGEO/SRAの公開データを、nf-coreのrnaseq・sarek・atacseqに渡して解析を回します。想定読者は、バイオインフォマティクスの専門家ではない実験系の研究者です。
このスキルの特徴は、手順の途中に必ず人間への確認が挟まることです。環境チェックとtestプロファイルが通らないと先へ進まず、パイプラインとゲノムの選択は確認を取ってから決まります。本記事では、その流れと各ステップのコマンド、そして実行前に気づいておきたいNextflowの版の落とし穴を順に見ます。
nextflow-developmentスキルは何を自動化するか
スキル本体はSKILL.mdと、scripts/の補助スクリプト、references/の資料で構成されています。説明文には、Triggersとしてnf-core、Nextflow、FASTQ analysis、GSE/GSM/SRR accessions、samplesheet creationなどが並びます。これらに触れる依頼をすると、Claudeがスキルを選びます。
手順は7つで、チェックリストとして定義されています。
スキルが踏む7ステップ
- 1
Step 0: データ取得
GEO/SRAの公開データを使うときだけ。手元のFASTQがあれば飛ばします。
- 2
Step 1: 環境チェック
check_environment.pyが通らなければ進みません。 - 3
Step 2: パイプライン選択
データの種類から候補を示し、ユーザーに確認します。
- 4
Step 3: testプロファイル
小さなデータで環境を検証します。通ることが必須です。
- 5
Step 4: samplesheet作成
FASTQを探してR1/R2を対にし、検証してから書き出します。
- 6
Step 5: 設定と実行
ゲノムを確認し、
nextflow runを実行します。 - 7
Step 6: 出力の確認
MultiQCレポートと完了ログを確かめます。
対応するパイプラインは3つです。
| データ | パイプライン | スキルが固定する版 | 目的 |
|---|---|---|---|
| RNA-seq | パイプラインrnaseq | スキルが固定する版3.22.2 | 目的遺伝子発現 |
| WGS/WES | パイプラインsarek | スキルが固定する版3.7.1 | 目的バリアント検出 |
| ATAC-seq | パイプラインatacseq | スキルが固定する版2.1.2 | 目的クロマチンのアクセシビリティ |
ChIP-seq(chipseq)、バイサルファイトシーケンス(methylseq)、miRNA(smrnaseq)、アンプリコン(ampliseq)は、GEO/SRA取得時にパイプライン候補として提案されます。ただしこれらは手動セットアップ扱いで、設定やsamplesheet生成の対象外です。
bio-researchプラグインを入れる
nextflow-developmentはbio-researchプラグインの5つの解析スキルの1つです。ほかにシングルセルRNAのQC、scvi-tools、実験機器データのAllotrope変換、研究課題の選定フレームワークが入っています。プラグインにはMCPサーバー連携11本も同梱されています。Claude Codeでの導入は、他のknowledge-work-pluginsと同じ2行です。
claude plugin marketplace add anthropics/knowledge-work-plugins
claude plugin install bio-research@knowledge-work-pluginsプラグインのREADMEは、Coworkでも使えると説明しています。同じマーケットプレイスから入れる流れは、small-businessプラグインの記事でも扱っています。LatchBioのように解析をクラウド側で回したい場合は、プラグインではなくコネクタを使う別の道があります。違いはLatchBioコネクタの記事にあります。
走らせる前に: Nextflowの版が3つのパイプラインで違う
スキルの環境チェックは、Dockerの有無、Nextflowが23.04以上か、Javaが11以上か、を確かめます。ここに1つ見落としやすい点があります。パイプライン側が要求するNextflowの版は、固定された版ごとに違います。
| パイプライン | スキルが固定する版 | nextflowVersionの指定 |
|---|---|---|
| atacseq | スキルが固定する版2.1.2 | nextflowVersionの指定!>=23.04.0 |
| rnaseq | スキルが固定する版3.22.2 | nextflowVersionの指定!>=25.04.0 |
| sarek | スキルが固定する版3.7.1 | nextflowVersionの指定!>=25.10.2 |
スキルの環境チェックが基準にする23.04は、このうちatacseqの要件に合う数字です。rnaseqとsarekは、それより新しいNextflowを求めています。!付きの指定は、要件を満たさないときに実行を止める書き方です。23.04から25.04未満のNextflowでチェックを通過しても、rnaseqのtestプロファイルで止まる可能性があります。
Step 1が通った後にここで落ちたら、nextflow self-updateで更新します。スキルは「Version < 23.04」の行でこのコマンドを案内しています。更新後にnextflow -versionで、表の値以上であることを確かめてください。
もう1点、リソース上限の書き方も食い違います。スキルは--max_cpus 8 --max_memory '32.GB' --max_time '24.h'を案内します。atacseq 2.1.2の設定にはこのmax_cpusが残っています。一方、rnaseq 3.22.2とsarek 3.7.1の設定にはmax_cpusの定義がなく、rnaseqのtestプロファイルはprocess.resourceLimitsで上限を指定しています。rnaseqやsarekでメモリを絞りたいときは、カスタム設定ファイルでresourceLimitsを渡す書き方も候補に入れてください。
GEO/SRAの公開データを取ってくる(Step 0)
論文の再解析なら、GSEの番号だけでFASTQの取得まで進められます。スキルのsra_geo_fetch.pyは3つのサブコマンドを持ちます。
python scripts/sra_geo_fetch.py info GSE110004
python scripts/sra_geo_fetch.py download GSE110004 -o ./fastq -i
python scripts/sra_geo_fetch.py samplesheet GSE110004 \
--fastq-dir ./fastq -o samplesheet.csvinfoは研究の概要とサンプル群を表示します。downloadの-iは対話モードで、サンプル群ごとの件数と容量が並びます。FASTQはSRAではなくENAから取るため速く、既存のファイルは飛ばすので、中断しても同じコマンドで再開できます。並列数は-p、絞り込みは--subset "RNA-Seq:PAIRED"のように指定します。
ここでClaudeは、ダウンロード前に必ず確認を取る決まりです。参照資料には、確認の例として「RNA-Seq:PAIRED(42 samples, 約87 GB)」といった選択肢が載っています。容量が大きいので、承認前にディスクの空きをdf -h .で見ておくと安全です。
つまずきやすい点は3つあります。
- GEOのSuperSeriesは自動で処理され、リンクされたBioProjectの全SRAランが対象になります。例に出ているGSE110004は、PRJNA432544にリンクするSuperSeriesです
infoの結果が「Runs: 0」なら、そのデータセットは加工済みデータだけで、SRAに生リードがない可能性があります- ENAからの取得が失敗したら、
prefetchとfasterq-dumpでSRAから直接取る回避手順が用意されています
生物種からゲノムを推す対応表は、ヒトがGRCh38、マウスがGRCm39、酵母がR64-1-1、ショウジョウバエがBDGP6、線虫がWBcel235、ゼブラフィッシュがGRCz11、シロイヌナズナがTAIR10、ラットがRnor_6.0です。表にない生物種は、--fastaと--gtfで自前の参照を渡します。
パイプラインとsamplesheetの決め方(Step 2・4)
データの種類が曖昧なときは、detect_data_type.py /path/to/dataで自動判定できます。判定結果の確認はユーザーに返ります。
samplesheetはパイプラインごとに列が違います。generate_samplesheet.pyがFASTQを探してR1/R2を対にし、検証してから書き出します。既存のシートは--validateで検査できます。
| パイプライン | 必須の列 | 注意点 |
|---|---|---|
| rnaseq | 必須の列sample, fastq_1, fastq_2, strandedness | 注意点単一末端はfastq_2を空にする。strandednessはautoが推奨 |
| sarek | 必須の列patient, sample, lane, fastq_1, fastq_2 | 注意点statusは0が正常、1が腫瘍 |
| atacseq | 必須の列sample, fastq_1, fastq_2, replicate | 注意点ペアエンド必須 |
sarekのtumor/normal判定が自動でできないとき、スクリプトは対話で尋ねます。腫瘍と正常を取り違えると、Mutect2が変異を1つも出さない結果になります。トラブルシューティングも「status列を見る」を最初の確認先にしています。パスは必ず絶対パスで書きます。相対パスは「No such file」の典型的な原因です。
ゲノムとオプションを決めて実行する(Step 5)
実行前に、manage_genomes.py check <genome>でゲノムが手元にあるか調べ、無ければdownloadで取得します。ここでもClaudeはゲノムの確認を取ります。パイプラインごとの選択は次のとおりです。
- rnaseq: アライナーは
star_salmonが推奨で、メモリが足りないときはhisat2 - sarek: 生殖細胞系列は
haplotypecaller、体細胞変異はmutect2 - atacseq:
--read_lengthは50・75・100・150から選ぶ
実行コマンドの型は3つで共通です。
nextflow run nf-core/rnaseq \
-r 3.22.2 \
-profile docker \
--input samplesheet.csv \
--outdir results \
--genome GRCh38 \
-resume-rで版を固定し、-resumeで途中から再開します。HPCでDockerが使えないときは-profile singularityに替え、NXF_SINGULARITY_CACHEDIRを設定します。
エクソーム解析では、sarekに--wes --intervals targets.bedを足します。コホートの共同コールは--joint_germlineです。体細胞変異なら--tools mutect2,strelka,snpeffのようにツールを列挙します。
出力はどこを見るか(Step 6)
完了の判定は、2つのコマンドです。
ls results/multiqc/multiqc_report.html
grep "Pipeline completed successfully" .nextflow.log下流の入力になるファイルは、パイプラインごとに決まっています。
| パイプライン | 主な出力 | 次の用途 |
|---|---|---|
| rnaseq | 主な出力star_salmon/salmon.merged.gene_counts.tsv | 次の用途DESeq2・edgeRの入力 |
| rnaseq | 主な出力star_salmon/salmon.merged.gene_tpm.tsv | 次の用途正規化した発現量 |
| sarek | 主な出力variant_calling/*/のVCF | 次の用途変異の解釈 |
| atacseq | 主な出力macs2/narrowPeak/・bwa/mergedLibrary/bigwig/ | 次の用途ピーク解析・ゲノムブラウザ |
rnaseqの参照資料には、gene_counts.tsvをround()してDESeq2のDESeqDataSetFromMatrixに渡すRのコード例があります。conditionの因子はサンプルの並び順と合わせる必要があるため、samplesheetの順序でcoldataを作るようClaudeに頼むと取り違えを防げます。
失敗したときの切り分け
資料に載っている終了コードの扱いは次のとおりです。
| 終了コード | 原因 | 対処 |
|---|---|---|
| 137・143 | 原因メモリ不足 | 対処上限を上げる。WGSなら64GB以上 |
| 104・134・139・247 | 原因メモリ不足 | 対処上限を上げる |
| 1 | 原因一般エラー | 対処.nextflow.logを読む |
多くのパイプラインは、資源を2倍、3倍に増やして自動で再試行します。それでも落ちたときに上限を見直します。
症状別の確認先は次のとおりです。
- rnaseqでアライメント率が低い: ゲノムと生物種の一致、FastQCのアダプター混入を見る
- ストランド判定が失敗する:
--strandedness reverseのように明示する - atacseqでピークが少ない:
--macs_qvalue 0.1で閾値を緩めるか、--narrow_peak falseにする - コンテナ取得に失敗する: ネットワークを確かめ、
-profile singularityに替える。オフラインならnf-core download -resumeが効かない:work/が残っているか確かめる。作り直す場合はrm -rf work/ .nextflow*でキャッシュが消えます
Claude側に決めておくこと
このスキルは「ユーザーに確認を取る」箇所が多いので、毎回同じ前提を聞かれないよう、プロジェクトのCLAUDE.mdに固定しておくと進みが速くなります。次のような断片が考えられます。
## 解析環境
- 実行基盤: Docker。HPCではSingularity(NXF_SINGULARITY_CACHEDIR設定済み)
- 既定のゲノム: GRCh38(ヒト)。マウスはGRCm39
- Nextflowは25.10.2以上を使う(sarekの要件)
- 大容量のダウンロード前は、容量と空きディスクを提示して承認を取るNextflowの版を書いておくと、Step 1の通過後にrnaseqやsarekで止まる前に、更新を促せます。
このスキルの前提と限界
SKILL.mdの末尾には免責があり、このスキルは「プロトタイプの例」で、教育・研究目的であると明記されています。本番利用には、利用者自身の検証が要ります。Anthropicはバイオインフォマティクス出力の正確性を保証せず、この統合はnf-coreコミュニティの公認でも提携でもないとされています。
そのほか押さえておく点を挙げます。
- 対応は3パイプラインで、版も固定です。新しい版へ上げるときは、各パイプラインのリリースページで破壊的変更を確かめます
- 結果を公開するときは、各リポジトリのCITATIONS.mdに従って引用します
- ライセンスは、nf-coreのパイプラインがMIT、NextflowがApache 2.0、NCBI SRA Toolkitがパブリックドメインです
- ネットワークはNCBIとENAに出る必要があります。Pythonは3.8以上が前提です
解析結果の解釈は研究者の責任です。スキルが保証するのは「手順を飛ばさずに回す」ことまでで、遺伝子発現やバリアントの意味づけは別の仕事になります。表データをその場で調べたいだけなら、DuckDBプラグインの記事の方が手軽です。Claude Code全体の使い方はClaude Codeの全体像にあります。