2022年6月18日土曜日

ローカルな環境でgitを使って解析スクリプトを管理する

データ解析のscript管理

NGS等から来るデータの解析をするとき、よく実行する解析は大体決まっている。これらに使うスクリプトをどのように管理するのか、これまでにもその時々で悩ましい問題だった。githubを使った管理を導入しようと思ってアカウントを作り検討していた時もあったが、その時の環境と管理しなければならないスクリプトの数などを考えて、それほど効率化も出来なさそうだし逆に煩雑になりそうだったのでやめたことがあった。

その後はホームに雛形になるようなスクリプトを大雑把な解析ごとにまとめて置いておき、都度コピーして使うようなやり方をしていたが、最近それでは適切にバージョン管理できない弊害が目立つようになってきた。

現在の使用状況としては、(1) サーバー、複数のローカルなどいくつかの環境で解析を実行している、(2) 異なる事案で同じようなスクリプトを使い回している、(3) 他方、その事案かぎりのスクリプトも管理したい、(3) 複数人で開発するような共同作業はあまり想定されないが、他の人にスクリプトを渡したり見せたりできる方が良い、といった感じだ。今回まず取り組んだのはこのうちの(3)と、一部(2)であり、gitのコマンドを使ってローカルにバージョン管理を始めた。


アプリケーションごとにgitリポジトリでローカル管理

gitはgithubなどのサービスと一緒に使っている印象が強いが、gitのコマンドをCUI環境だけで使うことも当然できる。自分のスクリプト管理をより厳格にすることが当面の目的なので、まずローカルだけでgitを使用することにした。

基本的な使い方としては、アプリケーションごとにリポジトリを作り、解析用スクリプトを書いていく。何度も実行するアプリケーションの場合、リモートリポジトリになるフォルダをローカルなPCの中に作って、そこからgit cloneするようにすることで、バージョン管理されたスクリプトを事案ごとに簡単に準備することができる。


例えば、ChIP-seqで使うスクリプトをまとめたリモートリポジトリを作る。.gitが後ろにつくディレクトリを作成して、git init --bare --sharedを実行。これは、リモートリポジトリになる。

(base) tk$ mkdir chipseq.git

(base) tk$ cd chipseq.git/

(base) tk$ git init --bare --shared


Initialized empty shared Git repository in /Users/tk/ana/chipseq.git/


ローカル側のフォルダ(workdir)で、git initを実行する。その後、リモートリポジトリの登録をする。

(base) tk$ cd workdir

(base) tk$ git init

Initialized empty Git repository in /Users/tk/projects/workdir/.git/

(base) tk$ git remote add origin '/Users/tk/ana/chipseq.git/'


これで、登録したリモートリポジトリに対してpushができる。

(base) tk$ git push origin master


chipseq.gitから、cloneもできる。これで、同じローカルPCの中でだがgit cloneでコピーを作ることができる。

(base) tk$ cd workdir2

(base) tk$ git clone /Users/tk/ana/chipseq.git


このように、ローカルの中だけの管理になるが、ある程度スクリプトのバージョンを管理し、複数案件でも再利用もできると思われる。他のPCやサーバーも含めて管理していきたいときは、Github等のサービスを利用する方が便利だろう。

Rerefence