upk作っていく
Unity Package Installer
UPMと名前がかぶりそうだから変えておく
UPIという名前のnpmモジュールがあったのでupkに名前変更
unity3d-package-syncerは機能がまだちょっと足りない
githubからインストールできるけどpackage.jsonがないレポジトリはインストールできない
ディレクトリ構成がルートにAssetsがないとインストールできない
要するにもう少しコンフィギュレーションできればいい
あと地味にnpm updateとかしたときにnpmの仕様でgithub経由のパッケージは再インストールができない
これはなんでなんだろう?
機能要件
Githubからパッケージをダウンロードできる
リポジトリに特別な設定は必要なし
できればルートディレクトリの規則に従ってくれていると良いのだけど
パッケージによってはルートからの相対パスをべた書きしている場合があるので困る
インストールする側のコンフィグで設定できればいい
バージョン指定はgitのhash, tag, branchなど
.unitypackageも展開可能
進捗その他
作っている2018/1/13keroxp.icon
パッケージ情報はこういうファイルにする
code:Upkfile.coffee
git "keroxp/unicommon", "^0.0.8"
git "neuce/unirx", "5.5.6",
map: [
src: "Assets/Plugins/Scripts", dest: "Assets/UniRx/Scripts"
]
git "git@somegit.com:keroxp/some.git"
upk "SDUnityChan", ->
upk "SocialConnector", -> git "anchan828/social-connector"
こういうパッケージマネージャは早晩スクリプタブルにする欲求が増えるので、CocoaPodsやGemfileのようにパッケージファイル自体をスクリプトで書くようにする
CoffeeScriptはこの用途に最適な言語だと思う
トップレベルのリゾルバは以下の3つ
git: Githubその他Gitレポジトリからcloneする
zip: zipで落としてくる
upk: .unitypackageファイルを展開する
upkは引数にzipとgitを指定可能で、それぞれ展開したあとunitypackageを引き出す
目指すところとしては、公開する側がupkのことを意識せずともインストールできるようにすること
インストールする側で柔軟にディレクトリの再構成ができるようにする
.unitypackageはバージョン管理の思想のもとに作られていないので、gitレポジトリからこれと同等のものを生成するメタファイルも用意したらいい
code:Upkinfo.coffee
3つ展開できるところまでできた2018/1/13 21:39keroxp.icon
一つ問題発生
zipファイルがディレクトリを固めたものなのか、複数のファイルをフラットに固めたものなのかがurlからは分からない
普通はディレクトリを固めたものだけどファイル自体をzipしてる場合もあるし…
Upkfileの仕様を変えた2018/1/13 22:56keroxp.icon
code:Upkfile.coffee
git "keroxp/unicommon", "^0.0.8"
git "neuce/unirx", "5.5.6",
map: [
src: "Assets/Plugins/Scripts", dest: "Assets/UniRx/Scripts"
]
git "git@somegit.com:keroxp/some.git"
###
MyAsset/
Asset/
Ignore/
のようなトップファイルがディレクトリのzipファイル
###
asset "FooAsset", ->
# ローカルのディレクトリ
asset "LocalAsset", "./local/LocalAsset"
# リモートの.unitypackage
# githubにあるレポジトリのルートにある.unitypackageを使用
upk "SocialConnector", -> git "anchan828/social-connector"
# /UniCommon
# /UniCommon.unitypackage
# のような、ディレクトリの中に.unitypackageがあるzipを解決
upk "UniCommon", ->
# リモートのUniFoo.unitypackageがzipされたものを解決
トップレベルのリゾルバを、git, asset, upkの三種類に変更
assetは、.unitypackageファイルを使わず、ディレクトリそのままかUpkinfoファイルの情報を使ってアセットを解決する
ダウンロード前にdryRunで出来る限りのdependencyTreeを作るようにする
semverで解決できるのはgitリゾルバだけなので、gitのtagを計算する
dryRunでやること
モジュール名が重複していないか?
ダウンロードパスが重複してないか?
すでにモジュールが存在していないか?
存在していた場合バージョンを確認して変わっていなければ何もしない
runでやること
各モジュールをダウンロードしてくる
ここでは各モジュールをローカルのフォルダに展開する
upkもルートからのpathnameには展開しない
gitモジュールを理想的なバージョンにcheckoutする
各モジュールにUpkfileがある場合、それを再帰的に解決する
ここがめんどい
depが重複していた場合、最悪解決できなくなることがある
その場合、minが大きいほうに合わせていくしかない
installでやること
再帰的に展開したモジュールをAssetsにインストールする
もう少しでできそうkeroxp.icon2018/1/18
git, zip, upkで落として来るのはできた
gitの場合、バージョン読んで理想のバージョンでロックするのもでけた
gitからのupk展開もできた
やること
lockファイルとUpkModulesに齟齬があった場合どうするか?
Upkfileに情報がある
lockファイルに情報がない
=> 正常
lockファイルに情報がある
変更があるか?
=> Upkfileの方に更新
lockファイルに情報がある
lockファイル{, に情報}がない
モジュールディレクトリがない
=> 新規インストール
モジュールディレクトリが空ではない
Gitか?
=> 現在のrev-refで再ロック
普通のディレクトリ
=> 警告出してverなしで再ロック
各リゾルバのインストール方法
upk
unitypackageの展開方法は正直あまりお行儀がよくないので好きではないのだけど、仕方ない
asset, git
基本
リゾルバがダウンロードしてきたパスのAssets以下を全部プロジェクトルートのAssets/にコピーする
asset、 gitの第3引数にオプションが渡された場合:
include, excludeオプションでアセットのパスを解決する
code:coffee
include: [
src: "External/*", dest: "Assets/
]
code:coffee
git "keroxp/UniCommon", "^0.0.7",
exclude: [
"Assets/**/*.some"
]