Skip to content

Pawee2201123/ict-school-web

Repository files navigation

模擬授業予約システム (Mock Lesson Reservation System)

プロジェクト概要

学校の模擬授業イベント向けのオンライン予約システムです。生徒が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               │
     │  (自動メール通知)            │
     └─────────────────────────────┘

データフロー

  1. 生徒の申込みフロー

    生徒登録 → ログイン → 授業選択 → 申込み → 確認メール送信
    
  2. 管理者の運用フロー

    日程設定 → 授業作成 → 実施回追加 → 申込み監視 → データエクスポート → リセット
    

セキュリティ

  • 認証: パスワードハッシュ化(bcrypt)
  • セッション管理: 暗号化Cookie(gorilla/securecookie)
  • アクセス制御: ミドルウェアベースの権限チェック
  • SQLインジェクション対策: プリペアドステートメント使用
  • ファイルアップロード: 拡張子とMIMEタイプの検証

ビジネスルール

申込み制限

  • 生徒1人あたり最大3コマまで申込み可能
  • 1日あたり最大2コマまで
  • 各実施回に定員あり(先着順)

登録期間制御

  • 管理者が設定した期間外は申込み不可
  • 期間外は生徒に通知メッセージを表示

デプロイメント

再現性のあるビルド

Nixを使用することで、誰がいつどこでビルドしても完全に同一のバイナリを生成できます。これにより「ローカルでは動くが本番で動かない」問題を回避できます。

コンテナ化

Docker Composeにより、Webアプリケーションとデータベースをワンコマンドで起動できます:

docker compose up -d

インフラストラクチャ

AWS 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 を参照してください。

About

模擬授業予約システム​

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors