Unity Version Control でマージ競合を減らす新しい方法「Smart Locks」のご紹介

Unity は、クリエイターが最高の仕事をできるようにすることに情熱を注いでいます。だからこそ、Unity DevOps チームは、Unity Version Control の新機能である「Smart Locks」をご紹介できることを嬉しく思っています。
Smart Locks は、ファイルロックやブランチ運用においてありがちな、手痛いマージ競合を大幅に削減します。開発者は長い間、より速く、より安全なイテレーションのためにブランチ運用を行ってきました。そして今、アーティストを含む誰もが、自信を持ってブランチを活用し、プロジェクトをスケールアップできるようになりました。
Smart Locks は、ファイルをロックする前に最新バージョンで作業していることを自動的に確認するため、マージ競合のリスクを大幅に削減し、チームが安心してブランチ運用を行えるようにします。
アーティストが機能ブランチ、タスクブランチ、個人用のブランチを作成する際、Smart Locks があれば、競合の心配なくブランチを柔軟に作成し、チームメンバーと並行して作業することができます。メインのプロジェクト履歴に影響することなく、より速く試行錯誤やイテレーションを行うことが可能です。
Smart Locks は、多様なワークフローを探るのに役立ちます。バージョン管理システム(VCS)にチームを合わせるのではなく、Unity Version Control をチームに最適なものに適応させることができます。
多くのユーザーが、単にファイルをロックしたりチェックアウトしたりすれば、自動的にマージ競合を防げると信じています。しかし残念ながら、実際はそうではありません。
通常のファイルロックの仕組みにも、競合からファイルを守る方法は実装されていますが、これらのファイルロックはブランチごとに移動させられないため、別のアーティストが別のブランチから同じファイルをチェックアウトすることも可能になってしまいます。ファイルロックを移動させられないために、チームはブランチに対するワークフローの非互換性に対処できず、マージ競合が起こりやすくなります。
Smart Locks の仕組みを理解するために、まず、チームがファイルロックを適切に使用している場合でもマージ競合が起こるような状況を検証してみましょう。

このシナリオは、ブランチを運用しているチームが、ファイルロックを適切に活用しようと最善を尽くしても、頻繁にマージ競合に遭遇することを示しています。結果はどのようになったでしょうか。時間が無駄になり、チームの士気も下がってしまいました。Smart Locks は、ユーザーがブランチを信頼できるソースとして定義できるようにすることで、この問題を解決します。
ブランチを運用している場合でも、1 つのスレッドで作業している場合でも、ロックは独自の開発ラインをたどりながらブランチ間を「移動」し、最終的には変更がチェックまたはマージされる先のブランチに到達します。Smart Locks は、1 つのブランチで作業を続ける場合でも、子のブランチの作成に移る場合でも、この 1 本の開発ラインを活用します。

特定のファイルに関連するすべてのロックリクエストにおいて、異なるブランチに存在する新しいバージョンが認識されるようになりました。つまり、自分の変更がチームメイトの変更と競合しないか、古いバージョンで作業していないかなどと心配する必要がなくなります。
このシンプルかつ効果的なプロセスにより、複数のチームメンバーが競合するバージョンで同時に作業することがなくなり、変更漏れも防ぐことができます。これにより全員の芸術的ビジョンが考慮されるようになり、同時進行のコラボレーションが苦にならなくなります。

Git ベースのシステムに慣れ親しんでいるプログラマーの多くは、ブランチ運用の価値をすでに理解し、高く評価していることでしょう。アーティストにとってのブランチ運用の主な利点は、コーダーにとってのそれと同じです。
ブランチ内での作業は、事実上、プロジェクト本体の更新履歴から切り離されることになります。このような分離のおかげで、プロジェクトをダメにしてしまう心配なしに、安全にプロトタイプの作成や実験を行うことができるのです。
安全に実験できることで、継続的なイテレーションや複数バージョンのビルドが可能となり、リポジトリの履歴を遡って望みのものを選ぶこともできるようになります。そして、一番優秀なアイデアを採用できるのです。
ブランチの活用は、同時進行のコラボレーションにおける障壁を本質的に減らします。オリジナルのコンセプトとの関係を保ちつつ、新鮮なアイデアを生み出すためのスペースを確保できるのです。簡単に言えば、Google ドキュメントでイテレーションを 1 人で行うことと、200 人の共同作業者と 1 つのドキュメントで作業することとの違いのようなものです。
ローカルドライブやメインプロジェクトと統合されていない外部ソースで独自に作業するのではなく、バージョン管理システム内に保存することで、マージ競合を恐れることなく新しいコンセプトを生み出すことができます。
ブランチを活用することで、チームは複雑なワークフローをより扱いやすいものに分解することができます。プロジェクトの構成に合わせ、ブランチを作成することが可能です。ゲーム開発においては、プロジェクト管理を容易にするために仕事を分割するのは自然なことです。例えば、チーム内の作業を機能ごと、キャラクターごと、あるいはレベルごとなどに分けることができるでしょう。こうすることで、チームは特定のブランチにおいて割り当てられた仕事に集中することができます。
ブランチを用いて作業を分割すると、さまざまなチームやチームメンバーが、それぞれのペース、スタイル、プロセスをもってして作業を進め、同時進行で大きなプロジェクトに貢献することができます。このように摩擦をなくすことによって、コラボレーションがスムーズになるだけでなく、チームがプロジェクト履歴を更新する頻度も高くなります。より迅速にリリースできるようになり、ユーザーの期待にも応えられるでしょう。
メインのプロジェクトに変更をチェックインする場合では、変更の全体像を確認するのが難しくなります。一方、ブランチを用いると、プロジェクト履歴の全体像が見やすくなります。ブランチを活用することで、これらの変更を特定しやすくするのです。
Smart Locks は、チームメンバー全員が働き方を柔軟に選べるように設計されています。同時に、プロジェクトのアイデア出しや実験段階のような特定の状況では、複雑なファイルロックを扱うことが障害になることも認識しています。
そこで、移動可能なロックに加え、ブランチを除外する機能も実装しました。これにより、カスタムのロックルールを設定することで、ロック機能から特定のブランチを除外することができます。元のブランチにマージする必要がないことがわかっていれば、ファイルロックの制約に縛られることなく、ブランチ内でプロトタイプの作成や実験を行うことができます。
複雑なプロジェクトを確実に追跡し、既存のロックリストを明確に可視化できるよう、デスクトップクライアントと uDash の両方でグラフィカルユーザーインターフェイス(GUI)を改善しました。ロック履歴を確認することで、いつ、誰がロックを作成したのか簡単に確認できます。

さらに、ファイルのロックおよびロック解除の方法を示すアフォーダンスをより目立つように配置し、特定のファイルに既にロックがかかっていることを知らせる便利なメッセージを添えました。

この画期的な機能を利用するには、インストール済みの Unity Version Control を最新リリース版にアップデートしてください。オンプレミスのお客様、または Plastic SCM Enterprise を以前に利用したことがあるお客様は、Smart Locks の利点を十分に体験していただくために、サーバーとクライアントの両方をアップデートしていただく必要があります。
開始前にドキュメントをご確認ください。
Unity Version Control は、大規模なファイルやバイナリを素早く処理できる、エンジンに依存しないバージョン管理ツールです。あらゆる規模のゲームスタジオのアーティストおよびプログラマーの両方に最適化されたワークフローにより、チームのコラボレーションを改善し、生産性を向上させ、高品質のゲームをより迅速かつ効率的に提供できるようにしています。無料で開始するには、Unity DevOps に登録してください(条件あり)。