Claude Media
Claude Codeのnextflow-developmentスキルでnf-coreを動かす

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. 1

    Step 0: データ取得

    GEO/SRAの公開データを使うときだけ。手元のFASTQがあれば飛ばします。

  2. 2

    Step 1: 環境チェック

    check_environment.pyが通らなければ進みません。

  3. 3

    Step 2: パイプライン選択

    データの種類から候補を示し、ユーザーに確認します。

  4. 4

    Step 3: testプロファイル

    小さなデータで環境を検証します。通ることが必須です。

  5. 5

    Step 4: samplesheet作成

    FASTQを探してR1/R2を対にし、検証してから書き出します。

  6. 6

    Step 5: 設定と実行

    ゲノムを確認し、nextflow runを実行します。

  7. 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.2nextflowVersionの指定!>=23.04.0
rnaseqスキルが固定する版3.22.2nextflowVersionの指定!>=25.04.0
sarekスキルが固定する版3.7.1nextflowVersionの指定!>=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.csv

infoは研究の概要とサンプル群を表示します。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の全体像にあります。

この記事を共有:XはてブLinkedIn