この記事はUnreal Engine 4 (UE4) Advent Calendar 2017 、7日目の記事です。
At First
ギガが足りない!ではなくギガを超えてしまった人が、Gitを使って、ギガ超えリポジトリをWebサービスで扱う方法について示します。Github / Bitbucket / AWS CodeCommit の制約や実現方法についてのまとめです。
自分はUE4のプロジェクトでこの対応を行う必要に迫られましたが、UE4に限定した話ではありません。ゲーム業界、UE4などのバージョン管理では Perforce や Subversion を扱うことが多いのではないかと思います。公式のドキュメントでも前述の2つを利用する方法について案内がされています。(Perfoceが利用できるWebサービスには基本有償ですが Assembla.com などがあります)
しかし、自分の経験とWebサービスの充実度合いから、Gitを利用することが多く、同じような境遇になった方の参考になればと思い、まとめることにしました。なお、環境はWindows 10、Shell は Github Desktop 付属の Git Shell を使っています。
GitHub
Github では、プライベートなリポジトリは月$7で無制限に作成でき、リポジトリサイズは1GB以下が推奨、1ファイルあたりの最大サイズが100MBまでとなっています。この制約を超える場合 Git Lerge File Storage(以下 Git LFS)を使う方法が用意されています。
Git LFS を用いた場合、無料では1GBのストレージと、月当たり1GBの転送量まで使用することが出来ます。
ストレージや転送料を追加する場合には、$5で50GBのストレージと転送量を追加することが出来ます。
Git LFSの導入はWebサイトからインストーラをダウンロードしてインストール。その後下記のコマンドを実行します。
> git lfs install
> git lfs track “*.umap” “*.uasset”
あとは通常通りに git add や commit/push を行うのみです(.gitattributes が自動的に作成されるのでこちらも add しましょう)。ファイルの量にもよりますが、初回のファイル追加時、push時には時間がかかります。その後は、それほど気にならない速度になります。トラッキング対象ファイルの確認や、対象から除くには下記のコマンドを用います。
> git lfs track // トラッキング対象ファイルの確認
> git lfs untrack “*.hoge” // トラッキング対象から除く
Bitbucket
Bitbucket は無料でプライベートなリポジトリが作成し放題ですが、アクセスするユーザー数が5人までに制限されています。制限を超える場合、1ユーザー辺り月2$を支払うことで人数を増やすことができます。リポジトリのサイズは1GBを超えると警告が表示され、2GBを超えるとpushできなくなります。1ファイル辺りの容量制限には言及されていませんでした(この日本語の文書は古いです!!)
2GBを超えたリポジトリを扱うためには、月2$のスタンダードプランでは5GBのLFSストレージが追加されます。注意点としてはチームに割り当てられるため、5人がひとつのチームに所属していた場合でも、10人の場合でも5GBまでという点です。また、スタートが10$からとなっており、2人しか使わないから4$という形には出来ません。
2GBを超えた場合、スタンダードプランに申込んだ上で、Git LFSの対応を行うことになります。基本的な手順はGithubと同様ですが、大容量のファイル転送時に失敗する場合があります。その場合、Bitbucket LFS Media Adapter を導入する必要があります。
ダウンロード後に、git-lfs-bitbucket-media-api を任意の場所に配置して、README.md の手順に従って git config に path の設定をすると正常にファイル転送を行うことが出来ます。
> git config –global lfs.customtransfer.bitbucket-media-api.path /path/to/git-lfs-bitbucket-media-api.exe
AWS CodeCommit
AWSの提供するGitリポジトリサービスで、最近 pullrequest にも対応しました。
無料で最初の 5 人のアクティブユーザーまで、無制限のプライベートリポジトリと、50 GB のストレージ、月10,000 回の Git リクエストに対応しており、ストレージ容量としては余裕のあるサービスになっています。
料金ページにも超過料金の発生なしに一般的な開発者のワークフローを処理できるように設計されていると記載されています。超過料金についても、1GB辺り一月に$0.06、Git requestごとに$0.001 なので、多少超えたとしても大きな負担にはならない金額設定です。
問題としては、AWSに慣れていないユーザーには初期設定のハードルが高いこと、Git LFS に未対応のため、2GBを超えるファイルを扱えないことです。単体のファイルであり、全体のレポジトリ容量ではないため、制限に当たるケースは少ないと思いますが、UE4の.umapが制限を超えたという書き込みがフォーラムにあったりもしました。
導入手順について、Windows環境で自分が行った最低限の手順を残しておきます。
AWSのアカウントでログインして、CodeCommitのサービスのページに移動します。ドキュメントのGit の接続エンドポイント一覧には東京がありませんでしたが、上部ツールバーの右上から東京を選択することが出来ました。リポジトリの作成をクリックして名称を入力、そのままスキップで進むとリポジトリに接続するための手順が表示されます。
ここからの設定がなかなかステップが多く、ドキュメントも環境別に似たようなものが多く、分かりづらいです。
- Pythonをインストール
- AWS CLI をインストール
- AWS CLIの初期設定実行時に .py ファイルの関連付けでエラーがでるので対応
> assoc .py=Python.File // cmd.exe から実施
> ftype Python.File="Path\to\python.exe"
- AWS CLI の設定。手順のページに従って、IAMユーザーの作成とAWSCodeCommitFullAccessの権限付与を行います。
> aws configure
- 上記を実行し、IAMユーザーのアクセスキー ID、シークレットアクセスキーを入力します。
- リージョンには ap-northeast-1 (東京)、format に json を指定
- ここまででスクリーンショットにある、「前提条件」が満たされます。
- 「リポジトリのクローンを作成するステップ」のコマンドを実行します。黒い網掛け部分にはリポジトリ名が入ります。
- 空のリポジトリが Clone されます。
任意のファイルを追加して、add / commit / push が可能です。もし、大きいレポジトリの push や clone に失敗する場合は以下のようにバッファサイズを大きくすることや、IAMユーザーのSSH設定を行い、SSHでの接続を行うことで回避できる場合があるようです。
> git config –global http.postBuffer 524288000
> git config –global http.postBuffer 1048576000
Summary
UE4等のサイズが大きくなりがちなプロジェクトにおいて、Git管理のリポジトリサイズが大きくなって困った!という場合に、Github / Bitbucket / AWS CodeCommit それぞれのWebサービスでの制約と実現手順についてまとめました。
AWSに慣れていて、1ファイルで2GBを超えないならば、AWS CodeCommit が無料の枠は最も広いです。しかしGit LFS非対応もあり、自分の環境では postBuffer の設定値をかなり大きく変更しなければ clone に失敗するなど、大きなサイズのリポジトリに強いとはあまり言えない印象を受けました。
Githubでは無料では1GBまで、プライベートリポジトリも作成できないので、12$を支払うことで50GB、人数制限なしで使うことが出来ます。懸念点としては転送量が月51GBまでになるので、人数や転送が多い場合には追加が更に必要になるかもしれません。
Bitbucketでは10$で5名、5GBまでのストレージを転送量等の心配なしに使うことが出来るので、この範囲で収まるならば気兼ねなく使うことができそうです。
Unreal Engine 4 (UE4) Advent Calendar 2017 、明日は Hirai Yuuki さんの「UE4でヒット演出解説」です!