もんりぃ is undefined.

育児ネタとか、技術ネタとか。

Unity + GitHub の課題と解決策

はじめに

Unity のプロジェクトを GitHub で管理しようと思うと幾つかの課題にブチ当たります。 その課題と解決策についてノウハウが溜まってきたので記事に纏める次第。

課題と解決策

社外秘なコードが無料でホスティングできない

  • 素直に Organization 買いましょう。
  • Enterprise もあるよ。

巨大なファイル (100MB 以上) を管理できない

  • そもそも、そんなサイズになるようなモノを管理しない方法を模索してもヨサソウ。
  • 管理する場合は git lfs で。
  • 既にリポジトリが存在している場合は、 lfs 化したファイルのコミット履歴は消えちゃうけどね。
    • 履歴消さずに git lfs 化する方法ってあんのかなぁ…?

リポジトリサイズが 1GB を越える

  • 今のところいきなり止められたりするコトはないけど、警告メールが来る。
  • 個人的なオススメとしては、拡張子ベースでの git lfs 管理かな。
    • 管理対象は画像とか音声とか動画とかのバイナリファイル。
    • 1回、ディレクトリ単位での管理をしてみたんだけど、 .meta とか .prefab とかの差分を見たいファイルも lfs 化しちゃうコトになるので、やや不便でした。
      • あ、もちろん Asset Serialization を Force Text にしている前提ね。
      • GitHub 上では差分見られるけど、 tig とか SourceTree とかだと見られないかも。
      • 追加漏れが発生する確率が高いかも。

秘匿情報の管理ができない

  • API キーとかの、漏れたら困る情報は Public は勿論のこと Private であってもリポジトリで管理しない方が安全。
    • まぁ Private なら、最悪管理しても良いのかも知れませんが、望ましくはないですね。
    • 万が一 Public になってしまったら全部 Revoke したりしないとなので。
  • コレばかりは、今のところ完璧なソリューションを思い付かないので、プライベートな環境 (社内の NAS とか) で管理して個別にプロジェクトに取り込むとかしか無さそうですね。
  • 設定ファイル的な ScriptableObject 作ってあげると Unity 上での取り回しは楽。
    • 勿論 .gitignore してね。
    • その手の設定ファイルを取得するスクリプト書いても良いかも。
  • 2017/08/04 追記 コメント欄にて「GPG とか使って公開鍵で暗号化する手もあるよ!」って教えていただきました。確かにその手があった!

AssetStore で購入した有償アセットを含んでいる

  • こちらも秘匿情報の件と同様、万が一 Public になってしまったらエラいことです。W@REZ *1 ダメ絶対。
  • コチラについては、どちらかと言えば安全な方法を考えついているので、近々記事を書きます。
    • まぁ、誤操作による Public 化のリスクは残る方法なので、銀の弾丸ではありませんが…。

移行が面倒くさい

  • 既に GitLab とか使ってて、移行する際に上記の課題があるから二の足を踏んでいる的な。
    • 私もそうでした。
  • まぁ、こればっかりは頑張るしか無いかなぁ、って感じです。
    • filter-branch 駆使して git 管理しないファイルを適切に除去したり。
    • 可能な限り履歴を継承するために git clone –mirror して git push –all && git push –tags したり。
    • 残っている Issue やら Pull-Request *2 やらは移行できないので、事前にやっつけたり手作業で移行したり。

そもそもメンバー全員が git を使いこなせるワケではない

おわりに

  • とかなんとか偉そうなこと書いてますが、私自身つい半年前まで殆ど GitHub 使っていない素人でございました。
    • いざ使い始めてみると便利なこと多いので、もっと早くから使っていれば良かったなぁとか思う次第。
    • 若手の同僚が猛プッシュしてくれたお陰で GitHub 導入に踏み切れたので、圧倒的感謝!
  • ある程度 Unity 側の仕組みも理解していないと、思わぬハマりポイントがあったりします。
    • 上記の他にも「こういうハマり方した or してる」的な情報があったら教えてほしいです!

*1:何のこっちゃか分からない人はそのままで大丈夫です。分かる人はインターネット老人会の会員です。

*2:GitLab の場合は Merge Request