はじめに
どうも、 Unity Package Manager オタクなもんりぃです。
日本時間 2020/03/06 (Fri) 20時頃、 Unity 2019.3.4f1 がリリースされました。
Package Manager: Added support for scoped registries authentication.
そのリリースノートの中に↑のような一文があり、気になって夜も眠れなくなりそう(大袈裟)だったので、飲み会終わりのほろ酔い状態で検証した結果をしたためます。
なお、帰りの電車の中で当該リリースノートを読んだ時の筆者の様子は以下のような感じでした。落ち着け。
え?は?マジ???https://t.co/VsUoGY6gLB pic.twitter.com/6DUPkc8tOx
— もんりぃ先生 (@monry) 2020年3月6日
TL; DR
~/.upmconfig.toml
に認証情報を保存しとけば認証できるようになるよ!やったね!
概要
以前、次のような記事を書きました。
ざっくり言うと「認証アリの Scoped Registry に接続する場合は、ローカル(じゃなくても良いけど)に Proxy を立てるなりしないと駄目」といった内容です。
Unity 2019.3.4f1 からは、こんなコトしなくてもチョット設定ファイルを書けば認証できるようになりますよ!っていうお話しです。
詳細
やることは次の3つです。
- Scoped Registry に
npm login
する ~/.npmrc
に書き込まれる認証トークンをメモ~/.upmconfig.toml
に設定を書く
Scoped Registry にログイン
npm login --registry [REGISTRY_URL]
Username と Password (と Email)を聞かれるので Scoped Registry に登録している情報を入力します。
Registry の設定に依っては npm login
をサポートしておらず、別の方法で認証トークンを取得する必要がある場合もあります。
(実際、キッズスターの Private Scoped Registry は GitHub の OAuth 認証を用いているので、 npm login
に対応しておりません。)
~/.npmrc
に書き込まれる認証トークンをメモ
npm login
に成功するとユーザのホームディレクトリ直下の .npmrc
という不可視ファイルに認証情報が書き込まれます。
ログインの方法に依って微妙にフォーマットは異なるのですが、次のようなフォーマットで書き込まれることが多いようです。
//<REGISTRY_HOSTNAME>/:_authToken="<AUTH_TOKEN>"
_authToken=
の後の文字列(ダブルクォーテーションは不要/ =
とかが入る可能性あり)をコピーしましょう。
~/.upmconfig.toml
に設定を書く
ココが肝です。
Unity Package Manager が認証情報を読みに行く際には、ユーザのホームディレクトリ直下の .upmconfig.toml
というファイルを参照するそうなので、そこに認証情報を書き込みます。
フォーマットは次の通りです。
[npmAuth."<REGISTRY URL>"] token = "<AUTH TOKEN>" email = "<EMAIL>" alwaysAuth = <BOOLEAN>
各パラメータの意味は次の表の通りです。
Parameter Name | Type | Required? | Description |
---|---|---|---|
npmAuth. の後の文字列 |
String | Required | Scoped Registry の URL( https:// から始まる URL) |
token |
String | Required | 認証トークン ((値によっては = とかで終わる場合もあるので注意) |
email |
String | Optional | メアド 何に使うのかイマイチ分からんw |
alwaysAuth |
Boolean | Optional | メタデータとパッケージ実体が別のサーバで管理されている場合にtrue を設定するそうな |
例えば以下のようになります。
[npmAuth."https://upm.kidsstar.co.jp"] token = "hogehogefugafuga" email = "tetsuya.mori@kidsstar.co.jp" alwaysAuth = true [npmAuth."https://another-upm.example.com"] token = "foobarbuzquz" email = "monry@example.com"
この設定を書いておくことで、 Packages/manifest.json
の scopedRegistries
に記載されている Scoped Registry が認証を要する場合でも、問題無く情報を取得することができるようになります!やったね!
まとめ
どんどん Unity さんが民主化してくれているので、ユーザは管理がしやすくなりますね!
The end goal is to expose a login UI in the Hub.
とのコトなので、遠からず Unity Hub から認証情報を登録出来るようになるんじゃないかと思います。