【超初心者向け】UnityをGitHubで共同管理したい!【ざっくりGUI】


今日やること

(Unity自体の使い方については一切触れません。ご了承ください。)
雑談すっ飛ばして本質だけ知りたい方はざっくりGitHubの使い方(共同使用を前提に)から下だけ読んでください。
なお、今回はUnityを使う人はGUI好きかな〜という偏見でGitHub Desktopを使用した最も視覚的な方法で説明します。

今回の環境

  • Gitをインストール済みのPC, Mac(ここは各自でお願いします)
  • Unity 2019.1.2f1(何でもいいので共同管理する人たちの間でバージョンを揃えておいてください)
  • Unity Hub 2.0.0

Unityを共同で管理するということ

これからみなさんには、物理エンジンUnityを用いて共同開発を行ってもらいます。その際にGitHubを用いてUnityのプロジェクトを共同管理して欲しいのですが、GitHubを使って共同で管理すればどのようなメリットがあると思いますか?

  • 複数の環境で同時に開発できる
  • ブランチを分けて開発することで安全に変更できる
  • 進捗や課題を互いに把握できる

こんな感じでいいことしか無いんですよね。こんな魔法みたいなことを実現することができるのがGitでございます。

そもそもGitやGithubって何?

で、結局何やねんと。順を追って説明していきますね。

Git

GitというのはLinuxカーネルの生みの親、リーナス・トーバルズが元々Linuxのバージョン管理のために開発したバージョン管理システムです。  
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムで、リモートサーバ上にあるオリジナルのリポジトリを各々の環境にコピー(git clone)し、ローカル環境で開発、変更履歴を記録していく。そしてオリジナルのリポジトリに変更を反映(git push)したり、他の人の変更した元々のリポジトリの変更をローカル環境に反映(git pull)して使います。
その際、お互いの変更が衝突することもあり、Gitが自動で直してくれるものもあれば、自分で直す必要が出てくることもあります。(git merge)
参考:Wikipedia

とりあえずこんな"呪文"を使えば共同管理ができるというくらいでいいでしょう。次はGitHub。

GitHub

GitHubはGitHub社が開発したソフトウェア開発用のウェブプラットホームで、コードのバージョン管理に先ほど述べたGitを使用しています。GitHubは最もポピュラーなGitホスティングサイトで、リポジトリを視覚的に把握できたり、SNS機能を持っていて、よりチームでの開発に使いやすくなっているものですね。
参考:Wikipedia

ざっくりGitHubの使い方(共同使用を前提に)

とりあえずUnity関係なくGitHubの使い方を超ざっくりと説明していきます。
上でも述べましたが、以下ではGitHub Desktopを使った最も視覚的なやり方で全て説明します。gitコマンドを叩きたい方は予めご了承ください。

リポジトリの作成

GitHub Desktopのアプリを起動し、"Create New Repository"を選択。

適当にリポジトリの名前をつけて、どこにディレクトリを作るか決める。
決めたら、今回はGit Ignoreの欄からUnityを選んでください。
Git Ignoreについては次の項で説明します。

で、ライセンスって何やねん。公開を前提としていない場合はNoneでいいです。公開したい場合は、いい記事があったので割愛で。ライセンスについての参考記事

できたリポジトリは現在ローカルにあります。これをGitHubにアップしましょう!
どっちでもいいので、Publish repositoryってのをクリック。

ここで注意する点は1つだけ。リポジトリを公開したくない場合は、Keep this code private欄にチェックを入れる、公開したい場合はチェックを外す。それだけです。

  • 公開リポジトリ = Public
  • 非公開リポジトリ = Private

ですので、覚えておきましょう。ちなみに、公開非公開の設定はGitHubのサイト上でいくらでもできます。
リポジトリをPrivateにした場合は、inviteされたメンバーだけしかGitHubのサイト上でリポジトリを見ることができなくなります。されていないアカウントでログインした状態でURLを入力すると、404 Not Foundとなりますね。
(GitHub社を買収した後から、無料のアカウントでもPrivateのリポジトリが作り放題になったので、公開非公開は各自の目的や好みに合わせてください。)

.gitignoreを使って容量削減

先ほど述べたGit Ignoreの説明をしますね。.gitignoreとは、Gitの管理に含めないファイルを指定するためのファイル。 先ほどのリポジトリ作成でGit Ignore欄でUnityを選ぶと、Unity用の.gitignoreのテンプレが作成されるわけです。これでUnityの大きなプロジェクトを毎回全部出したり入れたりしなくてもよくなります。
また、このファイルは書き込み可能で、ローカルで設定していてGitで管理したくないファイル等があれば、逐次追記することも。
具体的に先ほどのhogefugaリポジトリの.gitignoreを見てみましょう。

.gitignore
 [Ll]ibrary/
 [Tt]emp/
 [Oo]bj/ 
 [Bb]uild/ 
 [Bb]uilds/ 
 Assets/AssetStoreTools* 

 # Visual Studio cache directory 
 .vs/ 

 # Autogenerated VS/MD/Consulo solution ad project files |
 ExportedObj/ 
 .consulo/ 
 *.csproj 
 *.unityproj 
 *.sln 
 *.suo 
 *.tmp 
 *.user 
 *.userprefs 
 *.pidb 
 *.booproj 
 *.svd 
 *.pdb 
 *.opendb 
 *.VC.db 

 # Unity3D generated meta files 
 *.pidb.meta 
 *.pdb.meta 

 # Unity3D Generated File On Crash Reports
 sysinfo.txt 

 # Builds
 *.apk
 *.unitypackage

読み方ですが、

コメントアウト

# "#"で始まる行はコメント

ファイルを無視

# どのディレクトリかを問わず、hoge.txtを無視
hoge.txt
# .gitignore が置かれたディレクトリ内のhoge.txtを無視
/hoge.txt

特定のディレクトリ以下を無視

#bin以下を無視
bin/

ワイルドカードを使った無視

.gitignoreでは、ワイルドカード「*」を使った書き方もできます。

特定の拡張子のファイルを全て無視する

#.exeファイルを無視
*.exe

# .htaccessと.htpasswdなど、.ht で始まるファイルを追跡しない
.ht*

上の.gitignoreファイルについての説明としてはこれくらいでしょうか。他にも、正規表現を利用して記入したり、一部のファイルだけを逆に含んだりすることもできます。
(参考:http://www-creators.com/archives/1662)

追記: gitignore.ioを使ってサボろう

gitignore.ioにUnityと入力するだけ。
これだけでUnity用に網羅された.gitignoreファイルを作成してくれます。

Unityでプロジェクトを作成、プロジェクトをリポジトリに

さあ、ここからが本題ですね。Unityを起動して、プロジェクトを作成してください。
(筆者がUnity Hubを使用しているため、以下はUnity Hubのスクリーンショットです。)

もう一度GitHub Desktopに戻ると...めちゃくちゃ増えてる!

これを下のSummaryに適当な名前をつけてcommit to masterしてください。
そしてGitHubのリポジトリのページを開くと、先ほど作ったnew_projectが増えていますね。

以下では、上画像のCurrent Branch masterの意味も含めて解説します。

ブランチを切る、Mergeする

ブランチとは、履歴の流れを分岐して記録するものです。master ブランチを幹として、枝のように生やしていきます。
分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。ブランチについての参考記事
本番環境にそのままcommitするのは危険なので、修正を行う際は、各自で新しいブランチを作り、修正が終わればmasterブランチに合流Mergeさせてください。その際masterブランチと衝突conflictすることがあります。Gitが自動で直してくれる場合とそうでない場合があるので、そうでない場合はGitHubのサイト上で自分でmasterの記述を削除する等して解決してください。

ブランチを切る

では、新しいブランチを作る方から。新しいブランチを作って別作業を行うことを、慣例的にブランチを切ると言います。
以下では、new_projectに赤い球体を追加する例を元に説明します。
画面上Current Branch masterをクリック後、New Branchをクリック。
目的に合った感じの名前をつけたら、Create Branchをクリック。これで新しいブランチに切り替わります。
ここでは、masterブランチから切ります。

あとは適当に赤いボールをUnity上で置いて...

そしたらGitHub DeskTopに何やら変更が記録されているので、さっきみたいに適当にSummaryを書いて、Commit to add/red/ballをクリック。
そしたらPublish Branchをクリック。ここまでの一連の流れをpushと言います。

マージする

GitHubのサイトに移りましょう。hogefugaリポジトリのトップページへいくと、先ほどのpushがサイト上に表示されていますね。今度はこのCompare & pull requestをクリックし、masterブランチにadd/red/ballブランチの変更を取り込んでもらうように依頼します。これをpull requestといいます。

Compare & pull requestをクリックすると先ほどGitHub Desktop上で記入したSummaryとDescriptionが反映されていると思います。追記しても構いませんが、まあ変更がわかるように書けたら画面右下Create pull requestをクリックで。

あとは、作成されたpull requestのページを下までスクロールして、masterブランチとの衝突がないなら、Merge pull requestをクリック。

これでmasterブランチに変更が反映されました!

作ったリポジトリを別環境でcloneする

先ほどの管理しているリポジトリを他の場所にダウンロードcloneしてみましょう。
リポジトリのページを開いて、画面右Clone or Downloadをクリック。今回はGitHub Desktopを入れているので、Open in Desktopを選択するのが1番楽です。

その後自分のローカル環境でリポジトリを置く場所を決めるだけ。
そしてUnityを起動してみましょう。hogefugaリポジトリ下のnew_projectがあるはずです。そして起動すると少し時間がかかりますが、開いてScenes/SampleSceneを選択。先ほど作った赤い球が!

あとは先ほどまでの説明の通り、ブランチを切って作業し、マージしての繰り返しです。
これだけでUnityを用いた共同開発ができます! それでは良い開発ライフを。