コントリビュート
Ubichill への貢献ありがとうございます。バグ報告・提案は Issue、変更は Pull Request で歓迎します。 コーディング規約の詳細は CLAUDE.md にまとまっているので、ここでは設計思想を共有します。
基盤(コア)とmodを分ける
Section titled “基盤(コア)とmodを分ける”- コアがやること: modを安全に動かす基盤、ユーザーの同期処理、認証、ワールドの ロード・編集の土台。つまり「みんなが共通で必要とする仕組み」。
- modがやること: 具体的な機能(ペン・動画・付箋…)。機能はコアに足さず、 modで実装するのが原則です。コアは薄く汎用に保ちます。
ワールド作成は「誰でも」、mod開発は「エンジニア向け」
Section titled “ワールド作成は「誰でも」、mod開発は「エンジニア向け」”- ワールド作成/編集画面は非エンジニアでも直感的に使えることを目指します(迷わない UI)。
- mod開発はエンジニア向け。SDK は内部をできるだけ隠蔽し、少ないコードで 書けるようにしつつ、自由度・拡張性を損なわないバランスを狙います。
宣言的に、副作用と状態依存を避ける
Section titled “宣言的に、副作用と状態依存を避ける”- ロジックは宣言的に書く。命令的な手続きや、暗黙の副作用・可変状態への依存を避ける。
- modの状態は
Ubi.stateに集約し、純粋関数で組み立てる(letを避ける)。
過度な DRY / 複雑化を避ける
Section titled “過度な DRY / 複雑化を避ける”- 「共通化のための共通化」や早すぎる抽象化はしない。まず素直で読みやすいことを優先。
- 重複が“痛み”になってから畳む。将来の仮定でレイヤーを増やさない。
開発の始め方
Section titled “開発の始め方”前提: mise と Docker。Node / pnpm のバージョンは package.json(devEngines.runtime / packageManager)が真実源。
mise install # Node / pnpm を導入(mise.lock でチェックサム検証)pnpm installpnpm dev # 開発サーバー(Docker 含む)pnpm lint # コミット前に必須(自動整形は pnpm lint:fix)pnpm typecheckpnpm build:workers # mod Worker のバンドル規約(named export のみ / any 禁止 / PandaCSS / SVG アイコン 等)は CLAUDE.md を参照。
ブランチ / コミット / PR
Section titled “ブランチ / コミット / PR”mainから作業ブランチを切る(feat/.../fix/.../chore/...)。- コミット・PR は日本語、Conventional Commits。
- CI(lint / typecheck)を通す。squash merge 推奨。
- プレビュー環境: メンテナが PR に
previewラベルを付けると、pr-<番号>.ubichill.comに PR ごとのプレビューが払い出されます(未検証コードを勝手にデプロイしないためラベル制)。