学校の模擬授業イベント向けのオンライン予約システムです。生徒がWebから授業を選択・予約でき、管理者が全体を管理できるWebアプリケーションです。
- 紙ベースの受付作業をデジタル化
- 各授業の申込み状況をリアルタイムで把握
- 確認メールの自動送信、データのCSVエクスポート
- イベント終了後、データをリセットして次回イベントに備える
- イベント日程管理: 複数日程のイベント設定(1日目、2日目)
- 授業管理: 授業の作成、編集、シラバスPDFのアップロード
- 実施回管理: 各授業の開催時間・定員・部屋の設定
- 申込み状況確認: 全ての申込みをリアルタイムで監視
- データエクスポート: 申込みデータをCSV形式で一括出力
- データリセット: イベント終了後、生徒データを一括削除
- ユーザー登録: メールアドレスで簡単登録(保護者情報含む)
- 授業一覧・検索: 開催される授業を閲覧・選択
- 申込み管理: 最大3コマ(1日2コマまで)の制限付き予約
- シラバス閲覧: 申込んだ授業のシラバスPDFをダウンロード
- マイページ: 自分の申込み状況を確認
- 自動メール通知: 申込み完了時に確認メールを受信
| レイヤー | 技術 | 理由 |
|---|---|---|
| バックエンド | Go 1.23.8 | 高速・シンプル |
| データベース | PostgreSQL 15 | 信頼性が高い |
| フロントエンド | HTML Templates | 軽量・メンテナンスしやすい |
| ビルド | Nix | 再現性のあるビルド |
| デプロイ | Docker + Docker Compose | どこでも動く |
| インフラ | AWS EC2 | クラウド環境 |
┌─────────────────────────────────────────────────┐
│ ユーザー (Browser) │
└─────────────┬───────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────┐
│ Web Server (Go Application) │
│ ┌──────────────────────────────────────────┐ │
│ │ Routes & Handlers │ │
│ │ - 認証 (Session Cookie) │ │
│ │ - 授業管理 │ │
│ │ - 申込み処理 │ │
│ │ - ファイルアップロード │ │
│ └──────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────┐ │
│ │ Middleware │ │
│ │ - RequireLogin │ │
│ │ - RequireAdmin │ │
│ └──────────────────────────────────────────┘ │
└─────────────┬───────────────────────────────────┘
│ SQL
▼
┌─────────────────────────────────────────────────┐
│ PostgreSQL Database │
│ - users (ユーザー認証) │
│ - user_profiles (生徒情報) │
│ - classes (授業定義) │
│ - class_sessions (実施回) │
│ - session_enrollments (申込み) │
│ - instructors (講師情報) │
│ - system_settings (設定) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────┐
│ SMTP Server │
│ (自動メール通知) │
└─────────────────────────────┘
-
生徒の申込みフロー
生徒登録 → ログイン → 授業選択 → 申込み → 確認メール送信 -
管理者の運用フロー
日程設定 → 授業作成 → 実施回追加 → 申込み監視 → データエクスポート → リセット
- 認証: パスワードハッシュ化(bcrypt)
- セッション管理: 暗号化Cookie(gorilla/securecookie)
- アクセス制御: ミドルウェアベースの権限チェック
- SQLインジェクション対策: プリペアドステートメント使用
- ファイルアップロード: 拡張子とMIMEタイプの検証
- 生徒1人あたり最大3コマまで申込み可能
- 1日あたり最大2コマまで
- 各実施回に定員あり(先着順)
- 管理者が設定した期間外は申込み不可
- 期間外は生徒に通知メッセージを表示
Nixを使用することで、誰がいつどこでビルドしても完全に同一のバイナリを生成できます。これにより「ローカルでは動くが本番で動かない」問題を回避できます。
Docker Composeにより、Webアプリケーションとデータベースをワンコマンドで起動できます:
docker compose up -dAWS EC2上で稼働しています。
ict-school-web/
├── cmd/server/ # アプリケーションエントリーポイント
├── internal/ # ビジネスロジック
│ ├── auth/ # 認証・セッション管理
│ ├── config/ # 設定管理
│ ├── database/ # DB接続
│ ├── email/ # メール送信
│ ├── handlers/ # HTTPハンドラー
│ ├── models/ # データモデル
│ └── template/ # テンプレートレンダリング
├── web/
│ ├── templates/ # HTMLテンプレート
│ └── static/ # CSS, JS, アップロードファイル
├── flake.nix # Nixビルド設定
├── docker-compose.yml # Docker構成
├── init.sql # データベーススキーマ
└── CLAUDE.md # 開発者向けドキュメント
- ログ確認:
docker compose logs web - 申込み状況をリアルタイムで確認
- 申込みデータをCSVでエクスポート
- データリセット機能で生徒データを一括削除
- 授業設定は残るので、次回イベントの準備が簡単
- 多言語対応(現在は日本語のみ)
- モバイルアプリ対応
- 人気授業の分析機能
- リマインダーメール機能
開発環境のセットアップ、ローカル実行、デプロイ手順などの技術的な詳細は CLAUDE.md を参照してください。