BLASTの使い方

BLASTは、Basic Local Alignment Search Tool の略で、ホモロジー検索を行うためのツールです。WEBサイト上でBLASTを利用することもできますが、独自のデータベースで検索したい時などはBLASTをダウンロードして使用することになります。この記事ではローカル上でのBLASTの使い方をチュートリアル簡単に紹介します。

BLASTについて

ホモロジー検索はクエリ配列と類似の配列をデータベース内から検索する手法です。ホモロジー検索の手法はBLAST以外にもありますが、BLASTはある程度の精度を保ったまま高速に検索することができるプログラムであるという特徴があるため、よく使われます。

BLASTはクエリ配列とデータベースの配列の種類によって下表のように使い分けられます。

BLASTクエリ配列データベース
blastn塩基配列塩基配列
blastpアミノ酸配列アミノ酸配列
blastx塩基配列アミノ酸配列
tblastnアミノ酸配列塩基配列
tblastx塩基配列塩基配列

BLASTのインストール

BLASTをインストールするにはcondaを使う方法やFTPからダウンロードする方法があります。ここではこちらのページを参考にFTPからダウンロードする方法を解説したいと思います。作業環境はUbuntu 20.04です。

下記コードでFTPからBLASTを含むtar.gzファイルをダウンロードします。この記事の執筆時点ではバージョン2.13.0が最新なので下記では2.13.0という文字列が入っていますが、これはダウンロードするバージョンに変更してください。

wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.13.0+-x64-arm-linux.tar.gz

次の作業は必須ではありませんが、md5sumコマンドによって目的のファイルが正しくダウンロードできているかを確認することができます

wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.13.0+-x64-arm-linux.tar.gz.md5
md5sum -c ncbi-blast-2.13.0+-x64-linux.tar.gz ncbi-blast-2.13.0+-x64-linux.tar.gz.md5

「ncbi-blast-2.13.0+-x64-linux.tar.gz: OK」と出力されれば正しくダウンロードができています。正しくダウンロードができていることが確認できたらファイルを解凍します。

tar zxvpf ncbi-blast-2.13.0+-x64-arm-linux.tar.gz

解凍するとncbi-blast-2.13.0+というディレクトリが作成されます。このディレクトリのbinディレクトリ内にBLAST関連コマンドが入っています。binディレクトリは下記のようになっています。

bin
├── blast_formatter
├── blast_formatter_vdb
├── blast_vdb_cmd
├── blastdb_aliastool
├── blastdbcheck
├── blastdbcmd
├── blastn
├── blastn_vdb
├── blastp
├── blastx
├── cleanup-blastdb-volumes.py
├── convert2blastmask
├── deltablast
├── dustmasker
├── get_species_taxids.sh
├── legacy_blast.pl
├── makeblastdb
├── makembindex
├── makeprofiledb
├── psiblast
├── rpsblast
├── rpstblastn
├── segmasker
├── tblastn
├── tblastn_vdb
├── tblastx
├── update_blastdb.pl
└── windowmasker

適宜これらにパスを通してください。今回は簡単に使ってみるだけなのでパスは通さず進めます。

BLASTの実行

BLASTをインストールできたので、ここからは軽いデータを使ってBLASTを実行してみたいと思います。binディレクトリと同じ階層にデータベースダウンロード用のディレクトリを作成します。今回はblastdbという名前のディレクトリにしました。

cd ncbi-blast-2.13.0+
mkdir blastdb
cd blastdb/

binディレクトリ内にはデータベースをダウンロードするためのスクリプトも含まれいるので、そちらを使用してデータベースをダウンロードします。

perl ../bin/update_blastdb.pl --passive --decompress 16S_ribosomal_RNA

上記スクリプトを実行するとblastdbディレクトリにデータベースがダウンロードされていると思います。ダウンロードされたファイル群は以下の通りです。

blastdb
├── 16S_ribosomal_RNA.ndb
├── 16S_ribosomal_RNA.nhr
├── 16S_ribosomal_RNA.nin
├── 16S_ribosomal_RNA.nnd
├── 16S_ribosomal_RNA.nni
├── 16S_ribosomal_RNA.nog
├── 16S_ribosomal_RNA.nos
├── 16S_ribosomal_RNA.not
├── 16S_ribosomal_RNA.nsq
├── 16S_ribosomal_RNA.ntf
├── 16S_ribosomal_RNA.nto
├── 16S_ribosomal_RNA.tar.gz.md5
├── taxdb.btd
└── taxdb.bti

データベースが準備できたら次に必要なのはクエリ配列です。クエリ配列は準備したデータベースから抽出したいと思います。blastdbcmdコマンドを使うことでデータベースからクエリ配列をFASTAファイルで書き出すことができます。

../bin/blastdbcmd -db 16S_ribosomal_RNA -entry nr_025000 -out 16S_query.fa

コマンドを実行するとblastdbディレクトリに16S_query.faファイルが作成されています。

>NR_025000.1 Mycobacterium kubicae strain CDC 941078 16S ribosomal RNA, partial sequence
GTGCTTAACACATGCAAGTCGAACGGAAAGGCCCCTTCGGGGGTACTCGAGTGGCGAACGGGTGAGTAACACGTGGGTGA
TCTACCCTGCACTTCGGGATAAGCCTGGGAAACTGGGTCTAATACCGGATAGGACCATGAGATGCATGTCTTATGGTGGA
AAGCTTTTGCGGTGTGGGATGGGCCCGCGGCCTATCAGCTTGTTGGTGGGGTGACGGCCTACCAAGGCGACGACGGGTAG
CCGGCCTGAGAGGGTGTCCGGCCACACTGGGACTGAGATACGGCCCAGACTCCTACGGGAGGCAGCAGTGGGGAATATTG
CACAATGGGCGCAAGCCTGATGCAGCGACGCCGCGTGGGGGATGACGGCCTTCGGGTTGTAAACCTCTTTCAGCAGGGAC
GAAGCGCAAGTGACGGTACCTGCAGAAGAAGCACCGGCCAACTACGTGCCAGCAGCCGCGGTAATACGTAGGGTGCGAGC
GTTGTCCGGAATTACTGGGCGTAAAGAGCTCGTAGGTGGTTTGTCGCGTTGTTCGTGAAAACCGGGGGCTTAACCCTCGG
CGTGCGGGCGATACGGGCAGACTGGAGTACTGCAGGGGAGACTGGAATTCCTGGTGTAGCGGTGGAATGCGCAGATATCA
GGAGGAACACCGGTGGCGAAGGCGGGTCTCTGGGCAGTAACTGACGCTGAGGAGCGAAAGCGTGGGGAGCGAACAGGATT
AGATACCCTGGTAGTCCACGCCGTAAACGGTGGGTACTAGGTGTGGGTTTCCTTCCTTGGGATCCGTGCCGTAGCTAACG
CATTAAGTACCCCGCCTGGGGAGTACGGCCGCAAGGCTAAAACTCAAAGGAATTGACGGGGGCCCGCACAAGCGGCGGAG
CATGTGGATTAATTCGATGCAACGCGAAGAACCTTACCTGGGTTTGACATGCACAGGACGCGTCTAGAGATAGGCGTTCC
CTTGTGGCCTGTGTGCAGGTGGTGCATGGCTGTCGTCAGCTCGTGTCGTGAGATGTTGGGTTAAGTCCCGCAACGAGCGC
AACCCTTGTCTCATGTTGCCAGCGGGTAATGCCGGGGACTCGTGAGAGACTGCCGGGGTCAACTCGGAGGAAGGTGGGGA
TGACGTCAAGTCATCATGCCCCTTATGTCCAGGGCTTCACACATGCTACAATGGCCGGTACAAAGGGCTGCGATGCCGCG
AGGTTAAGCGAATCCTTTTAAAGCCGGTCTCAGTTCGGATCGGGGTCTGCAACTCGACCCCGTGAAGTCGGAGTCGCTAG
TAATCGCAGATCAGCAACGCTGCGGTGAATACGTTCCCGGG

ここまできたら、いよいよBLASTの実行です。blastnコマンドでホモロジー検索を行います。

../bin/blastn -db 16S_ribosomal_RNA -query 16S_query.fa -task blastn -dust no -outfmt "7 delim=, qacc sacc evalue bitscore qcovus pident" -max_target_seqs 5

実行すると結果がコンソールに出力されます。指定しているオプションについて簡単に説明します。詳細は、「blastn -help」やこちらでご確認ください。

結果をコンソールではなくファイルとして出力したい場合は-outオプションでファイル名を指定します。下記コマンドを実行するとresult.txtが作成され、結果が記載されています。

../bin/blastn -db 16S_ribosomal_RNA -query 16S_query.fa -task blastn -dust no -outfmt "7 delim=, qacc sacc evalue bitscore qcovus pident" -max_target_seqs 5 -out result.txt
# BLASTN 2.13.0+
# Query: NR_025000.1 Mycobacterium kubicae strain CDC 941078 16S ribosomal RNA, partial sequence
# Database: 16S_ribosomal_RNA
# Fields: query acc., subject acc., evalue, bit score, % query coverage per uniq subject, % identity
# 5 hits found
NR_025000.1,NR_025000,0.0,2383,100,100.000
NR_025000.1,NR_028940,0.0,2334,100,99.243
NR_025000.1,NR_125568,0.0,2320,100,98.940
NR_025000.1,NR_117220,0.0,2302,100,98.637
NR_025000.1,NR_118110,0.0,2302,100,98.637
# BLAST processed 1 queries

BLASTの独自データベースの作り方

BLASTをローカル環境で実行する場合は独自データベースを作って検索したい場合が多いと思います。そこで、独自データベースの作成方法も解説します。これから解説する方法はfastaファイルとしてデータベースを持っていることが前提となっています。
また、手ごろなfastaファイルがないので、ここまでで使用していた16S_ribosomal_RNAデータベースをfastaファイルに変換して使います。BLASTデータベース → fasta → BLASTデータベースという流れになってしまいますが、説明のためご了承ください。

そういう訳ですので、BLASTデータベースをfastaファイルに変換します。ここではクエリ配列を作成した時と同じようにblastdbcmdを使用します。

../bin/blastdbcmd -db 16S_ribosomal_RNA -entry all -out query_all.fa

クエリ配列作成時との違いは-entryがallになっている点です。allを指定することで全ての配列をfastaファイルに出力します。

それでは、ここで作成したquery_all.faを独自データベースだと仮定してBLASTデータベースに変換したいと思います。この変換ではmakeblastdbコマンドを使用します。

../bin/makeblastdb -in query_all.fa -out made_db -dbtype nucl

-outで指定しているのが作成するデータベース名です。-dbtypeは必須項目でnuclもしくはprotを指定します。このコマンドによりmade_dbデータベースが作成されています。

blastdb
├── made_db.ndb
├── made_db.nhr
├── made_db.nin
├── made_db.njs
├── made_db.not
├── made_db.nsq
├── made_db.ntf
├── made_db.nto

このデータベースに対して先ほどと同じようにBLAST検索を行うと先ほどと同じ結果が出てきます。

../bin/blastn -db made_db -query 16S_query.fa -task blastn -dust no -outfmt "7 delim=, qacc sacc evalue bitscore qcovus pident" -max_target_seqs 5

独自データベースは以上のような流れで作成することができます。

以上、BLASTの基本的な使い方の解説でした。