Skip to content

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

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 exec playwright test

Format Code

bun run format

Create types from wrangler.jsonc

bun wrangler types

Schema Definition, Migration

Create schema for BetterAuth

bun dlx 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 exec drizzle-kit generate

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

bun exec 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