はじめに
Unity では独自に開発したライブラリをパッケージとして配布する方法としては2つあります
- UnityPackageManager (UPM) 経由での配布
- UnityCustomPackage としての配布
昔は2番目しか実質的な選択肢がなかったのですが、近年ではUPMが非常に使いやすくなっているため、個人開発でもGithub上にパッケージを公開してUPM経由で導入なんていうことも多いのではないかと思います。
しかし、このUPMですが、パッケージが他のパッケージに依存している時に、依存先のパッケージもまとめて導入する機能は、一般的な使い方をしている場合は出来ません。
ただ、全く依存性のない独立のパッケージは、それこそOSSのライブラリ程度なもので、現場の開発ではあるシステムを使いやすくするラッパーとかの開発も多いと思います。
特に、会社等のチームで開発する場合、チーム内ライブラリとしてラッパーを配布する場合も出てきます。
そこで依存性のあるパッケージ管理としてUnity公式の方法として スコープ付きレジストリ
という方法があります。
スコープ付きレジストリについて
スコープ付きレジストリを簡単に説明すると 独自で管理するパッケージ群をまとめて公開・管理するシステム
です。
一番わかりやすいのはUPMのところで Unity Registry
を選択すると、Unity公式のパッケージがずらっと出てきますね。
あれを個人単位でもできるようにするというのがスコープ付きレジストリです。
詳細は マニュアル および、UnityTechnologiesJapan さんのYoutube チャンネルにあがっている動画をご覧ください.
特に動画はkeijiro神が解説していますが、なぜか限定公開でしか公開されていないため、知らない方も多いかと思います。
スコープ付きレジストリの構築方法
公開されているものの設定方法などは先ほどの動画等を参照していただくとして、ここからが本題です。
じゃあ公開用の設定はどうするのか?です。
Unity 公式によると verdaccio
を使えばprivateパッケージレジストリとして配信できるとのことです。
What is verdaccio
UnityのUPMですがnpmをベースとして構築されているので、このverdaccioを使うことで社内用Unityパッケージを独自に配信することができるということみたいです。
導入参考記事
用途 | 参考リンク |
---|---|
AWS上に構築する場合 | https://developers.play.jp/entry/2023/04/21/105842 |
GCP上に構築する場合 | https://qiita.com/mmorito/items/c61ef4c0ebd4744c2c06 |
ローカルにUPM用のverdaccioサーバー構築してみた件 | https://shibuya24.info/entry/upm_use_verdaccio |
10ANTZ さんの構築事例 | https://developers.10antz.co.jp/archives/361#%E7%AB%8B%E3%81%A6%E3%82%8B |
元祖、UnityのPrivateRegistryを導入してみた もんりぃ先生の記事 | https://monry.hatenablog.com/entry/2020/03/07/015041 |
今回でいえばGCP上に構築なので以下の記事が参考になりますが、一部情報のアップデートやUPM対応に向けての情報がまとまっていなかったので、本記事でそのあたりを補足しつつ解説していきます。
導入フロー
- GCE のインスタンスを立てる
- sshでインスタンスに潜る
- 環境構築
- apt の更新
- dockerの導入
- Dockerの設定ファイルを用意する
- verdaccio コンテナを立ち上げる
- verdaccio コンテナに入る
- npm login する
- npm publish で対象のパッケージを verdaccio 側に登録する
1. GCE のインスタンスを立てる
ここに関しては下記記事を参考にしてください。
マシンのタイプとしては e2-micro
程度で十分なのでそこまで大きなスペックのインスタンスは必要ないです。
イメージは Ubuntu 20.04 LTS
を使用しています
2. sshでインスタンスに潜る
GCE のVMインスタンスのページの 接続
タブのところにある SSH
を選択すると新しいウィンドウが立ち上がってsshした後のターミナル画面が立ち上がります
3. 環境構築
1. apt の更新
1. dockerの導入
apt を更新しないとnpmが古い〜 とか色々文句を言われたので大事です.
docker は
$ curl https://get.docker.com | sudo sh
で導入ができるはずです
4. Dockerの設定ファイルを用意する
docker を動かすためには DockerFile
が必要で、Docker-Composeを使うなら docker-compose.yaml
も必要です。
昔は docker-compose.yml
でも良かったのですが最近のDockerだと .yaml と書かないと認識しない場合があるのでごちゅういください
今回はそれぞれ以下のように設定しました
↓DockerFile
FROM verdaccio/verdaccio:latest
# Git 導入
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
git \
bash \
&& rm -rf /var/lib/apt/lists/*
RUN git --version
version: '3.8'
services:
verdaccio:
image: verdaccio/verdaccio:latest
container_name: verdaccio
restart: always
ports:
- "4873:4873"
volumes:
- ./config:/verdaccio/config
- ./config/config.yaml:/verdaccio/conf/config.yaml
- ./storage:/verdaccio/storage
- ./plugins:/verdaccio/plugins
5. verdaccio コンテナを立ち上げる
DockerImageをビルドする場合(初回とか設定ファイルに変更があった場合)
$ docker-compose up -d --build
DockerImage をビルド済みの場合
$ docker-compose up -d
6. verdaccio コンテナに入る
コンテナが立ち上がってるのを確認できたら以下のコマンドでコンテナないに入ります
$ sudo docker exec -it verdaccio sh
7. npm login する
$ npm login --registry [verdaccio を立ててるインスタンスのIP]:4873
port 4873 はVerdaccio のデフォルトのポート番号なので、変更している場合は書き換えてください
8. npm publish で対象のパッケージを verdaccio 側に登録する
1. $ cd [package.jsonが置いてあるディレクトリ]
2. $ npm publish --registry [verdaccio を立ててるインスタンスのIP]:4873
port 4873 はVerdaccio のデフォルトのポート番号なので、変更している場合は書き換えてください
導入後
Graffity では現在11個ほど社内パッケージをVerdaccio 経由で配布しています。
Unity 側の設定
Unity のProjectSettings の項目に Package Manager
の項目があります
ここで+ボタンを押して新規にScopedRegistry を登録します
項目 | 説明 |
---|---|
Name | UPMの部分で表示する名称 |
URL | URL. 先ほど立てたGCE のInstance の外部IP:port を設定しましょう |
Scope(s) | 表示するパッケージname のフィルタ. 高橋keijiro さんだと jp.keijiro と入力することで jp.keijiro.* のパッケージリストが表示されます |
ここの登録が問題なくいくと、UnityPackageManager のWindow に表示されます。
ちなみにUnity6 からはMyRegistries の項目に追加されます。
まとめ
- 個人開発だとそこまで大きな効果は期待できないですが、会社・サークル等の団体で開発するときは社内ライブラリを充実させる恩恵は大きいです
- また自作パッケージ間で依存関係がある場合、Git のURL経由だと依存問題を解決しませんがScopedRegistry に登録することで依存関係がある場合依存パッケージもまとめてInstall できます
- 社内パッケージをUPM経由でポチポチして導入できると車輪の再発明を減らせたり、シンプルに開発工数を下げられるので非常におすすめです