一覧へ

Gitで実験コードのバージョン管理をする

分析コードと実験記録をGitで管理する方法。生物学研究者向けのバージョン管理入門。

入門
|
75
|
検証済み (2026-06)
バージョン管理再現性プロトコル実験ノートGitHub
進捗0/7 (0%)

Gitで実験コードのバージョン管理をする

このトピックを終えたら

Gitで分析コードの変更履歴を記録し、過去のバージョンに戻し、GitHubにバックアップできるようになります。


Gitが必要な理由

研究室でこんなファイル名を見たことはありませんか?

text
analysis_final.py
analysis_final_v2.py
analysis_final_v2_先生修正.py
analysis_final_v2_先生修正_本当の最終版.py

Gitは1つのファイルにすべての変更履歴を保存します。ファイルをコピーする必要はありません。

インストールと初期設定

Google ColabにはGitがすでにインストールされています。名前とメールアドレスを設定するだけです。

bash
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# 設定を確認
git config --list --global | grep user

最初のリポジトリを作る

git initは空の実験ノートを新しく開くのと同じです。

bash
# 練習用ディレクトリを作成 + Git初期化
mkdir -p /tmp/bio-analysis && cd /tmp/bio-analysis
git init
# .gitフォルダが作成される(Gitが履歴を保存する場所)
ls -la .git/

最初のコミット:スナップショットを撮る

コミット(commit)は実験ノートに日付を書いて「ここまで完了」と記すことです。

bash
cd /tmp/bio-analysis
# 分析スクリプトを作成
cat > gc_analysis.py << 'SCRIPT'
"""GC Content分析スクリプト v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
# Gitの3ステップ:作業 → ステージング → コミット
git add gc_analysis.py # 1. ステージング(スナップショットに含めるファイルを選択)
git status # 確認:緑色 = ステージング済み
git commit -m "feat: GC content分析スクリプト初期バージョン" # 2. コミット(スナップショット!)
# 履歴を確認
git log --oneline

変更を追跡する:diffで差分を見る

論文の校正で変更箇所を赤ペンでマークするように、git diffは何が変わったかを表示します。

bash
cd /tmp/bio-analysis
# 既存環境がなければ作成
if [ ! -f gc_analysis.py ]; then
git init
cat > gc_analysis.py << 'SCRIPT'
"""GC Content分析スクリプト v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
git add gc_analysis.py
git commit -m "feat: GC content分析スクリプト初期バージョン"
fi
# スクリプトを修正:EGFR遺伝子を追加
cat > gc_analysis.py << 'SCRIPT'
"""GC Content分析スクリプト v2 — EGFR追加"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
"EGFR": "ATGCGACCCTCCGGGACGGC",
}
for name, seq in sequences.items():
gc = calculate_gc(seq)
label = "HIGH" if gc > 60 else "NORMAL"
print(f"{name}: GC={gc:.1f}% [{label}]")
SCRIPT
# 変更内容を確認
git diff gc_analysis.py
# コミット
git add gc_analysis.py
git commit -m "feat: EGFR追加 + GC 60%以上にHIGHラベル"
git log --oneline

元に戻す:過去への旅

実験が失敗した時に以前のプロトコルに戻るように、Gitはどの時点にでも戻ることができます。

bash
cd /tmp/bio-analysis
# 既存環境がなければ作成
if [ ! -d .git ]; then
git init
git config user.name "Test" && git config user.email "test@test.com"
echo "v1" > gc_analysis.py
git add gc_analysis.py && git commit -m "v1"
echo "v2" > gc_analysis.py
git add gc_analysis.py && git commit -m "v2"
fi
# 履歴を見る
git log --oneline
# 特定のファイルだけを以前のコミット状態に戻す
FIRST_COMMIT=$(git log --oneline | tail -1 | cut -d' ' -f1)
echo "最初のコミット: $FIRST_COMMIT"
# 現在の内容を確認
echo "--- 現在 ---"
cat gc_analysis.py
# 最初のコミットの内容を確認(戻す前のプレビュー)
echo "--- 最初のコミット ---"
git show $FIRST_COMMIT:gc_analysis.py

注意: git checkout -- ファイル名は修正内容を元に戻します(コミットしていない変更が消えます)。重要な変更は先にコミットしてください。

.gitignore: 追跡から除外する

実験で中間生成物は保管しないように、Gitでも大きなデータファイルや一時ファイルは除外します。

bash
cd /tmp/bio-analysis
# .gitignoreを作成 — バイオプロジェクト用
cat > .gitignore << 'EOF'
# 大容量データ(Gitに入れない)
*.fastq
*.fastq.gz
*.bam
*.sam
# Pythonキャッシュ
__pycache__/
*.pyc
.ipynb_checkpoints/
# 環境設定(個人情報を含む可能性あり)
.env
*.log
# OSファイル
.DS_Store
Thumbs.db
EOF
# テスト:大きなファイルを作ってもGitが無視するか確認
echo "fake fastq data" > sample.fastq
git status # sample.fastqがUntrackedに出なければ成功

やってみよう(Faded Example)

空欄を埋めて、Gitの基本ワークフローを完成させてください。

穴埋め問題bash
# 1. 新しいリポジトリを作る
git
# 2. ファイルをステージングエリアに追加
git analysis.py
# 3. スナップショットを保存
git -m "first analysis script"

よくあるエラーと解決法

Q: fatal: not a git repository

現在のディレクトリがGitリポジトリではありません。git initで初期化するか、cdでGitリポジトリのフォルダに移動してください。

Q: nothing to commit, working tree clean

変更がありません。ファイルを修正した後にgit addしてください。すでにgit addした後なら、すでにコミット済みです。

Q: 誤って大きなFASTQファイルをコミットしました

.gitignore*.fastqを追加した後、git rm --cached sample.fastqで追跡を解除してください(ファイル自体は削除されません)。

Q: コミットメッセージを間違えました

git commit --amend -m "新しいメッセージ"で最後のコミットメッセージを修正できます(まだpushしていない場合のみ)。


次の記事では、Pythonで実験データを可視化する方法を学びます。

💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...