TRViS と WebSocket でリアルタイム接続し、選択中の列車を即座に編集するためのデスクトップアプリです。
.
├── src/ フロントエンド (Vite + React + TypeScript)
├── src-tauri/ Tauri アプリ (Rust)
├── crates/
│ ├── trvis-ws-server/ WebSocketサーバ ライブラリクレート
│ └── trvis-ws-server-bin/ E2E用 standalone バイナリ
├── test-harness/TRViSTestHarness/ .NET テストハーネス
├── docker/ Docker compose 一式
├── e2e-tests/ Vitest による Rust 側 E2E テスト
└── e2e-ui/ Playwright による フロントエンド E2E テスト
pnpm install
pnpm tauri:dev # Tauri デスクトップアプリ起動
pnpm test # フロントエンド単体テスト
cargo test # Rust テスト
pnpm test:e2e # Rust 側 E2E テスト (要 docker)
pnpm test:e2e:ui # Playwright UI E2E (Vite dev server を自動起動。
# WebSocket wire テストは事前に
# `cargo build -p trvis-ws-server-bin` が必要)pnpm lint # ESLint (TS/TSX)
pnpm lint:fix # ESLint --fix
pnpm format # Prettier 整形 (TS/TSX/JSON/MD/CSS/YML)
pnpm format:check # Prettier 検証のみ
pnpm fmt:rust # rustfmt 適用
pnpm fmt:rust:check # rustfmt 検証のみ
pnpm check # lint + format:check + fmt:rust:check (CI 用)設定ファイル:
eslint.config.js(ESLint v9 flat config: typescript-eslint + react + react-hooks + react-refresh、prettier と競合する整形ルールは disable).prettierrc.json/.prettierignorerustfmt.toml/clippy.toml.editorconfig
TRViS のWebSocketプロトコルに完全準拠。
- サーバ → クライアント:
Timetable(Data: WorkGroupData[]/WorkGroupData/WorkData/TrainData),SyncedData(Location_m/Time_ms/CanStart) - クライアント → サーバ: ID更新メッセージ (WorkGroupId/WorkId/TrainId)
- 接続URL:
trvis://app/open/json?path=ws://<host>:<port>/ws
.github/workflows/ に 3 つの workflow:
ci.yml: lint / 単体テスト / Rust テスト / docker compose による E2E テスト (push / PR)tauri-build.yml: タグ push (v*) で 5 ターゲットを並列ビルド & ドラフトリリース化macOS arm64(Apple Silicon) ※ x64 は対象外Linux x86_64/Linux aarch64Windows x86_64/Windows aarch64
dotnet-harness.yml:test-harness/**変更時のみ .NET ビルド検証