---
# System prepended metadata

title: Denpa サービス概要

---

# Denpa サービス概要

## Denpa とは

DENDAI-UNIPA とかのもろもろのツールが使いにくいので、データをごにょごにょして便利に使えるサービスを作ろうというプロジェクトであるッ！！

### URL

https://denpa.tdu.app

### Denpa システム構成

- denpa
  - Webアプリ本体 (Next.js)
- denpa-firebase
  - Cloud Functions for Firebase
- denpa-syllabus-console
  - 
- denpa-advanced-proxy

## 機能一覧

### Ver1.0 / 目標: 9月頃 (後期授業確定前)

- ログイン
  - 電大のOffice365アカウントを用いてログイン可能
    - Google Cloud Identify Platform に切り替えを行い、Cloud Functions の `beforeCreate` トリガーを用いて登録ユーザーのメールアドレスを `@ms.dendai.ac.jp` に制限する
      - doc: https://cloud.google.com/identity-platform/docs/blocking-functions
- 時間割
  - 時間割の登録 / 編集
    - 登録と編集は同一の画面でOK
    - 編集方法
      - UNIPAからダウンロードできるPDFから自動登録
      - シラバスの検索から登録
      - 任意の文字列を登録
  - 時間割へのメモ
    - Discordのユーザーにメモするやつに似てる
    - 自分の時間割の登録データにメモを書くことができる (シラバスにメモを書くわけではない)
  - 時間割の表示
    - 表の形式で確認できる
    - 登録した課題があれば強調表示される
  - 時間割のリマインド
    - (1) 曜日ごとに指定された時間に「今日の時間割通知」を送信
      - 毎時0分を選択できる
        - 6時～19時とか？
      - 夜間学部向けの時間も用意したい
    - (2) 授業開始時間10分前に通知を送信
      - クリックするとZoomの参加URLに飛ぶ
      - 通知設定時に「PC (scheme: `zoommtg`)」「スマホ/タブレット (scheme: `zoomus`)」を選択
        - 参加URL: `[scheme]://zoom.us/join?confno=[meetingId]&pwd=[pass]&uname=[name]`
- シラバス
  - シラバスの確認
    - シラバスの画面からWebClassに飛べる
  - シラバスの検索
    - 検索エンジンには Algolia を使う予定です
      - 無料枠: 10,000 Records, 10,000 Search requests/mo
      - オーバー分: $1.00 / 1,000 Search requests
- 課題一覧
  - 課題の登録
  - 課題の編集
  - (課題のリマインド)
- ホーム
  - 一番最後に作る
  - ダッシュボード、ウィジェット的な感じです
  - ちょっと複雑そうなので仕様策定は後ほど

#### DBくん

- users
  - [uid]
    - displayName: string
    - timetable: array
      - 0: array (曜日番号)
        - 0,1,2,3,4,5,6,7: object (時間番号)
          - syllabusId: string
          - text: string
          - memo: string
    - tasks: サブコレクション
      - [randomId]
    - notifyTokens: サブコレクション
      - [randomId]
        - 例を下に書いてます: notifyToken

```typescript
const notifyToken = {
  token: "MESSAGING_USER_TOKEN",
  daily: [
    0: 9, // 月 => 9時
    1: 9, // 火 => 9時
    2: 9, // 水 => 9時
    3: 10, // 木 => 10時
    4: 9, // 金 => 9時
    5: null, // 土 => 受け取らない
    6: null, // 日 => 受け取らない
  ],
  beforeClass: [
    0: [ // 月曜日
      0: true, // 1時間目 => 受け取る
      1: true, // 2時間目 => 受け取る
      2: true, // 3時間目 => 受け取る
      3: true, // 4時間目 => 受け取る
      4: false, // 5時間目 => 受け取らない
      5: false, // 6時間目 => 受け取らない
      6: false, // 7時間目 => 受け取らない
      7: false, // 8時間目 => 受け取らない
    ],
  ]
}
```


#### 要検討事項

- シラバスのスクレイピングツールをどこに置くか
  - AdminだけWebからキューできるようにするとか
- シラバスのデータをどこに置くか
  - Firestore or SQL?

### Ver2.0 / 目標: 秋

- Wikiのような形で編集できるシラバス
  - 命名は考えたい
- 課題のシェア機能

### Ver3.0