← 一覧へ戻る

Hangsha

ソウル大学の課外活動イベント情報を、より探しやすく使いやすくするために作った学内イベントカレンダーサービスです。

サークルチーム開発 / WaffleStudio

担当 / バックエンド開発、クローリング・バッチ処理、データ同期、画像保存

使用技術 / Kotlin, Spring Boot, MySQL, Flyway, Docker, AWS S3, Nginx, OkHttp, Playwright, GitHub Actions

関連リンク / GitHub / サービス

概要

Hangsha は、ソウル大学の課外活動イベント情報をより簡単に探して管理できるように作ったカレンダーサービスです。既存プラットフォームではイベント情報を探しにくいという問題から、カレンダー表示、絞り込み、ブックマーク、時間割連携、メモ機能を提供しました。

イベントデータを収集・正規化し、月別カレンダー、日別リスト、検索、詳細照会APIで使えるようにするバックエンドの流れを実装しました。ユーザーの関心カテゴリと除外キーワードを検索結果に反映し、クローラをバッチ処理として分離して、定期的にデータを更新できるようにしました。

担当内容

  • 全体のDBスキーマを設計・保守し、クローリングロジックとAPIを文書化してチーム作業を進めやすくしました。
  • 月別カレンダー、日別イベントリスト、イベント検索、イベント詳細照会などのイベント関連APIを実装しました。
  • ユーザーの関心カテゴリと除外キーワードを反映したイベントの並び替え・絞り込み処理を実装しました。
  • ソウル大学の課外活動サイトの一覧・詳細ページを分析し、イベント情報と個別回次をパースしました。
  • イベント画像と詳細説明内の画像をOCI Object Storageに保存し、HTML内部の画像パスを置き換えました。
  • クローラをbatchモジュールに分離し、Docker/Kubernetes CronJobによる定期実行構成に合わせて整理しました。
  • イベントの重複生成、セッションのないイベント処理エラー、SQL照会エラー、詳細ページ読み込み前のパース問題などに対応しました。

設計上の課題

最初に整理する必要があったのは、外部サイトから取得したイベントデータを、サービスの照会フローに合う形へ変えることでした。一覧・詳細ページからイベント情報を集めたあと、イベント期間、申込期間、回次情報、募集状態、主催機関などをDBスキーマに合わせて正規化し、月別カレンダー、日別リスト、検索、詳細照会APIで同じ基準を使えるようにしました。

また、ユーザーの関心カテゴリと除外キーワードによって、イベント一覧の並び替えと絞り込みが変わるようにしました。もともとの照会ロジックは活動期間を中心に見ていたため、申込期間の条件も一緒に反映し、カレンダーや一覧から漏れるイベントを減らしました。

運用環境では、DBを初期化して再クローリングする形ではなく、既存データを維持したままスキーマ変更や機能追加を反映する必要がありました。そのため、マイグレーションで管理する基準データと、外部サイトの状態によって変わり続けるイベントデータを分けました。既存データと新規データの対応付けも、auto increment IDではなく、申込リンク、イベント期間、回次情報のように環境が変わっても残る値を基準にしました。

画面例

Hangsha 画面例 1Hangsha 画面例 2

イベント探索、絞り込み、個人化機能をカレンダー中心に使えるようにした画面です。