2020/6/6 Syntax highlightを追記
お疲れ様です。
ここのところバイオインフォに触れられず何か物足りないkimotonです。
最近はMLOps周りの基盤作りに関わっています。
ナンデダロ。
Snakemakeってなにー??
githubリポジトリは下記。
The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment.
タイトルの通り、再現性高くてスケーラブルかつ可搬性のある解析パイプラインを書くためのツールです。
100% pythonで書かれていますのでコード読むと勉強になったりします。
#Snakemake has just reached 500 citations! 341 of them in the last two years. This makes on average ~3 new citations (i.e. ~3 new #Snakemake driven published data analyses) per week: https://t.co/GkILujkBaY #sciworkflows #reproducibility
— Johannes Köster (@johanneskoester) 2019年12月4日
著者のツイートによると、引用数が500を突破したとのことです。
さらには現在週に約3報引用論文がpublishされているとのこと。
つまり激アツなんですね。
それなのに日本語の記事がほとんどないので、これはもう自分が連載企画としてSnakemakeをじっくり使っていくしかないかなと思った次第であります(研究で使う必要が出てきたのもある)。
ざっくりどんな感じなのか
こんな感じです。
rule targets: input: "plots/myplot.pdf" rule transform: input: "raw/{dataset}.csv" output: "transformed/{dataset}.csv" singularity: "docker://somecontainer:v1.0" shell: "somecommand {input} {output}" rule aggregate_and_plot: input: expand("transformed/{dataset}.csv", dataset=[1, 2]) output: "plots/myplot.pdf" conda: "envs/matplotlib.yaml" script: "scripts/plot.py"
GNU Makeと発想が近いのがお判りでしょうか。
入力ファイルと出力ファイル、実行環境、実行コマンドを書くだけのシンプル設計。
可読性が高くていいですね。
その他の特徴として、
- 内部で実行できるスクリプトの種類としては、Python, R, CWL, shellなどが使えます。
- 実行環境としてconda及びsingularity が使用できます。必要なパッケージをワークフローに定義しておくことで環境を含めた再現性を担保することができます。
- ストレージとして、S3、Google Storage, Dropbox, FTP, SFTP などが使えます。
便利ですね。
インストール
SnakemakeはPyPI及びBiocondaで公開されています。
一方、condaでのインストールが推奨されています。 というのも、上で述べたように再現性を担保するためにSnakemakeからcondaの仮想環境を使用することができるからです。
conda経由でインストール
まずはAnacondaもしくはMinicondaをインストールする必要があります。 インストール方法についてはこの辺を参照してください。
Minicondaのインストールが完了したら、下記コマンドによりBioconda経由でSnakemakeをインストールしましょう。
$ conda install -c bioconda -c conda-forge snakemake
次に独立した環境としてsnakemakeという名前でSnakemakeの入った環境を作成します。 マギラワシイ…
$ conda create -c bioconda -c conda-forge -n snakemake snakemake
作成したsnakemakeという名前の環境をactivateしたらsnakemakeコマンドが使えるようになっているはずです。snakemake --help
コマンドによりヘルプメッセージが出力されるか確認しましょう。
$ conda activate snakemake
$ snakemake --help
無事ヘルプメッセージが出力されたら準備完了です。
pip経由でインストール
こっちはもう超単純です。
おなじみpip
コマンドを使ってインストールしましょう。
$ pip install snakemake
Pipenv使いのあなたはこんな感じ
$ pipenv install snakemake $ pipenv shell
virtualenv使いのあなたはこんな感じになると思います。
$ virtualenv -p python3 .venv $ source .venv/bin/activate $ pip install snakemake
Syntax highlight
vim
ここから入手できます。
snakemake.vim
を$HOME/.vim/syntax
以下に保存し、適用したい拡張子に対するシンタックスの追加(下記参照)を.vimrc
に追加しましょう。
au BufNewFile,BufRead Snakefile set syntax=snakemake au BufNewFile,BufRead *.smk set syntax=snakemake au BufNewFile,BufRead *.rules set syntax=snakemake au BufNewFile,BufRead *.snakefile set syntax=snakemake au BufNewFile,BufRead *.snake set syntax=snakemake
参考:How do I enable syntax highlighting in Vim for Snakefiles?
VSCode
VSCodeのプラグインもあります。
marketplace.visualstudio.com
こんな感じ。
続きはまた明日
はい。
ここまでSnakemakeの概要とインストール方法について見てきました。
まだ実際に触るとこ入れてないので、次回はチュートリアルなぞってみたいと思います。
Python学んでスクラッチでパイプライン組むより、こういうOSS活用してサクッとパイプライン作れるようになるといいですね。