コンテンツにスキップ
箱庭諸島2 TypeScript 版
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

開発者向けドキュメント

箱庭諸島2 TypeScript 版の開発に参加する方向けに、リポジトリの構成を説明します。

箱庭諸島2 TypeScript 版の開発に参加する方向けのドキュメントです。自分の環境に設置するだけなら 設置方法の選び方 を参照してください。

モノレポの構成

pnpm workspace によるモノレポです。パッケージ化しているのは差し替え単位となる Adapter だけで、ゲーム本体は 1 パッケージです。

パッケージ 役割
packages/core (@hakoniwajs/core) ゲーム本体。ランタイム非依存で、Node.js や Cloudflare 固有の API を使いません。画像や CSS などの public/ も含みます
packages/node (@hakoniwajs/node) Node.js 向け Adapter。node:sqlite によるストレージ、HTTP サーバー、ファイルバックアップ、CLI
packages/cloudflare (@hakoniwajs/cloudflare) Cloudflare Workers (Durable Objects SQLite) 向け Adapter。DO のストレージ、Cron Trigger によるターン進行、PITR バックアップ
website このドキュメントサイト (Blume)。pnpm workspace には含めず、npm で独立して管理しています

packages/core の層

依存の方向が一方向になるよう、層を分けています。

  • packages/core/src
    • core/ ゲームロジック本体。上位層にも Hono にも依存しない
    • app/ ユースケース (サービス層)。core を組み合わせてリクエスト単位の処理を組み立てる
    • storage/ SQLite 用のストレージ抽象 (スキーマ、リポジトリ)
    • web/ Hono + hono/jsx によるルーティングと画面
    • bootstrap/ 上記を組み立てる層。環境変数の読み込み (config-from-env.ts) もここ
    • ogp/ OGP 画像の描画 (純粋な TypeScript の PNG エンコーダ)

node:sqlite などランタイム固有の実装は SqlDriver として Adapter 側から差し込みます。packages/node・packages/cloudflare は SqlDriver/BackupStore などランタイム固有の実装だけを持ち、ゲームロジックやスキーマは共通です。

これらの制約は vite.config.ts の lint 設定 (no-restricted-imports) で検査しています。

次に読む