はじめに
機械学習のコードも「バージョン管理」が必要です。「モデルが急に精度が落ちた、前の版に戻したい」「チームで実験を並行して進めたい」という場面でGitが欠かせません。機械学習プロジェクト特有のGitの使い方をまとめます。
機械学習プロジェクトのディレクトリ構成
ml-project/
├── data/ # データ(.gitignoreに追加必須)
│ ├── raw/ # 生データ
│ └── processed/ # 前処理済みデータ
├── notebooks/ # Jupyter Notebook(探索用)
├── src/ # Pythonスクリプト(本番用)
│ ├── data/ # データ処理
│ ├── models/ # モデル定義
│ └── utils/ # ユーティリティ
├── models/ # 学習済みモデル(DVC管理推奨)
├── tests/ # テストコード
├── requirements.txt # 依存ライブラリ
├── .gitignore # 除外ファイル設定
└── README.md # プロジェクト説明
MLプロジェクトの.gitignore設定
# データファイル(大容量のためGitに含めない)
data/raw/
data/processed/
*.csv
*.parquet
*.h5
# 学習済みモデル(DVCで管理)
models/
*.pkl
*.pt
*.onnx
# Jupyter Notebookの実行結果
.ipynb_checkpoints/
# 環境設定
.env
secrets.yaml
# Pythonキャッシュ
__pycache__/
*.pyc
MLプロジェクトのブランチ戦略
mainブランチは本番デプロイ済みの安定版のみを置きます。developブランチは開発中のコードを統合する場所です。feature/experiment-xgboostのような実験ブランチを試行ごとに切り、実験が成功したらdevelopにマージします。実験ブランチは結果が良ければdevelopにマージ・悪ければそのまま保留という運用が効率的です。
MLflowとGitのコミットIDを紐付ける
import mlflow
import subprocess
def get_git_hash():
"""現在のGitコミットハッシュを取得"""
return subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode().strip()
# 実験の記録
with mlflow.start_run():
mlflow.log_param('git_hash', get_git_hash())
mlflow.log_param('model_type', 'lightgbm')
# ... 学習・評価 ...
mlflow.log_metric('accuracy', 0.95)
GitコミットIDとMLflowの実験IDを紐付けることで「このモデルはどのコードで学習したか」の追跡が可能になります。
よくある質問
「Jupyter NotebookはGitで管理できますか」という質問をよく受けます。管理できますが、Notebookの出力(グラフ・テーブル)がGit差分に含まれて大きくなる問題があります。nbstripoutというツールで出力をクリアしてからコミットする習慣をつけましょう。「モデルファイル(.pkl等)をGitに入れてもいいですか」という質問については、大容量のモデルファイルはGitに入れずDVC(Data Version Control)で管理することをおすすめします。DVCはGitと連携してデータ・モデルをバージョン管理できるツールです。
まとめ
MLプロジェクトのGit管理は適切な.gitignore設定・実験ブランチ戦略・MLflowとのコミットID紐付けという3点が重要です。データ・モデルファイルはGitに入れずDVCで管理することでリポジトリが肥大化を防げます。まず現在のMLプロジェクトに.gitignoreを設定して、実験ブランチを切る習慣をつけることから始めましょう。
MLプロジェクトでのGit活用は「後で困らないための保険」です。.gitignoreの設定・実験ブランチの切り方・MLflowとのコミットID紐付けという3点を今のプロジェクトに追加することで、チームでの共同開発と実験の再現性が大幅に向上します。まず.gitignoreにdata/フォルダを追加することを今日のアクションにしましょう。
📌 プログラミング・AI学習のおすすめスクール
- 資格と仕事に強い個人レッスン → 【Winスクール】プログラミング・AI講座



コメント