付録A: 環境構築ガイド
本書のコード例を実行するための環境構築手順を説明します。
A.0 コードブロックの扱い
本書のコードブロックは、意図を明確にするため次のラベルを付けます。
- ✅ 実行可能(検証済み): そのまま実行できる例。CIでスモークテスト対象。
- 🧪 概念例(擬似コード): 説明用。実行可能性は保証しない。
A.1 必要な環境
推奨環境仕様:
- OS: Ubuntu 22.04 LTS以降 または macOS 12以降
- Python: 3.10以上(3.11推奨)
- メモリ: 16GB以上(推奨32GB)
- ストレージ: 100GB以上の空き容量
- GPU: CUDA対応GPU(深層学習用、オプション。CUDAバージョンは使用するtorchの公式対応表に従う)
A.2 Dockerを使用した環境構築
本リポジトリには Dockerfile と requirements.lock を同梱しています。CIでも docker build と最小実行を検証しています。
✅ 実行可能(CIで検証)
docker build -t bioinfo-guide .
docker run --rm bioinfo-guide
注記: 上記は
examples/minidata/run_minidata.pyを実行する最小構成です。章内の解析を再現するには、章ごとの追加ツール/パッケージが必要になる場合があります。
A.3 依存関係管理
再現性の方針(推奨):
- Pythonは
requirements.lockのように 固定版(==) を用意し、CI/コンテナ/ローカルで揃える。 - 学習・検証で追加パッケージを導入した場合は、実行に必要な依存関係を固定して記録する(例:
pip freezeの保存)。 - R/Bioconductor を使う場合は、
renv等でrenv.lockを保存し、Bioconductorのバージョンも含めて記録する。
ローカル例: 🧪 概念例(擬似コード)
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.lock
python -m pip freeze > requirements.local.lock
A.3.1 最小再現パッケージ(テンプレート)
章内の手順や自分の解析結果を共有する際は、再現に必要な情報を「最小再現パッケージ」としてまとめておくと、検証・レビュー・再実行のコストを下げられます(特に、入力データ/参照データ/実行環境/期待成果物/QC観点)。
🧪 概念例(擬似コード)
repro/
README.md
inputs/
README.md # 入手方法、機微情報、保持期間
references/
README.md # 参照ゲノム/アノテーション等の版
scripts/
run.sh # 実行手順(ワンコマンドを目指す)
validate.sh # 期待成果物/QCの簡易検証
outputs/
README.md # 期待成果物の定義(ファイル名/形式/例)
env/
Dockerfile
requirements.lock
renv.lock # Rを使う場合
metadata/
versions.txt # ツール/DBのバージョン
checksums.txt # 入力/参照のチェックサム
README のテンプレート例:
🧪 概念例(擬似コード)
# タイトル
## 概要
- 目的:
- 対象データ:
- 想定読者:
## 入力データ
- 入手方法:
- 入手日:
- ライセンス/利用条件:
- 機微情報の有無(個人情報/ゲノム等):
- 保持期間/削除方針:
## 参照データ(例: 参照ゲノム/アノテーション)
- 名称:
- バージョン:
- 入手先:
- チェックサム:
## 実行手順
🧪 概念例(擬似コード)
```bash
./scripts/run.sh
```
## 期待成果物
- outputs/ 配下に生成されるファイル一覧:
- 成功/失敗の判定基準:
## QC観点(最小)
- QCの閾値(例: 読長、マッピング率、重複率など):
- 例外の扱い:
## 再現性
- 乱数 seed:
- 実行環境(OS/CPU/GPU):
A.4 トラブルシューティング
よくある問題と解決法:
- メモリ不足エラー
🧪 概念例(擬似コード)
# メモリ効率的な読み込み
def read_large_fasta(filename, chunk_size=1000):
"""大きなFASTAファイルをチャンク単位で読み込む"""
from Bio import SeqIO
for i, batch in enumerate(batch_iterator(SeqIO.parse(filename, "fasta"), chunk_size)):
yield batch
def batch_iterator(iterator, batch_size):
"""イテレータをバッチに分割"""
batch = []
for entry in iterator:
batch.append(entry)
if len(batch) == batch_size:
yield batch
batch = []
if batch:
yield batch
- GPU認識エラー
🧪 概念例(擬似コード)
# CUDA環境確認
nvidia-smi
python3 -c "import torch; print(torch.cuda.is_available())"