もんりぃ is undefined.

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

Unity Package Manager が認証に対応しました!

はじめに

どうも、 Unity Package Manager オタクなもんりぃです。

日本時間 2020/03/06 (Fri) 20時頃、 Unity 2019.3.4f1 がリリースされました。

f:id:monry84:20200307012003p:plain

Package Manager: Added support for scoped registries authentication.

そのリリースノートの中に↑のような一文があり、気になって夜も眠れなくなりそう(大袈裟)だったので、飲み会終わりのほろ酔い状態で検証した結果をしたためます。

なお、帰りの電車の中で当該リリースノートを読んだ時の筆者の様子は以下のような感じでした。落ち着け。

TL; DR

~/.upmconfig.toml に認証情報を保存しとけば認証できるようになるよ!やったね!

概要

以前、次のような記事を書きました。

monry.hatenablog.com

ざっくり言うと「認証アリの 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.jsonscopedRegistries に記載されている Scoped Registry が認証を要する場合でも、問題無く情報を取得することができるようになります!やったね!

まとめ

どんどん Unity さんが民主化してくれているので、ユーザは管理がしやすくなりますね!

The end goal is to expose a login UI in the Hub.

とのコトなので、遠からず Unity Hub から認証情報を登録出来るようになるんじゃないかと思います。