Extenject / UniRx / UniTaskをPackage Managerで扱いたい
Tags: unity3d
Published: 2020-03-09 12:26:00

---
title: Extenject / UniRx / UniTaskをPackage Managerで扱いたい
published: true
tags: Unity
date: 20200309T12:26Z
canonical_url: https://qiita.com/shiena/items/5e3e9e07def83e0ccff8
---
# はじめに

Package Managerでパッケージの導入が楽になったのでよく使うライブラリでも使えないかと調べた所、各リポジトリにissueは立っているものの開発元はまだ対応していません。

- https://github.com/svermeulen/Extenject/issues/24
- https://github.com/neuecc/UniRx/issues/427
- https://github.com/Cysharp/UniTask/issues/25

ですが有志がUPM対応したりレジストリを建てたりしているのでそれを利用する方法をまとめました。

# 有志がUPM化したものを利用

ExtenjectとUniRxはissueにもコメントされていたものです。UniTaskはUPMに対応するPull Requestのリポジトリを利用できそうです。

- https://github.com/starikcetin/awesome-upm
    - https://github.com/starikcetin/Extenject
    - https://github.com/starikcetin/UniRx
- https://github.com/Cysharp/UniTask/pull/26
    - https://github.com/twksos/UniTask/tree/upm

```json:Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/starikcetin/Extenject.git#9.1.0",
    "com.neuecc.unirx": "https://github.com/starikcetin/UniRx.git#7.1.0",
    "com.cysharp.unitask": "https://github.com/twksos/UniTask.git#upm-1.2.0",
    ...
  }
}
```

# Unofficial Unity Package Manager Registryを利用

もんりぃ先生(@monry)が建てたUnofficial Unity Package Manager Registryにもパッケージが登録されているのでこちらを利用する事もできます。
詳細は以下のリンクをご覧下さい。

- [Unofficial Unity Package Manager Registry を建ててみました](https://monry.hatenablog.com/entry/2019/06/06/204840)
- [パッケージを利用する](https://docs.upm-packages.dev/ja/usage)
- [Unofficial Unity Package Manager Registry](https://upm-packages.dev/)
    - https://upm-packages.dev/-/web/detail/com.stevevermeulen.extenject
    - https://upm-packages.dev/-/web/detail/jp.cysharp.unirx
    - https://upm-packages.dev/-/web/detail/jp.cysharp.unitask

こっちはパッケージを利用する方法に従って`manifest.json`に以下の内容を追加します。

```json:Packages/manifest.json
{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
```

更にExtenjectのバージョンの枝番に`-5`、`scopes`に`dev.upm-packages`を追加するとテスト用のMoqとNSubstituteを一緒にインストールできます。

```json:Packages/manifest.json
{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp",
        "dev.upm-packages"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0-5",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
```

# Path query parameter (Subfolder)

Unity2020.1a21とUnity2019.3.4f1から`package.json`をサブフォルダに配置できるようになりました。既存構成のままupm化できるようになったので開発元に追加されれば利用できるようになります。

現状、Extenjectは以下のように指定すればPackage Managerから扱えますがバグがありコンパイルエラーになります。

```json:Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject",
    ...
  }
}
```

まだ`package.json`が追加された後にタグが作られてませんが以下のようにハッシュを直接指定すると固定できます。

```json:Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject#a955dd60be11d9a1f92080cda1d87e425c519072",
    ...
  }
}
```

https://forum.unity.com/threads/some-feedback-on-package-manager-git-support.743345/#post-5425311

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Unity 2019.3.4f1 から Unity Package Manager が「Git リポジトリのルート以外に package.json がある場合」もサポートしてくれるようになりました。<a href="https://t.co/gChvsXmgjb">https://t.co/gChvsXmgjb</a><br>こんな感じに `?path=...` とパスを指定してあげれば良いようです。<br>（内部的に clone してから当該パス以下を読んでる？）</p>&mdash; もんりぃ先生 (@monry) <a href="https://twitter.com/monry/status/1235973803823337473?ref_src=twsrc%5Etfw">March 6, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

![image.png](https://dev-to-uploads.s3.amazonaws.com/i/vprchcqxn82gkx5yl2yd.png)

# 最後に

どちらの方法も一次配布元ではないのでいつまで追従するのか不安があります。
また、Unofficial Unity Package Manager Registryのパッケージはそれに加えて一旦ダウンロードしないと内容が分からないので差分が分からないのと誰がアップロードしたのか分からない不安さがあります。
この辺りを踏まえて便利に利用しましょう。