コマンドライン版BLASTのデータベース置き場をどうするか

手元にあるパブリックになっていないFASTAファイルからBLAST検索をかけたいとき、私はローカルに インストールしてあるBLAST+を使用して検索をかけます。

BLASTのデータベースは makeblastdb コマンドで作ることができます。このデータベースは検索毎 に作るのはとても面倒なので、どこかわかる場所にまとめておいておきたいです。すると今度は検索の際に、 データベース置き場をパスを含めて指定しないといけないのが大変です。

例えば /home/username/db 配下においておくと決めたとします。その場合、 blastn コマンドの -db オプションに指定するデータベース名は /home/usename/db/ を毎回つけるか、相対パスで 指定してやらなければなりません。

このあたりについてどうするのがいいのか考え、私個人的になんとなくいいのではという方法までとりあえずたどりついたのでメモします。

BLAST+ の設定

BLAST+にはコマンド毎の設定とは別に全体的な部分に関わる設定項目があります。

その1つが BLASTDB というパラメータです。このパラメータの設定法の1つは環境変数として設定してやることです。例を示します。

export BLASTDB=/opt/blastdb:/home/username/blastdb

こうすることでBLAST+の各コマンドは -db で指定されたデータベースをカレントディレクトリ以外に、 /opt/blastdb/home/username/blastdb から探してくれます。

もう1つの設定方法としてUNIX環境では .ncbirc ファイルを用いる方法です。このファイルの書式例を以下に示します。

BLASTDB=/home/username/blastdb

こうすることで /home/username/blastdb をデータベースのパスとして追加してくれます。 このファイルはユーザーのホームディレクトリ直下に置くのが良いでしょう。

ちょうど .bashrc などのファイルと同じイメージです。

このようにしておけば、たとえ /home/username/blastdb にいない状況でも、カレントディレクトリ にデータベースファイルがあるのと同様に指定することができます。

つまり、-db /home/username/blastdb/mydb とする必要なく、どのディレクトリににいても、-db mydb と指定してあげるだけで勝手に /home/username/blastdb 内の mydb を使用してくれます。

利用可能なデータベースの列挙

上記の要領で、データベースを置く場所を決めておけばデータベースが複数のディレクトリに重複して 散乱しているという状況を回避することがひとまずできました。

ただ今度は、いざというときにどんなデータベースを作っていたっけ?という状況に陥りいちいち データベースディレクトリの内容を確認する手間が増えるかもしれません。

単に lsディレクトリを見に行ってもいいですがディレクトリの場所を忘れてしまった場合などは面倒に 感じるかもしれません。

そこで1つのコマンドラインエイリアスとして登録しておきます(以下を.bashrc などに記載しておく)

alias blastdblist="blastdbcmd -show_blastdb_search_path | sed 's/:/\n/g' | xargs -L1 blastdbcmd -list"

こうすることで blastdblist とコマンドを打つことでどのディレクトリにいても、使えるdbの名前を リストで見ることが可能となります。

最後にBLAST+の詳しい使い方は本家マニュアル(https://www.ncbi.nlm.nih.gov/books/NBK279690/)を参照いただくことをおすすめします。