Unity を検索

バージョン管理システムを選ぶときに考慮すべき 8 つのポイント

2021年9月23日 カテゴリ: ゲーム | 10 分 で読めます
Laptop with race car
Laptop with race car
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

はじめてのバージョン管理システムの導入、または新しいバージョン管理システムへの移行には困難を伴うこともありますが、長期的な影響を考えればその困難に見合った価値はあります。今回は、バージョン管理システムを選ぶ際に考慮すべきポイントを取り上げました。バージョン管理システムの導入や移行を進める前に、目を通されることをおすすめします。

ゲーム制作はやりがいのある仕事ですが、混沌とした仕事になることもしばしばです。開発している間、役割も専門性のレベルもバラバラの多数のメンバーが同じプロジェクトに参加し、1 つの生産工程に合わせようとします。一度に複数の人と協調して動くのは難しいものです。そしてチームの人数が増えるにつれ、その難しさは指数関数的に上昇していきます。

ひとたび問題が発生すると、問題の特定と解決に時間を取られることになり、あらゆる物事の進みや、チームにあるすべての人の動きが遅くなってしまいます。そこで重要になるのが、目的に応じて適切なバージョン管理システム(VCS)を選択することです。

バージョン管理の仕組み

バージョン管理を行うことで、プロジェクト全体を俯瞰することができます。仕事に基本的な整理整頓をもたらすことで、チームが迅速かつ効率的に反復作業を行うことができます。しかし、どうすればよいのでしょうか。

プロジェクトファイルは、レポジトリと呼ばれる共有データベースに格納されます。このようにファイルを管理することで、プロジェクトを定期的にバックアップし、計画通りに進まない場合は前のバージョンに手間なくロールバックすることができるようになります。

VCS では、複数の個別の変更を行い、それらをひとまとまりのソースとして「コミット」することができます。一連の変更をまとめているので、前のバージョンに戻す時は、同じまとまりの中にあるすべての変更が取り消されます。実際、「コミット」にまとめられた各変更点を確認・修正したり、「コミット」全体を取り消すこともできます。すべての履歴を見ることができるので、バグの追跡や除去、削除された機能の復元などが容易になります。

さらに、バージョン管理は一般的にクラウドや分散型サーバーに保存されるため、開発チームの時差や地域を越えたコラボレーションをサポートします。リモートワークが一般的になってきている中で、この特徴の持つ意味はますます重要になってきています。

新しいバージョン管理システムに移行する理由

バージョン管理システムを別のものに変更することは困難です。それがプロジェクトの途中でチームが依存している技術を変更することを意味する場合は特に困難になります。しかし、事前に十分に情報を得たうえで下した決断には、必ず相応の見返りがあります。

新しいバージョン管理システムを導入したり、切り替えたりすることの狙いとしては、以下のようなものがよく挙がります。

  • 多様なチーム間のコラボレーションを改善したい
  • 大容量のバイナリファイルやアセットの管理をスピーディにサポートしたい
  • ファイルベースのワークフローを導入して、プロジェクト全体のビルドをダウンロードすることなく、固有のファイルに変更を加えられるようにしたい
  • チームメイトが(一部の人だけでなく)並行して作業できるように、柔軟で堅牢なブランチングのソリューションを用意したい
  • 現在使っている開発ツールとの連携を強化したい
  • プロジェクトを守るためにセキュリティを強化したい

決断を下す際に考慮するべきこと

ここでは、新しいバージョン管理システムを選ぶ際に考慮すべき 8 つのポイントを紹介します。

1. チーム

新しい VCS の導入や切り替えは、まず第一にチームワークの強化を促します。オンサイトでもリモートでも、バージョン管理を行うことで、皆さんや皆さんの同僚が、独立して仕事をしながらも、互いに協調することができるようになります。チームの具体的なニーズを満たすために、自問してみましょう。何人の人がこの新しいシステムを使うのでしょうか。チームメンバーの技術的な専門性のレベルはいかほどでしょうか。チームメンバーは現在のシステムをどう思っているのでしょうか。そして新しいものに何を求めているのでしょうか。

生産性を向上させるためには、技術者による介入を必要とせず、誰もが変更を加えられるようにする必要があります。技術者ではないアーティストを含むすべてのチームメイトにとって使いやすいシステムを選択することで、新しい VCS への切り替えにかかる精神的なコストを抑えることができます。抵抗感が少ない分、導入もスムーズに進み、結果も早く出ます。

2. ファイルの種類とサイズ

ゲーム業界の拡大に伴い、顧客の期待も高まっています。ゲーマーは、より優れたグラフィック、バグのない状態でのリリース、発売後のアップデート提供、そして充実したサポートを常に期待しています。現在、開発者への負担は非常に大きいものとなっています。そして今後これはさらに大きなものとなるでしょう。

ゲームデザインが複雑化するということは、より複雑なプロジェクトに取り組み、管理することを意味します。ファイルの種類は多岐にわたり、ファイルのサイズも大きく、レポジトリも膨大になる可能性があります。スムーズなワークフローと迅速なマージを確立するためには、大規模なプロジェクトに対応できる VCS を導入する必要があります。バージョン管理システムの選択は、長くプレイするゲームのようなものだと考えましょう。現時点でまだ大容量のファイルを扱っていなくても、いずれはニーズが変わってくるはずです。持続的な成功を収めるには、先を見越して行動することが大切です。

3. セットアップとメンテナンスの容易さ

この要素は、最初の項目である「チーム」につながります。皆さんのチームには、新しいバージョン管理システムを導入し、維持するための時間、専門知識、その他も含めた全般的なことに対応する余裕があるでしょうか。どれだけ早く導入できるでしょうか。システム稼働後の継続的なサポートはあるでしょうか。

セットアップが簡単なほど、セットアップが速くなることを忘れないようにしましょう。また、適切な時期に立ち上げを行うことで、チームが適応して効率的に作業をし始めるようになるまでに、より時間的な余裕を持たせることができます。そのため、セットアップやメンテナンスなどの技術的な面が気になる場合は、検討しているパッケージについて、顧客への支援を提供するプランの価格を評価してください。皆さんの目的に合った最適な VCS を判断する上で、まずは検討しているパッケージのレビューを見るのもよいでしょう。

4. チームのワークフロー

チームが日常的に使用しているプロセスやツールを考慮することは非常に重要です。他の必要なツールとスムーズに統合されたバージョン管理システムを選択することで、より素早い導入を実現し、導入後の混乱を最小限に抑えることができます。

ワークフローに関連して、考慮するべきもう 1 つの要因は、バージョン管理システムがブランチング機能をサポートしているかどうかです。ブランチングとは、プロジェクトの特定のファイルを作業している人が、そのファイルをプロジェクトのメインブランチ(「trunk」とも呼ばれる)から分離することを指します。これにより、trunk に影響を与えずに変更をテストすることができます。 変更点が評価され、安定していることが検証されると、trunk にマージされます。

ゲーム開発では、大量のブランチを迅速に作成する必要があるでしょう。ディレクトリベースのシステムでは、不適切なブランチが作られたり、トランクへのマージがうまくいかずにマージコンフリクトが頻発したりして、チームメンバーは変更を trunk にマージする時に不便を強いられることになります。 

ブランチング機能を使えば、プロジェクトの安定性に優先順位を置き、他のメンバーの作業に影響を与えることなく、チームが共通の目標に向かって作業を続けることができます。

Plastic window

5. チームのシステム導入のタイミング

バージョン管理システムを導入するには、厳格な適応プロセスが必要です。どのようにやっても、バージョン管理システムを変えれば既存のワークフローやツールに大きな変更が加わります。 

VCS を導入するタイミングを戦略的に図ることで、変更による現在のプロジェクトへの影響を軽減し、新しいシステムの導入を迅速に行うことができます。新しいプロジェクトの開始時や、製品をローンチした後の振り返りの段階で、選んでおいた VCS を導入するのが理想的です。

もちろん、計画通りに進まないこともあります。プロジェクトの途中で、新しいバージョン管理システムに移行しなければならない状況に陥ることがあります。これは理想的ではありませんが、不可能ではありません。

Unity Collaborate プロジェクトの Plastic SCM への移行の詳細については以下をご覧ください。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

6. どこに費用をかけるか(そしてどこで費用を節約するか)

バージョン管理システムは、DevOps ツールの中では比較的安価な部類に入りますが、真のコストはその導入時にかかります。このことを念頭に、システムを評価する際には、そのシステムがどのようなメリットをもたらすのか、また、他に節約できる方法は無いかを考えてみてください。

技術的なバックグラウンドを問わず、チームの全員が簡単に利用できるものを選ぶのも良いでしょう。先に述べたように、誰もが自律的に貢献する機会を与えられるべきです。チームメイトのニーズが満たされないと、隠れていたコストが表面化し始めます。

例えば、使っているバージョン管理システムが理解するのに困難を伴うものである場合、他の人に使い方を教えるのにより多くの時間を割く必要があります。また、バージョン管理のベストプラクティスに関する密度の高い社内文書を作成する必要もあるでしょう。また、チームメイトが独立して仕事ができないと、チーム内のフラストレーションが溜まります。どのシステムを選ぶにしても、それがチーム全体の成功の妨げになってはいけません。

7. セキュリティ要件

バージョン管理は、ゲームのソースコードを管理するだけのことではありません。選択したシステムには、ビジネスや手続きに関する文書、設計ファイル、ツールの設定などの資産も保存されます。

これらのファイルを安全に保つために、VCS には複数のレベルからなる保護とパーミッションが備わっている必要があります。これにより、コードや IP 資産を外部からの侵入から守り、また内部からの漏洩の可能性からも守ることができます。

8. 柔軟性のレベル

皆さんは自分のチームを大きいと思いますか、小さいと思いますか。皆さんのチームは 1 つのオフィスに集まって仕事をしているのか、それとも分散して仕事をしていますか。こうした要素の差に応じて、柔軟性のレベルを切り替えられることがバージョン管理システムには求められます。さらに、中央集権型、分散型、マルチサイトのいずれのワークフローで運用するかを決めなければなりません。それぞれの利点を見てみましょう。

中央集権型ワークフロー

中央集権型ワークフローでは、チェックインとプッシュによるワークフローを使ってメインサーバーに接続します。変更が加えられると、自動的に新しいバージョンとしてレポジトリに保存されます。この方法では、レポジトリを複数のマシンにクローンすることなく、強力なブランチング機能やマージ機能を使うことができます。シンプルで安全なソリューションです。

分散型ワークフロー

分散型ワークフローでは、メインサーバーに接続せず、自分の好きな時間にチェックイン、ブランチ、マージを行うことができます。このワークフローの利点は、遠隔地にいるチームメイトが、ネットワークの遅延や VPN について気に掛けることなく、互いに離れた場所にいてもスピード感を持って仕事ができることです。

マルチサイトワークフロー

マルチサイトワークフローは、中央集権型ワークフローと分散型ワークフローを組み合わせたようなものです。各拠点では、チームメイトが中央集権型ワークフローのミニ版のようなやり方で作業を行い、ブランチや進捗状況を共有します。簡単にマージしたり、チーム内でプッシュやプルを行ったりしつつ、最終的にメインサーバーにプッシュするまで、それぞれのタイミングで作業を進めていきます。

マルチサイトワークフローは、都市や大陸をまたいで共有されたコードベースで作業するチームに最適です。このような場合には、各職場にホストサーバーを設置し、それらのサーバー間で変更をコピーする必要があります。そうしないと、サーバーのない場所で作業しているチームは、他のチームよりもレスポンスが遅くなってしまいます。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

主要なバージョン管理システム

バージョン管理システムを選択する際に何が問題になるかを理解した上で、そこにある最も人気のあるオプションのいくつかを評価してみましょう。

Git

オープンソースで、無料で、簡単に使える Git は、最も人気のあるバージョンコントロールシステムの 1 つです。分散型レポジトリに最適で、かつ強力なブランチング機能とマージ機能を備えていますが、市場に出回っている他のソリューションのように、大きなバイナリファイルを効率的に扱うことはできません。

Perforce (Helix Core)

Helix Core は、EA や Ubisoft などのゲームスタジオで使用されているエンタープライズレベルのバージョン管理システムです。この VCS は中央集権型レポジトリに適しており、大きなバイナリファイルを扱うことができます。しかし、レポジトリの視覚化に関する機能がそれほど強くないので、技術者ではない開発関係者にとって、その導入が難しいものになるかもしれません。

Apache Subversion

Git と同様、Apache Subversion も無料で使えるオープンソースのバージョンコントロールシステムです。中央集権型レポジトリに向いており、大容量のバイナリファイルを扱うことができますが、メインサーバーに接続していないと使えないため、オフラインでの作業には不向きで、大規模なチームや分散したチームには邪魔になる可能性があります。

Plastic SCM

Plastic SCM は、プログラマーやアーティストをサポートする柔軟なバージョンコントロールシステムです。大規模なレポジトリやバイナリファイルの扱いに優れています。また、ファイルベースおよびチェンジセットベースのソリューションとして、プロジェクト全体のビルドではなく、作業中の特定のファイルのみをダウンロードする機能を提供します。

さらに、Plastic SCM は、視覚的なブランチング機能を前面に押し出した市場で唯一のバージョン管理システムです。何千ものブランチを一度に扱うことができ、中央集権型ワークフローか分散型ワークフローかの選択を迫られることもありません。

他にもどんなことに Unity を役立てられるか知りたい方は、Unity のソリューション紹介ページをご覧ください。壮大なアイデアを大きな成功に繋げるために、開発のあらゆる段階で起きる課題を克服するためのソリューションが揃っています。

2021年9月23日 カテゴリ: ゲーム | 10 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック