付録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を使用した環境構築

本リポジトリには Dockerfilerequirements.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 トラブルシューティング

よくある問題と解決法:

  1. メモリ不足エラー

🧪 概念例(擬似コード)

# メモリ効率的な読み込み
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
  1. GPU認識エラー

🧪 概念例(擬似コード)

# CUDA環境確認
nvidia-smi
python3 -c "import torch; print(torch.cuda.is_available())"