つなぐだけで、みんな参加。 イベント・セミナー・ウェビナー向けの、インストール不要なリアルタイム投票・クイズプラットフォーム。
SocketJoin は、ホストの操作に合わせて参加者の画面がリアルタイムに切り替わる、インタラクティブなイベント支援ツールです。WebSocket を活用し、1秒未満の低遅延でアンケート集計やクイズの進行が可能です。
Docker Compose を使用して、すぐにローカルで試用できます。
cp .env.example .env.env を編集し、POSTGRES_PASSWORD を設定してください。
make upこのコマンドで DB、Redis、API、フロントエンドがすべて立ち上がり、マイグレーションも自動適用されます。
- ホスト管理画面: http://localhost:3000/host (
WEB_PORTで変更可能) - API サーバー: http://localhost:3000/api (
WEB_PORT経由。直接アクセスはAPP_PORT)
外部からアクセス可能な Web サーバーへデプロイする場合は、以下の設定を確認してください。
- HTTPS 通信: セキュリティおよび WebSocket の安定のため、リバースプロキシ(Nginx, Traefik, Cloudflare 等)を介して SSL/TLS を適用してください。
- APP_ENV:
.envでAPP_ENV=productionを設定すると、認証 Cookie にSecureフラグが付与されます。 - FRONTEND_URL: 実際にアクセスするドメイン(例:
https://join.example.com)を.envに設定し、CORS を許可してください。
| 変数 | 説明 | デフォルト値 |
|---|---|---|
POSTGRES_PASSWORD |
DB のパスワード (設定必須) | change_me |
POSTGRES_PORT |
DB の公開ポート (Docker 使用時) | 5432 |
REDIS_PORT |
Redis の公開ポート (Docker 使用時) | 6379 |
APP_PORT |
API サーバーの公開ポート (Docker 使用時) | 8080 |
WEB_PORT |
Web サーバーの公開ポート (Docker 使用時) | 3000 |
FRONTEND_URL |
CORS/WebSocket 許可オリジン | http://localhost:3000 |
APP_ENV |
production 指定で Secure Cookie 有効 |
development |
NG_WORDS |
追加のNGワード (カンマ区切り) | (空) |
POLL_RETENTION_DAYS |
投票データの保持期間(日数) | 90 |
SocketJoin はサーバー起動後、毎日 1 回バックグラウンドでデータ保持ジョブを実行します。
削除対象: POLL_RETENTION_DAYS(デフォルト 90 日)を超えた polls レコード。CASCADE により関連する options・votes・vote_submissions も同時に削除されます。
削除されないもの: events テーブルのレコードは削除されません。ただし、削除された poll を参照していた events.current_poll_id は自動的に NULL にリセットされます。
注意: イベントが残っていても、保持期間を超えた投票結果・集計データは失われます。長期保存が必要な場合は、ホスト管理画面の CSV エクスポート機能を使用してください。
Makefile を使用して各操作を行えます。
make up: 全サービスをバックグラウンドで起動make down: 全サービスを停止make logs: ログをストリーミング表示make migrate-up: マイグレーションを適用make smoke-test: 基本的なイベントフローのテストを実行
ホスト管理画面の CSVテンプレート から、説明付きテンプレートをダウンロードできます。
poll_typeはsurveyまたはquizoption_1とoption_2は必須。追加の選択肢は左から詰めて記入max_selectionsは未指定なら1pointsとcorrect_optionsはquizのときに使用correct_optionsはoption_1を1とする番号指定で、複数正解は1|3のように記入
例:
poll_title,poll_type,max_selections,option_1,option_2,option_3,points,correct_options
好きな色は?,survey,1,赤,青,緑,,
2 + 2 は?,quiz,1,3,4,5,10,2
正しいものをすべて選べ,quiz,2,地球は丸い,空は赤い,水は液体,20,1|3- Backend: Go (chi, Gorilla WebSocket, pgx/v5)
- Frontend: SvelteKit (Tailwind CSS)
- Infrastructure: Nginx, PostgreSQL, Redis
- Migration: golang-migrate
LICENSE ファイルを参照してください。