Unity3D
npm
Unity
プロジェクト管理
パッケージ管理

Unityプロジェクトの自作パッケージ依存性管理をnpmで行う

More than 1 year has passed since last update.

はじめに

Unityで複数のプロジェクトを進行していると、共通の処理をライブラリとして切り出したくなることがよくある。公開できるものだったらAsset Storeに出せば、まあそれっぽい感じにはなるわけだが、privateな状態でやろうとすると、Unity自体にはそういったパッケージ管理の仕組みはないので1、自作するか、サードパーティのものを使わなくてはいけない。

要件としては、
・gitのレポジトリ(プライベートレポジトリ含む)で公開されているパッケージを簡単にインポートできること
・依存するライブラリのバージョン管理ができること(ローカルのバージョンと最新を比較して、バージョンが上がっていればアップデートするなど)
・MacでもWindowsでも使えること
・パッケージを公開する側で行うべき処理がなるべく少ないこと
であるが、これらを満たすツールとして、node.jsのライブラリ管理で使われるnpmを使うのが便利だという結論に落ち着いたので、その内容を記す。

npmを使ったUnityプロジェクトのパッケージ依存性管理

unity3d-package-syncer というnodeモジュールが公開されているので、それを使う。元々npmには依存ライブラリのバージョン管理機能は備わっているが、このモジュールはnpmが使う node_modules ディレクトリとUnityのディレクトリを同期してくれる。

以下手順を解説する。

パッケージを公開する側の作業

unity3d-package-syncer は gitのrootに assets (先頭は大文字でもよい)ディレクトリがあることを前提として、その中身を使用する側のUnityプロジェクトにインポートするため、インポートされる必要のあるファイルは全て assets 以下に突っ込んでおく。

また、npmの習わしに従って、プロジェクトのrootディレクトリにpackage.jsonを配置する必要がある。
中身は最低限nameとversionくらいあれば十分だ。

package.jsonの例

{
  "name": "my-unity-package",
  "version": "0.0.1"
}

後は githubのプラベートレポジトリなり、private npmなりにプッシュしておけばよい。

https://github.com/rotorz/unity3d-package-example/ で実際の例が見られる。

パッケージを使用する側の作業

使用する側では、package.jsonの dependencies の項目に unity3d-package-syncer と使用したいパッケージの名前とバージョン(npmで公開している場合)もしくはチェクアウト先のURLを追加する。以下の例では
https://github.com/rotorz/unity3d-package-example/ で公開されているunityパッケージを追加している。

{
  "name": "my-unity-project",
  "version": "0.0.1",
  "description": "",
  "scripts": {
    "sync": "unity3d--sync"
  },
  "dependencies": {
    "unity3d-package-syncer": "^1.0.1",
    "unity3d-package-example": "git@github.com:rotorz/unity3d-package-example.git"
  }
}

このpackage.jsonをUnityのrootディレクトリ(Assetsディレクトリがあるディレクトリ)に配置し、以下のコマンドを実行する。

$ npm install --save unity3d-package-syncer # unity3d-package-syncerをインストール
$ npm run sync

これでunity3d-package-exampleの中身がUnityのAssetsディレクトリにインポートされたはずだ。
以降は npm run sync を実行するだけで、自動的に最新にアップデートされる。

まとめ

npm は nodeのプロジェクト以外で使っても意外と便利。


  1. https://unity3d.com/jp/unity/beta/unity2017.2.0b2 によると Unity 2017.2.0から順次 Package Managerの仕組みが導入されるようですが、2017年10月15日現在は使用できません。