バージョン管理とGit
バージョン管理の必要性
変更履歴の可視化と追跡: コード開発では一気に完成版まで持っていけることはまれで、実際には多くの試行錯誤が必要になります。場合によっては、ある時点までは発生しなかったバグがいつの間にか発生するようになった、といったこともあります。コードをバージョンごとに分けて管理していれば、どの時点でバグが混入したのか発見することが容易になります。
同時並行での開発(共同開発): 複数人で同じコードを開発すると、誰がどのバージョンをどのように変更しているか混乱がしやすくなります。Gitのようなバージョン管理システムには共同開発用の機能が盛り込まれています。
複数バージョンの管理: 研究の遂行にあたって、研究対象や研究フェーズによってコードのバージョンを変更したい場合があります。バージョン管理システムを利用していればそのような要求にも容易に対応できます。
科学研究の再現性確保: 研究の再現性とは、同じ方法と条件で実施した際に同じ結果が得られることを意味します。研究の再現性確保のためにまず挙げられるのが研究ノートの作成ですが、バージョン管理システムを用いると特にコード開発における研究ノートの役割を一部代替することができます。
原始的なバージョン管理
原始的なバージョン管理方法の例は、ディレクトリに日付や番号をつけて管理する方法です。
# project/ というディレクトリにバージョン管理したいコードを保存
$ ls project/
README.md libs.py main.py
# project/ を project_2025-04-01/ という別名で保存
$ cp -r project project_2025-04-01
# バージョン間の比較
$ diff -r project_2025-04-01 project_2025-03-01
しかし、このような原始的な方法は一日に複数回バージョンを保存できない、古いディレクトリの保存・管理が大変、ディレクトリの命名規則を変更したい際に手間、コードを変更した際に関連する作業への反映が煩雑になる、といった多くの問題点が存在します。 Gitのようなバージョン管理システムを使うと、その多くの問題を回避することができます。