バージョン管理システム(VCS)を使用すると、チームが取り組んでいるプロジェクトのソースコードをバックアップおよびアーカイブすることができます。これにより、リポジトリのレビューと編集が容易になり、ビルドを破損するようなエラーが発生した際に以前のバージョンに簡単に復元することができます。
バージョン管理は、ソースコードやアセットに対するアップデートを追跡して管理する体系的なプロセスです。バージョン管理システムは効率的なワークフローの基盤であり、プログラマー、アーティスト、その他チームメンバーにとって信頼できる唯一の情報源として機能する一方で、各自が独立して共有コードベースに貢献できるようにします。また、これらはセーフティネットとしても機能し、開発中に壊滅的なエラーが発生した場合にコードのアップデートを「取り消す」ことができます。
バージョン管理システムで新しいリポジトリを作成すると、メインブランチが開きます。これは、メインブランチまたはトランクマスターと呼ばれます。トランクマスターはメインのコードベースがパイプラインに入る場所で、その後そこでコンパイルされ、エンドユーザーに展開されます。
さて、ブランチとは一体何なのでしょうか?ブランチングとは、マスターブランチからコードをフォークするプロセスのことです。これにより、開発者はメインにコミットすることなく、コードに独自の変更を加えることができます。ブランチを使用することで、開発者は単一のサーバーに関するファイルの完全な履歴を持っておく必要がなくなります。代わりに、コードに対して経時的に加えた変更の全履歴を保持することができます。その後、バージョン管理システムではそのような別個のブランチを取り、それらをマージしてメインブランチに戻すことができます。開発者がタスクブランチをメインにマージする準備ができていない場合は、変更を別のブランチにコミットし、都合の良いときにそれをメインブランチにマージすることができます。
コードの競合やビルドの破損を回避するには、適切なブランチング戦略が不可欠です。幸いなことに、優れたバージョン管理システムのおかげで、コードがメインの統合ブランチにコミットされた後でも、チームはメインブランチと簡単に同期し、潜在的なコードの競合を修正することができます。
分散型バージョン管理システムを使用すると、メインサーバーに接続せずに、チェックイン、ブランチ作成、マージを行うことができます。各貢献者は、クラウドに保存されているリポジトリのクローンから作業します。主な利点は、低速なネットワークや VPN について心配することなく、チームメイトが各自で作業し、作業スピードを高めることができる点です。プロジェクトをオフラインで作業することもできますが、アップデートをプッシュまたはプルするにはインターネット接続が必要です。
分散型バージョン管理システムでは、特に変更履歴が広範囲にわたる大規模なプロジェクトで、プロジェクト履歴全体をダウンロードする必要がある場合に、待ち時間が長くなる可能性があります。大量のバイナリファイルを扱うスタジオは、空き容量がすぐに埋まってしまうため、ストレージの使用状況を注意深く監視する必要があります。
高い柔軟性を求めており、生産力が高くなるポテンシャルを秘めているスタジオは、分散型バージョン管理を採用することを検討してください。
集中型バージョン管理システムは、チェックイン/プッシュワークフローを使用してメインサーバーに接続します。ソースコードに対する変更つまりアップデートは、新しいバージョンとしてリポジトリに自動的に保存されます。集中型バージョン管理システムには、複数のマシンにリポジトリのクローンを作成する必要のない強力なブランチ作成機能とマージ機能が備わっています。そういった意味で、潜在的により安全です。
集中型バージョン管理システムには、ネットワーク接続が必要です。チーム全員が 1 つのサーバーに格納されている単一のバージョンに紐付けられているため、サービスの中断が発生すると大幅な速度の低下につながるおそれがあります。集中型バージョン管理のもう 1 つの欠点は、拡張性が低いことです。プロジェクトに貢献する開発者の数が多ければ多いほど、安定した環境で変更をプッシュする機会が減り、マージの競合などの問題につながるおそれがあります。
設定が簡単で使いやすいバージョン管理システムに関心をお持ちの方は、集中型ワークフローの採用を検討してください。
ローカルバージョン管理システムは、最もシンプルな形式のバージョン管理システムであり、チームよりも主に個人開発者によって使用されます。ローカルバージョン管理では、プロジェクトのすべてのデータが 1 台のコンピューターに保存され、プロジェクトのファイルに加えられた変更はパッチとして保存されます。各パッチには、前のパッチ以降に実装されたアップデートのみが含まれています。プロジェクトのある特定のバージョンで問題が発生した場合は、パッチのコレクション全体を調べ、ある特定の時点でプロジェクトのファイルがどのような見た目であるかつなぎ合わせることで、問題を診断する必要があります。
これらは 1 台のコンピューターに紐付けられているため、ローカルバージョン管理システムは、分散型システムや集中型システムよりも本質的に柔軟性が低くなります。チームメイト同士でのコラボレーションは難しく、データベースが危険にさらされた場合に、失った情報を復元することは不可能ではないにしても難しくなるおそれがあります。
一般的に、最初はローカルバージョン管理で問題ありませんが、チームの規模が拡大するのに合わせて(たとえ 1 人から 2 人に増えるだけでも)、分散型または集中型で作業を進め始めることをお勧めします。
変更を簡単に追跡し、プロジェクト全体にわたってマージ
ファイルを比較し、複数のファイル間の差分を特定できる
VCS 内に記録された変更の全アーカイブにより簡単にトラブルシューティング
一元化されたリポジトリにより、個々のパフォーマンスに影響を与えたり、コードを変更したりすることなくシームレスなコラボレーションが可能に
常にコードの調整のコピーを保存することなく、開発者やステークホルダーとファイルをシームレスに共有することで、スペースや時間を空ける
分散型開発により、開発者は場所を問わず自分の都合に合わせて作業を進めることができる
アジャイルと DevOps の目標は同じであり、定期的なリリーススケジュールを通じて顧客価値を提供することです。しかし、そのアプローチは少し異なります。これらがどのように連携するかをご覧ください。
すべてのゲームスタジオは、クランチ(過重労働)を減らしつつ制作をスピードアップしたいと考えており、DevOps はそれを実現するために最適な方法です。DevOps の方法論の背後にある重要な原則を学ぶことから始めましょう。
DevOps プラクティスを実装すると、開発パイプラインが合理化され、チームとユーザーの満足度を高めることができます。DevOps がどのように役立つかをご確認ください。
集中型と分散型のどちらで作業を進めるべきか?それぞれに長所と短所があります。こちらの無料の e ブックで、どのバージョン管理のアプローチが自分のチームに適しているかご確認ください。
Unity のバージョン管理なら、分散型でも集中型でも作業を進めることができます。ファイルベースや変更セットベースのワークフローにより、サイズの大きなバイナリファイルを管理します。ソースコードとアセットを格納し、あらゆるエンジンに対応する安全なバージョン管理システムを使用して変更を追跡します。