QIIME 2解析

実行環境Linux ターミナルとQIIME 2 2026.1
前提QIIME 2のインストール、wgetが使えるLinuxターミナル

学習目標

  • Cloudflare R2から演習用FASTQファイルをダウンロードできる
  • FASTQファイルからmanifestを作成してQIIME 2へ取り込める
  • プライマーをトリミングし、品質を確認できる
  • 品質に合わせてDADA2のtruncation長を設定できる
  • 分類器を使ってtaxonomyとバープロットを作成できる

Cloudflare R2からダウンロードしたペアエンドのFASTQデータを解析します。QIIME 2環境を有効化し、データの取り込み、品質確認、ノイズ除去、分類の順に進めます。

解析前に確認

この章のコマンドは、raw-data/がある作業フォルダで実行します。環境名、プライマー配列、分類器の版は教材の指定を使います。

入力データと完成イメージ

作業フォルダへ移動してから、次のコマンドをまとめてコピー&ペーストします。raw-data/を作成し、8個のFASTQファイルをCloudflare R2からその中へダウンロードします。

実行演習用FASTQデータをダウンロード@ターミナル
mkdir raw-data

wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/1_S1_R1_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/1_S1_R2_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/2_S2_R1_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/2_S2_R2_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/3_S3_R1_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/3_S3_R2_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/11_S5_R1_001.fastq.gz
wget -P raw-data https://pub-3323395ea28d4d81afab5d75dd0b6484.r2.dev/nextseq/raw-data/11_S5_R2_001.fastq.gz

ペアエンドデータでは、同じサンプルのForward(R1)とReverse(R2)が1組になっています。ダウンロード後の構成は次のとおりです。

raw-data/
├── 1_S1_R1_001.fastq.gz
├── 1_S1_R2_001.fastq.gz
├── 2_S2_R1_001.fastq.gz
├── 2_S2_R2_001.fastq.gz
├── 3_S3_R1_001.fastq.gz
├── 3_S3_R2_001.fastq.gz
├── 11_S5_R1_001.fastq.gz
└── 11_S5_R2_001.fastq.gz

解析が完了すると、作業フォルダには次のような成果物ができます。実際のファイル数や名前は入力データと実行結果によって変わります。

raw-data/
├── <SAMPLE>_R1_001.fastq.gz
└── <SAMPLE>_R2_001.fastq.gz
manifest.tsv
01_data-import/
└── import.qza
02_adapter/
├── trimmed-seqs.qza
├── trimmed-seqs.qzv
├── stats.qza
└── outputs/
    ├── forward-seven-number-summaries.tsv
    └── reverse-seven-number-summaries.tsv
03_denoise/
├── table-dada2.qza
├── rep-seqs-dada2.qza
├── stats-dada2.qza
├── stats-dada2.qzv
├── visual-summary.qzv
└── rep-seqs-dada2.qzv
04_taxonomy/
├── taxa-bar-plots.qzv
├── taxonomy.qza
└── taxonomy.qzv

1. QIIME 2環境を有効化する

QIIME 2のコマンドを使う前に、専用のconda環境を有効化します。

実行QIIME 2環境を有効化@ターミナル
conda activate qiime2-2026.1

プロンプトの先頭に(qiime2-2026.1)と表示されれば準備完了です。

2. manifestを作成する

manifestは、各サンプルのIDとFASTQファイルの場所をQIIME 2へ伝える表です。raw-data/に入っているファイル名を確認してから実行します。

実行FASTQファイルからmanifest.tsvを作成@ターミナル
seqfu metadata -f manifest -s _S raw-data > manifest.tsv

このコマンドはseqfuのmetadata機能を使い、raw-data/内のペアエンドFASTQからmanifest.tsvを作ります。seqfu: command not foundが出る場合は、前章のseqfuインストールを確認します。

manifestの確認

lsmanifest.tsvが作成され、サンプルごとにR1とR2の行があることを確認します。ファイル名の入力ミスがあると、後のimportでエラーになります。

3. FASTQをQIIME 2形式へ取り込む

qiime tools importで、manifestに書かれたペアエンドFASTQをimport.qzaへ変換します。qzaはQIIME 2の解析用アーティファクトです。

実行ペアエンドFASTQをimport.qzaへ変換@ターミナル
# ディレクトリの作成
mkdir 01_data-import

# manifest.tsvに従って、データを
# 01_data-import/demux-paired-end.qza として保存。
qiime tools import \
    --type "SampleData[PairedEndSequencesWithQuality]" \
    --input-path manifest.tsv \
    --input-format PairedEndFastqManifestPhred33V2 \
    --output-path ./01_data-import/import.qza

このブロックでは01_data-import/を作り、manifest.tsvを読み込んで01_data-import/import.qzaを出力します。エラーが出た場合は、現在地、manifestの内容、FASTQファイル名、Phred品質スコアの形式を確認します。

importの完了条件

01_data-import/import.qzaが作成されれば、QIIME 2形式への取り込みは完了です。

4. プライマーとアダプターをトリミングする

プライマー配列を設定する

次のブロックでは、V3–V4領域を例にForward・Reverseプライマーと、それぞれの逆相補配列を変数へ設定します。その後、qiime cutadapt trim-pairedで配列をトリミングします。

実行プライマーとアダプターをトリミング@ターミナル
# ディレクトリの作成
mkdir 02_adapter

# Primer配列の定義
FWD='CCTACGGGNGGCWGCAG' ## V3V4用
REV='GACTACHVGGGTATCTAATCC' ## V3V4用

FWDRC=$(echo "${FWD}" | tr ACGTMRYKVHDBacgtmrykvhdb TGCAKYRMBDHVtgcakyrmbdhv | rev)
REVRC=$(echo "${REV}" | tr ACGTMRYKVHDBacgtmrykvhdb TGCAKYRMBDHVtgcakyrmbdhv | rev)

# アダプタートリミング
## 次のオプションに注意。
## --p-discard-untrimmed: トリムされなかったリードは使わない。
## --p-cores: 並列処理につかうスレッドの数
qiime cutadapt trim-paired \
    --i-demultiplexed-sequences ./01_data-import/import.qza \
    --p-front-f ${FWD} --p-front-r ${REV} \
    --p-adapter-f ${REVRC} --p-adapter-r ${FWDRC} \
    --p-times 10 \
    --p-match-read-wildcards --p-match-adapter-wildcards \
    --p-minimum-length 200 \
    --p-discard-untrimmed \
    --o-trimmed-sequences ./02_adapter/trimmed-seqs.qza \
    --o-stats ./02_adapter/stats.qza \
    --p-cores 3

# visualizationファイルへ出力。
qiime demux summarize --i-data ./02_adapter/trimmed-seqs.qza --o-visualization ./02_adapter/trimmed-seqs.qzv

--p-discard-untrimmedは、指定した配列を見つけられなかったリードを捨てる指定です。--p-minimum-length 200はトリミング後の最小長、--p-cores 3は使用するスレッド数です。

このブロックは02_adapter/trimmed-seqs.qza02_adapter/stats.qzaを作り、続けてトリミング後の品質確認用にtrimmed-seqs.qzvを作ります。

5. 品質を確認する

QIIME 2の.qzvは、結果をブラウザーで確認するためのvisualizationファイルです。品質プロットを見て、DADA2でForwardとReverseをどこまで切るかを決めます。

.qzvをブラウザーで開く

今回の実習では、QIIME 2 View.qzvをアップロードして確認します。機密性のあるデータをアップロードしてよいか、実習のルールに従ってください。

手元のPCでQIIME 2を実行している場合は、qiime tools viewでも開けます。

値の書き換えが必要qzvをローカルで表示@ターミナル
コピー後に書き換える箇所
  • <file>を開きたいqzvファイルの名前に置き換える
qiime tools view <file>.qzv

品質の表をエクスポートする

品質の.qzvをTSVへ展開し、csvlensで確認できます。csvlensの画面はqで終了します。

実行品質表をエクスポートして確認@ターミナル
qiime tools export --input-path ./02_adapter/trimmed-seqs.qzv --output-path ./02_adapter/outputs

# csvlensをインストール
conda install csvlens -c conda-forge

# Forward配列の結果を可視化。qで終了。
csvlens -d auto ./02_adapter/outputs/forward-seven-number-summaries.tsv
# Reverse配列の結果を可視化。qで終了。
csvlens -d auto ./02_adapter/outputs/reverse-seven-number-summaries.tsv

truncation長を決める

Forward・Reverseそれぞれの品質が大きく下がる位置を確認し、読み取りの重なりが残るように--p-trunc-len-f--p-trunc-len-rの値を決めます。サンプルやシーケンサーによって適切な値は変わります。

6. DADA2でノイズを除去する

DADA2では、低品質な読み取りの除去、エラー補正、キメラ配列の除去、ForwardとReverseの結合を行います。

DADA2を実行する

次のブロックにあるfffrrrを、品質確認で決めた数値へ書き換えてから実行します。たとえばForwardを250、Reverseを220にする場合は、fff250rrr220へ置き換えます。

値の書き換えが必要DADA2でペアエンドをデノイズ@ターミナル
コピー後に書き換える箇所
  • fffをForward側のtruncation長へ置き換える
  • rrrをReverse側のtruncation長へ置き換える
# ディレクトリの作成
mkdir 03_denoise

# DADA2
## fffとrrrは適宜変更
qiime dada2 denoise-paired \
    --i-demultiplexed-seqs ./02_adapter/trimmed-seqs.qza \
    --p-trunc-len-f fff \
    --p-trunc-len-r rrr \
    --o-table ./03_denoise/table-dada2.qza \
    --o-representative-sequences ./03_denoise/rep-seqs-dada2.qza \
    --o-denoising-stats ./03_denoise/stats-dada2.qza \
    --o-base-transition-stats ./03_denoise/base-transition-stats.qza \
    --p-n-threads 3

--o-base-transition-statsの行末には\があり、次の--p-n-threads 3までが1つのコマンドとして実行されます。DADA2の実行には時間がかかる場合があります。

DADA2の統計を可視化する

各サンプルについて、入力リード数、フィルタリング後のリード数、結合後のリード数などを確認します。

実行DADA2の統計をqzvへ変換@ターミナル
# 各qzaファイルをqzvファイルへ
## 何%削除されたなどの、DADA2のステータス
qiime metadata tabulate --m-input-file ./03_denoise/stats-dada2.qza --o-visualization ./03_denoise/stats-dada2.qzv

feature tableの概要を作る

サンプルごとのfeature数や頻度を確認するため、feature tableを要約します。

実行feature tableを要約@ターミナル
# 各サンプルのリード数など
qiime feature-table summarize \
    --i-table ./03_denoise/table-dada2.qza \
    --o-feature-frequencies ./03_denoise/feature-frequencies.qza \
	--o-sample-frequencies ./03_denoise/sample-frequencies.qza \
	--o-summary ./03_denoise/visual-summary.qzv

代表配列を一覧表示する

ForwardとReverseを結合して得られた代表配列を可視化します。

実行代表配列をqzvへ変換@ターミナル
# Forward+Reverse マージ後に決定した代表配列の一覧
qiime feature-table tabulate-seqs --i-data ./03_denoise/rep-seqs-dada2.qza --o-visualization ./03_denoise/rep-seqs-dada2.qzv

DADA2の完了条件

03_denoise/にtable、代表配列、統計のqzaが作成され、stats-dada2.qzvvisual-summary.qzvrep-seqs-dada2.qzvをQIIME 2 Viewで開ければ完了です。

7. taxonomyを推定する

分類器をダウンロードする

QIIME 2のData Resourcesから、使用するQIIME 2版とデータに合った分類器を選びます。分類器のURLと版は更新されるため、ライブラリページに表示されたURLをコピーしてください。

QIIME 2 Data Resourcesで分類器を選ぶ画面
Data Resourcesから分類器を選択する
QIIME 2 Data Resourcesで分類器を選ぶ画面

Data Resourcesから分類器を選択する

値の書き換えが必要分類器をダウンロード@ターミナル
コピー後に書き換える箇所
  • ライブラリページからコピーした分類器のURLへ置き換える
  • 使用する分類器の版を確認する
# コピーしたURLからダウンロード

# ※以下のURLは例です。必ずライブラリページから最新のURLをコピーしてください。
wget https://data.qiime2.org/classifiers/sklearn-1.4.2/silva/silva-138-99-nb-classifier.qza

この例のURLは固定の正本ではありません。実習時は必ずData Resourcesのページで、QIIME 2 2026.1と入力データに対応する分類器を選びます。

配列を分類して可視化する

次のブロックは、DADA2で作成した代表配列を分類し、taxonomy表とサンプル別のバープロットを作ります。分類器の.qzaを作業フォルダに置いた状態で実行します。

実行taxonomyを推定して可視化@ターミナル
# ディレクトリの作成
mkdir 04_taxonomy

# 分類器を使って分類
qiime feature-classifier classify-sklearn \
    --i-reads ./03_denoise/rep-seqs-dada2.qza \
    --i-classifier ./silva-138-99-nb-classifier.qza \
    --o-classification ./04_taxonomy/taxonomy.qza \
    --p-n-jobs 3

# 分類結果を表形式で可視化
qiime metadata tabulate \
    --m-input-file ./04_taxonomy/taxonomy.qza \
    --o-visualization ./04_taxonomy/taxonomy.qzv

# 分類結果をバープロットで可視化
qiime taxa barplot \
    --i-table ./03_denoise/table-dada2.qza \
    --i-taxonomy ./04_taxonomy/taxonomy.qza \
    --o-visualization ./04_taxonomy/taxa-bar-plots.qzv

出力される04_taxonomy/taxonomy.qzvでは、各featureに割り当てられた分類を表形式で確認できます。taxa-bar-plots.qzvでは、サンプルごとの分類群の構成を確認できます。

分類ステップで作成される主なファイル
04_taxonomy/taxonomy.qza
04_taxonomy/taxonomy.qzv
04_taxonomy/taxa-bar-plots.qzv
分類結果の読み方

分類結果は、使用した分類器、参照データベース、プライマー、品質設定に依存します。バープロットの見た目だけで結論を出さず、解析条件とtaxonomyの信頼度を合わせて確認してください。

解析結果を確認する順番

結果を確認するときは、次の順番でファイルを開きます。

  1. 02_adapter/trimmed-seqs.qzvでトリミング後の品質を見る
  2. 03_denoise/stats-dada2.qzvでリードの残り方を見る
  3. 03_denoise/visual-summary.qzvでサンプルごとのfeature数を見る
  4. 03_denoise/rep-seqs-dada2.qzvで代表配列を見る
  5. 04_taxonomy/taxonomy.qzvtaxa-bar-plots.qzvで分類結果を見る

QIIME 2の各ファイルは、解析条件と一緒に保存します。truncation長、プライマー、分類器の版、実行日時を記録すると、結果を再確認しやすくなります。