Skip to content

Repository files navigation

ICU生の時間割・履修計画アプリの決定版

できること

🔎あなたにピッタリのコースを見つける

  • 公式授業一覧から取得されたすべてのコースを検索

📅完璧な時間割を組む

  • Long 4, 5, 6, 7など、ICUならではのコマ割りも表示

🔄マルチデバイス同期

  • ログインしてすべてのデバイスで最新の時間割を共有

Screenshots

Page Screenshots
Home Home
Explore Explore
Timetable Timetable

目標

  • 100人のTermly Active UserをICU内で獲得する
    • Google / DuckDuckGoで「ICU 履修登録」「ICU 時間割」「ICU academic planning」「ICU registration」で1番目
  • 私が卒業しても自動で更新される状態にする
  • 授業データを公開情報のみで構築する
    • 教室情報は各自に打ち込んでもらえるように
    • regnoはsyllabus公開後にリンクから取得
    • GitLab CI/CD?

大切にしたいこと

  • とにかく時間割作成に使いやすいものである
    • long時間割対応 (しょうもないことだがアイデンティティ)
    • 軽量 (めざせ 全ページPageSpeedInsights 100): 全ページ97点以上達成,充分だろう
  • ICUらしくある
    • いろいろなものがひしめくリベラルアーツの感じを楽しく表現する
  • プロジェクトとして持続可能なものである
    • 後輩に引き継ぐ前提で作る,その価値があるものにする
    • 後進育成
      • Web/アプリ開発入門
      • ハッカソン
    • オープンソース
    • ICUのいろいろな団体とコラボする
    • できればCTLなどでも使ってもらいたい
    • 木越が責任を持って取り組む
  • Transparency
    • Share Issues, Feature Requests
    • 透明性のある予算と,ちゃんと収支均衡を取る

挑戦したいこと

  • PR
    • 対面で宣伝
    • Instagram等でICU関連の団体/個人に宣伝してもらう
    • 受験生にリーチ
      • 「こんなサイトを学生が作る大学なんだ!」+入学後に使ってもらう
  • コンポーネントテスト
  • ちゃんとWebアナリティクスを取って開発の励みにする

ライバル

参考


Development

技術選定

Frontend

Backend

Infra

Test

Runtime/Package Manager

技術構成はこちらの記事でも解説されています: 国際基督教大学の非公式時間割/履修計画アプリ「ICUのじかんわり」をAstro+Cloudflare Workers+D1でつくりました | Zenn

🚀 Project Structure

/
├── migrations/
│   └── migration.sql
├── public/
│   └── favicon.svg
├── scripts/
│   ├── data/
│   │   ├── ehandbook/  // 一般公開されているシラバスページ(HTML)はここに入れる
│   │   └── icumap/     // 学生向けのシラバスページ(HTML)はここに入れる
│   └── parser.py
├── src/
│   ├── assets/
│   │   └── astro.svg
│   ├── components/
│   │   └── Component.astro
│   ├── constants/
│   │   └── config.ts // Constants used globally
│   ├── db/
│   │   ├── data/
│   │   └── schema/
│   ├── lib/
│   │   └── server.ts // schema definitions, auth-related files
│   ├── pages/
│   │   ├── api/
│   │   │   └── api.ts
│   │   ├── index.astro
│   │   └── en/
│   │       └── index.astro
│   ├── styles/
│   │   └── global.css
│   ├── env.d.ts // Type for Astro
│   └── middleware.ts
└── package.json

🧞 Commands

All commands are run from the root of the project, from a terminal:

Command Action
bun install Installs dependencies
bun dev Starts local dev server at localhost:4321
bun run build Build your production site to ./dist/
bun preview Preview your build locally, before deploying
bun astro ... Run CLI commands like astro add, astro check
bun astro -- --help Get help using the Astro CLI

Run Test

bun x playwright test

Format Code

bun run format

Create types from wrangler.jsonc

bun x wrangler types

Schema Definition, Migration

Create schema for BetterAuth

bun x auth@latest generate --config=./src/lib/auth/cli.ts --output=./src/db/schema/auth.ts

Create migration file by Drizzle Kit --custom Create Empty Migration File --name=clear_user_name_image Set Custom Name on Migration File

bun drizzle-kit generate

一度生成したmigrationファイルをなかったことにする

bun drizzle-kit drop

Migration to D1

はじめに一度のみ,コースのカテゴリーを入れてあげる必要がある

# Local
bun wrangler d1 execute timetable_icu --file=./src/db/data/seed_categories.sql
# Remote
bun wrangler d1 execute timetable_icu --remote --file=./src/db/data/seed_categories.sql

Remoteは1度目は通らないことがあるが2回目やればいけるときがある

bun run db:migrate:local
bun run db:migrate:remote

もし外部キー制約が通らない場合

bun wrangler d1 execute timetable_icu --remote --file=./migrations/0012_smart_mojo.sql

などとしてmigration出来るが,これではD1のmigration履歴が残らないため,上記execute後に上記 sqlファイルの中身を一旦空にしてapplyする方法がある.私は一度これをやってPasskey Tableを消してしまったので推奨しない. -->しかし,wrangler applyではPRAGMA foreign_keys = OFF;が勝手に無効化されることがあるので,bun wrangler d1 executeでやらなければいけない場面もありそう.

Debug with Cloudflare Environment

bun run build && bun x wrangler dev

D1でのSQL文実行例

bun wrangler d1 execute timetable_icu --file=scripts/out/sync_courses.sql

Corse data insertion

Create JSON from HTML

bun run db:scrape:icumap    # 学生専用サイトからダウンロードしたHTMLがある前提
bun run db:scrape:ehandbook # 公開情報からダウンロードしたHTMLがある前提

Local DBにJSONからcourses/categoriesを入れる

bun run db:push:local

HTML->JSON->Local DBを一括で実行

bun run db:sync:local

Remote DBにJSONからcourses/categoriesを入れる

bun run db:push:remote

HTML->JSON->Remote DBを一括で実行

bun run db:sync:remote

ライセンス出力

bun x generate-license-file --input package.json --output CREDITS

リモートのログ出力

bun wrangler tail

About

[Read-only Mirror of GitLab] ICUの時間割作成ができるWebアプリ.公式シラバス全コースの検索,Long 4-7等の特殊なコマ割対応,マルチデバイス同期など,国際基督教大学での学生生活を快適に.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages