Unity プロジェクトと Node-RED プロジェクトの単一リポジトリで共存できるフォルダ構成のメモ

Unity プロジェクトと Node-RED プロジェクトの単一リポジトリで共存できるフォルダ構成のメモ

Unity プロジェクトと Node-RED プロジェクトの単一リポジトリで共存できるフォルダ構成のメモです。

背景

Unity プロジェクトがあり、それを密に連携する Node-RED の仕組みって良く作るんですけど、いままで別々のリポジトリで作っていたんです。

しかし、これだと管理が 2 つのリポジトリになり大変になるのと、それよりも脳としての記憶面で 1 年後見たときに完全に記憶が切れてて、うっかり再開発すらしそうになる事故が起きやすいので、Unity プロジェクトと Node-RED プロジェクトの単一リポジトリで共存できるフォルダ構成ができないかなと思っておりました。

こんなフォルダ構成にするとうまくいった

AI とも壁打ちしつつ、いろいろ調べてみてこんな構成でうまくいきました。

my-project/
├── .gitignore
├── LICENSE
├── README.md
├── package.json              ← ルート(node-red 依存)
├── package-lock.json
├── Assets/                   ← Unity 本体
├── Packages/                 ← Unity
├── ProjectSettings/          ← Unity
├── node-red-project-01/      ← Node-RED プロジェクト(1つ目)
│   ├── flows.json
│   ├── flows_cred.json
│   ├── package.json
│   └── settings.js
├── node-red-project-02/      ← Node-RED プロジェクト(2つ目)
│   └── ...
└── node-red-project-N/       ← 必要な数だけ追加できる
    └── ...

こうすると、Unity 側・Node-RED 側が干渉せず、それぞれ独立して動作できます。

Unity 側

Unity から見ると Assets/Packages/ProjectSettings/ の3ディレクトリが Unity プロジェクトの実体です。リポジトリルートを Unity Editor で開けば、これらをUnity プロジェクトとして自動的に認識します。Node-RED 側のフォルダは Unity からは完全に無視されます。

Unity のこの世界観を知ったとき「へー!こんなにシンプルなんだ!いいね!」と思いました。

Node-RED 側

Node-RED から見ると各 node-red-project-*/ が独立した Node-RED プロジェクトとなります。それぞれに flows.json / package.json / settings.js を持つイメージです。プロジェクトをまたいで依存を共有しない構成のため、差し替えや追加のしやすさも見据えています。

npx node-red -u node-red-project-01

対象フォルダを -u オプションで指定して起動できます。

npx node-red -u node-red-project-02

別のプロジェクトに切り替える場合は、指定するフォルダ名を変えるだけでいいです。

運用上の注意点

.gitignore には Unity 向けの除外設定と Node.js 向けの除外設定を両方記載しておく必要があります。

私はよく以下の gitignore を参考にしています。

GitHub Codespaces も併用できる

この仕掛けで、もちろんローカルの Node-RED でも動きます。

さらにGitHub Codespaces 上で Node-RED を起動できます。GitHub Codespaces 上で動くようにしておくと登壇時やハンズオンの資料作りをしているときにも、提供しやすいですね。