Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 32 additions & 18 deletions chros/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,38 @@
# CHroS WebApp
Next.js製のWebアプリケーション。Viewer・Console・API を1つのアプリに内包しています。

## 環境構築
必要なツール
- Node.js 22 LTS
- pnpm
Next.js製のアプリです。運営画面・会場掲示・APIを1つのプロセスで動かします。

依存の解決は monorepo のルートで行います。手順はルートの `README.md` を参照してください。
## 画面付きの手順書

1. リポジトリのルートで `pnpm install` を実行
2. `.env.example` を `.env` にコピー
3. 環境変数を設定する
- [手順書の入口](public/manual/index.html)
- [第1部:大会運営](public/manual/operations.html)
- [第2部:開発](public/manual/development.html)

## 環境変数
|キー|必須?|内容|
|---|---|---|
|`DATABASE_URL`|`true`|PostgreSQL 接続文字列|
|`NEXT_PUBLIC_APP_URL`|`false`|Viewer が SSE を張る先。同一オリジンなら空でよい|
起動中のアプリでは `/manual/index.html` を開いてください。GitHubのファイル画面ではHTMLが
ソースとして表示されるため、手元では `public/manual` をフォルダーごと保存し、
`index.html` をブラウザーで開きます。画像はHTML内にBase64で埋め込んでいます。

## ディレクトリ
- `app/console/` 運営向け操作画面
- `app/display/` 配信用 Viewer 画面。SSE で状態に追従し、画面切り替えはルーティングではなく状態で行う
- `app/api/` Route Handlers(REST + SSE)
## 初回起動

Node.js 22以上とpnpm 9.12.0を用意し、**リポジトリのルート**で実行します。

```sh
pnpm install --frozen-lockfile
pnpm dev
```

ターミナルに表示されたURLの `/console` が運営画面、`/display` が会場掲示です。
通常のポートは3000です。初回は架空の参加者を使ったサンプル大会が作成されます。

## 保存と環境変数

現在の試作はJSONファイルへ保存します。PostgreSQLやPrismaの初期化、`.env` の作成は不要です。

| 項目 | 内容 |
| --- | --- |
| `CHROS_DATA_DIR` | 任意。大会の保存先。未指定なら起動ディレクトリの `.chros`(通常は `chros/.chros`) |
| `DATABASE_URL` | 将来のDB構成用。現在の試作では使いません |
| SSE接続先 | 同一サーバーの `/api/stream`。接続先の環境変数は不要です |

保存先を共有する複数プロセスでの同時起動は非対応です。バックアップと復旧は
[開発手順書](public/manual/development.html#recovery)を参照してください。
79 changes: 79 additions & 0 deletions chros/public/manual/assets/data-flow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading