GitHubのプライベートリポジトリにGitクライアントでhttpsでアクセスする際に設定すること(Unity Package Managerでプライベートリポジトリ内のパッケージを取得したい)

エンジニアの岡村です。

最近仕事でUnity Package Managerを本格的に採用しており、upm対応したライブラリをGitHub上にプライベートリポジトリとして作成し、複数プロジェクトから参照出来るようにしました。ところが、作ったパッケージをUnityから参照しようとしたところ、環境によっては該当のリポジトリはクローン出来るにも関わらずUnityからはアクセス出来ないといった現象が発生し、ちょっとした混乱がありました。

今回の記事は上記のトラブルの手順を社内ナレッジベースに纏めておいたものを基に、内容を整理したものになります。

前提環境

  • Windows10
  • Git for Windows インストール済み

※Gitがインストールされていないと、UnityPackageManagerがURLからパッケージを取得しようとした際にエラーが出ます。

やること

Unity Package Managerはgitリポジトリからのパッケージの読み込みに、OSにインストールされたGitクライアントを利用します。 そこで、以下の手順でGitクライアントがGitHubのプライベートリポジトリにアクセスできるように資格情報を設定してやります。

GitHubのAccessTokenの発行

GitHubアカウントにアクセスするためのPersonalAccessTokenを作成します。発行は以下のURLから出来ます。

https://github.com/settings/tokens

トークンの発行時に権限を指定する必要があるのですが、今回はプライベートリポジトリのコードにアクセスできるrepo権限が最低限必要です。

アクセストークンをGitに設定する

今の状態でプライベートリポジトリを参照するパッケージをUnityPackageManagerでインポートしようとすると、次のようなダイアログが出てきます。

Tokenのタブに切り替えて、先ほどGitHub上で作成したアクセストークンを貼り付けます。

貼り付けたらSign inボタンを押して下さい。認証がうまく行けば、そのままパッケージのダウンロードが行われます。

この手順が正常に完了した場合は設定は終わりです。おつかれさまでした!

(手動で)アクセストークンをGitに設定する

※ここまででパッケージの読み込みが正常に完了した場合は、以降の手順は不要です。

gitのバージョンが古い、Windows以外を使っている等、上の手法で上手くいかなかった場合はこちらの方法でうまく行くかもしれません。

資格情報をファイルにプレーンテキストで格納し、gitの設定で参照するようにします。

発行したトークンを格納したファイルを作成

%USERPFORILE%\.git-credentialsファイルを作ります。このファイルは後の手順でパスを指定するので、別の名前でも構いません(デフォルトはこの名前です)。

ファイルの中には以下の一行を記述します。既にファイルが存在する場合は改行して追記してください。

https://{User}:{Token}@github.com
元の文字列 置き換え内容
{User} GitHubのユーザー名(URLに使われる文字列)
{Token} 前の手順で取得したアクセストークン

https://hogehoge:xxxxxxxx@github.comのようにします。

Gitの設定変更

Gitのグローバルコンフィグに先程作ったファイルを参照するよう設定します。

※UnityPackageManagerのパッケージ読み込み時にリポジトリ単位のコンフィグは参照されないので、グローバル以上のスコープで設定する必要があります。

%USERPROFILE%\.gitconfigファイル内に以下の設定を追加します。

[credential]
    helper = store --file ~/.git-credentials

作業を終えてからUnityでプライベートリポジトリ内のパッケージを設定すると、正常にインストールできる様になっているはずです。

以上

以上の操作でgitでGitHubのプライベートリポジトリにhttpsでアクセスすることが出来るようになり、UnityPackageManagerでパッケージとして読み込むことも可能になります。

今回はは社内のgitのインストール設定やバージョン等に縛りがなかったため、GUIを使った設定では上手くいかない人が出てきました。その原因を全て特定することは出来ず、社内で問題が出たすべての人の環境で動作する方法の模索には少し苦労しました。

宣伝

今年のSynamonは、アドベントカレンダーを実施する予定です! 自分もいくつか記事を公開する予定なので、是非楽しみにしていてください!

qiita.com

また、弊社ではUnityエンジニアを募集しています。興味がある方は是非以下のページを覗いてみてください!

twitter.com

meety.net

herp.careers