---
# System prepended metadata

title: 置き去り事故防止サービス

---

# ぴったくん

公共交通機関ではなく、幼稚園や保育園の通園バス用
バスの中で幼い子供が置き去りにされる事故を防ぐために、suicaをタッチするかのようにカードリーダーにタッチすることでネットに情報が記録され、子供が置き去りにされた状態でもすぐに乗っている場所などを見ることができるというもの
suicaをタッチするかのようにするトリガーは、「子供は親の真似をする」という性質を利用したもの
通園バスで大人がsuicaをタッチするように園児もカードをタッチする
タッチすると、園児のIDを読み込み、画面に園児の名前が表示される
親は事前にバスに乗るなどの子供の動作をweb上で予約するようにインプットしておき、子供が専用カードをタッチすると保護者の端末にも情報が送信される。その通知の方法はLINE&メール&SMSなど選ぶことが可能

幼稚園単位でのシステムなので、幼稚園といった組織の情報を入れるテーブルが必要

- 降車モードの切り替えは職員の持つ専用カードがトリガーになって切り替えられる
- 最終的に職員の持つ専用のカードをタッチすることをトリガーとして、乗車時と降車時のリストを照合。不釣り合いがあった場合はパトランプを光らせるなどして職員に通知を行う
- 降車モードで5分操作がないとアラートが鳴り、ここでもパトランプを光らせるなどして職員に通知を行う

使用技術: laravel??

## 動作
### 保護者
- 今日息子ないし娘が登園するのかを登録
- 園児がバスに乗った、または降りたタイミングでLINEか何かに通知が来る
----------------------------
- 保護者向けにID&パスワードを発行（誰が？）
- 通知方法を登録（SMSはできれば無しがいいですぅ・・・）
- 通知のタイミングも登録（登園の乗車、登園の降車、帰宅の乗車、帰宅の降車の四つのチェックボックスがあってチェックを入れた通知のみがくるようにする）
- 園児の当日の登園情報を登録（無論スマホでもできるようなデザインで）
- 液晶ディスプレイに一覧表示（バスのディスプレイという見解で合っているとしたら何を一覧表示させるのでしょう・・？）
- 園児が**降車**のカードをタッチしたら指定の通知方法で通知
- その際にカードをかざした瞬間の園児の写真が撮られ添付される？（アルコール検知器のシステムみたいな？）
- 液晶ディスプレイの一覧を更新

### 教諭
- 園児が乗降する前後に専用のIDカードをかざすことで園児の出席登録開始、並びに締め切りのトリガーとする

以下疑問点
- 監視したい園児と息子との紐づけはどう行うか
- 通知方法はどのタイミングで選ぶのか
- webにおいて保護者のマイページみたいなものもおそらく作ることになると思うが、そこでも登園済み、バス乗車中など状況がわかるようにするのか
- 登園履歴も作成するのか
- そもそもその**web**でのサービスを利用するのは保護者**のみ**なのか
- 教諭なども何らかの理由で使用するのであれば別の機能が必要になるはず
- 「乗車リスト」なるものはweb上で見れるようにするのか（もし見れるようにしたいのであればその幼稚園の教諭のみがアクセスできるようにする必要があるはず）
- 乗車モード、降車モードなどカードリーダー側が変えられるのであればダブルタッチの感知は別に要らないのではないか（何を想定した？）
- ***バスは一回だけで終わりではない。一回園児たちを一旦幼稚園に送り返して、もう一度出発して別の園児たちを幼稚園に送る場合も考えないといけない。***
- 

## データ
- 幼稚園
- 園児名
- 学籍番号
- 保護者のユーザーアカウント

## LINE連携(Laravelの場合)
https://biz.addisteria.com/laravel_line_integration/

https://biz.addisteria.com/laravel_line_message_api/

## 乗車降車時の保護者への通知方法
### LINE
LINE Notifyを使う
ユーザーは、1時間当たり1000回までの通知しか受け取れないという回数制限が設けられている

### メール
mailhogコンテナ等を使う
お金はかからない・・・はず

### SMS
SMSを送信するのは従量課金サービスのAPIを使う必要がある
一通あたり6円ぐらいかかるものもあるらしい
ここも実装させるのか・・？

## どこまで完成させるのか

- プロトタイプまで完成させるのか
- そのプロトタイプを実際に通園バスで搭載してテストを行うことを想定しているのか
    - 想定している場合
        - サークルメンバーに任せるのは適切であるか？
        - 実装の期間が2ヶ月は短くはないか？
- 置き去りにしないためのシステムを作成するので教員たちはそのシステムに頼らないといけないためどこか不具合が起きればそのシステムのせいになるため機密性、可用性、完全性も発表の際プッシュしていかないといけないはず![園児バス名簿]

    - サークルメンバー(基本一年)に任せるのは適切であるか？
        - 八尋は対応不可
    - 実装の期間が2ヶ月は短くはないか？
    - どういったスケジュールを想定していますか？
- フロントエンドも値を如何に表示させるか
- サーバーサイドはフロントエンドも含むのか、webアプリケーション全体を言っているのか
    - Restful api（React, Golangの組み合わせとかMVCではない方）を想定しますか？
    - MVCを想定していますか？

これが今現在使用されている幼稚園での名簿。これをもとにDBのERを作れるように
(https://hackmd.io/_uploads/rkFHZ9_Vp.jpg)

## 通知タイミング
- 登園の乗車
- 登園の降車
- 帰宅の乗車
- 帰宅の降車

の四つ

そこで登園の乗車だけ通知しない場合は「0111」、登園の降車、帰宅の乗車だけ通知する場合は「0110」というように、パーミッションの数字のように格納する
無論int型
ただし、登園情報には通知の有無かかわらず記入する
保護者、園児と分けてるからわかりづらい？
まず、カードをタッチすると、園児IDと共に[登園, 乗車]であるというデータが送られ、紐づけられている保護者IDの通知タイミング設定を読み込む

バスに乗る添乗員が見る画面で、該当バスに乗る園児たちの表がある。
まず乗車では園児欄のBackgroundColorは無地。
カードをタッチするとタッチした園児のBackgroundColorは青に変わる。これが乗車したサインになる。
もう登園しない園児のBackgroundColorは別の色にするといいかもしれない。
逆に降車モードに切り替わった結果全園児たちのBackgroundColorが赤になる。降車のカードをタッチすると赤色が消えることで残っている園児がわかりやすくなっている

## アプリ環境構築方法

今回は仮想環境を構築しその中に行う。
その名も「Vagrant」。
一連の作業で何GBも持ってかれるので注意

まずはVirtualboxのインストール。
https://www.virtualbox.org/wiki/Download_Old_Builds_6_0
ここにアクセスして「Windows Host」とあるのでそれをクリック。インストーラーがダウンロードされたら全部デフォルトでインストール

続いてvagrantのインストール。
https://developer.hashicorp.com/vagrant/install
ここにアクセスしてWindows版の一番上、「AMD64」をダウンロード、こちらも全部デフォルトでインストール

それができたら次はコマンドプロンプトなりを**管理者権限で**開く
管理者権限で開いた後は以下コマンドを打つ
```
bcdedit /set hypervisorlaunchtype off
```

このコマンドを打った後は再起動。vagrantがインストールされているかの確認を行う

後はプロジェクト用に新しいディレクトリを作ってそこに移動。以下コマンドでboxを追加
```
vagrant box add bento/amazonlinux-2
```

そのあと、以下コマンドを打ってboxが追加されたか確認する。何もないみたいな表示がなければとりあえずOK
```
vagrant box list
```

いよいよ仮想マシンの作成に入ります。以下コマンドを入力
```
vagrant init
```

そうすることで。Vagrantfileなるものが作られる。これが設定ファイル
次は起動。以下コマンドを入力してerrorみたいな表示が一切出てこなければOK
```
vagrant up
```

そして接続の確認。以下コマンドで接続できます
```
vagrant ssh
```

vagrantで作った仮想マシンの中にぴったくんの開発環境を入れるわけだが、vscodeで作業するにはssh接続しないといけない。
そのためには``C:\Users\ユーザー名\.ssh``フォルダ内にある**config**ファイルに設定を書き込む必要がある。

設定の書き込み方法については以下
https://qiita.com/yamashin0616/items/87e042b3f5ec52e57017

次にvagrantに接続してgitをインストールしましょう。
インストール方法↓
https://qiita.com/miriwo/items/8d5b35950232c1126d36
後はgitに自分のユーザー名とメアドを追加、そして**githubとssh接続**できるようにすればgit周りは完了
ただし鍵生成の際には名前を「vagrant_github」とかにした方がいいかも

## 開発環境に必要なもの
- virtualbox
- vagrant

## 作成機能

- バスの添乗員がタブレットで見る園児たちの登園表画面
- バスの乗車降車のカードがタッチされた際の保護者への通知機能

### バスの添乗員がタブレットで見る園児たちの登園表画面
バスに乗る添乗員が見る画面で、該当バスに乗る園児たちの表がある。
まず乗車では園児欄のBackgroundColorは無地。
カードをタッチするとタッチした園児のBackgroundColorは青に変わる。これが乗車したサインになる。
もう登園しない園児のBackgroundColorは別の色にするといいかもしれない。
逆に降車モードに切り替わった結果全園児たちのBackgroundColorが赤になる。降車のカードをタッチすると赤色が消えることで残っている園児がわかりやすくなっている
カードをタッチされた際に送られるMQTTリクエストをphp側が受け取って
武藤先生が作ってくれたjQueryのコードをそのまま流用したものにphpのdb入力用関数を走らせればOK。

### バスの乗車降車のカードがタッチされた際の保護者への通知機能
今回は登園登録機能は作らなくてもいい。あらかじめLINEのapiと友達になってもらったりしてそれをDBに手動なりなんなりで入れる。
その情報を使って通知を送信。
テストの日に登録を行ってその日のうちに削除
種類はLINE, email, SMSの三種類

#### LINE
https://ultimai.org/?p=2015

ユーザーID登録方法
https://qiita.com/fromage-blanc/items/1815992793b239a6d017

#### メール
https://qiita.com/okaokayaaa_n/items/8e3d8f5006832e0fc7f0

sesに登録するメアドはどうするか？個人のメアドよりもMakeITのgmailがもしあるなら使わせてもらったほうがいいのではないか？
↓
makeit@gn.iwasaki.ac.jp
を使う

送信ドメインが必要みたい
送信ドメインとは何を指すのだろうか・・？使用するホームページのドメインでいいのだろうか？

#### SMS
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html

https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html

https://www.cyberbrain.co.jp/news/detail/122/

## テーブル
- ユーザー(園児ではない)
- 幼稚園
- バス
- 園児
- 登園情報

### User
users
必要な情報
- 名前
- 教諭か保護者か(user_value)
- どの幼稚園に属するのか
- 幼稚園、バスの情報の編集権限(admin_flag)

### Organization
organizations
- 幼稚園の名前(name)

### Bus
buses
- バス名(name)
- 幼稚園ID

### Student
students
- ユーザーid
- パスワード(ハッシュ)
- 園児名(name)
- バスID

### Agent
agents
- 職員ID
- パスワード()
- 名前
- どのバスIDの編集権限を与えるか
- 

### Card
cards
- 用途(乗降切り替え用か園児用か)()
- 園児ID

### Attendance(attendant: 登校(意訳))
attendances
- 園児ID
- 登園の有無(attend_flag)
　　- 1: 登園予定
　　- 0: 今日はお休み
- バス乗車時刻
  - 登園(attend_departure_at)
  - 下園(return_departure_at)
- 登園したかどうかのフラグ(登園下園モードの切り替え時に行う)(attended_flag)
  - 0: まだ登園してない
  - 1: 登園した
  - -1: 下園済またはそもそも今日はおやすみ
- バス降車時刻
  - 登園(attend_arrival_at)
  - 下園(return_arrival_at)

## スケジューリング
### やること
- 疑似データ送信環境の確立 [Succeed!!]
---
- プロジェクトのひな形作成 [In Progress...]
- 通知送信テスト [In Progress...]

**11/27~28**を大体の目途とする

---
- DBテーブルの制定
- DB操作コード作成

**11/28以降~30**

---

**11/30までに↑まで終わらせる（各作業並行して進行中）**

---
- githubで共有

---
- jQueryを使ったスタイル変更コード作成
- ひな形HTML作成

**12/1~12月上旬中？**

---
- デザインの制定

---

**疑似データ送信環境の確立～通知送信テスト**
**デザイン第一号の作成（lill）**
↑↑↑この範囲が11/30までにできるようにしたい！（lillさん確認済み）

## いんふら
https://user.lolipop.jp/

## MQTTメッセージ
乗車時： 
``{"listName":"JohoTaro","position":"up"}``
降車時：
``{"listName":"JohoTaro","position":"down"}``

## 全体の流れ
### 保護者
- 会員登録
  - 幼稚園からIDか何かをもらい、それを使ってログインを行う
- ログイン
  - 会員登録に同じ
- メインメニュー
  - ボタンだけが縦一列に並んだ状態のくっそ淡泊な状態。飾りなど必要ない。メニュー項目候補は以下の通り
    - 通知方法
    - 出欠入力
    - アカウント情報
    - ログアウト
- 通知方法の設定
  - メインメニューのどっかに通知方法の変更ボタンがあるのでそこをクリック
  - LINEの場合
    - QRコードが表示されているのでそれを読み取って友達登録するだけでDBにも反映される（ようにする予定）
  - メールの場合
    - メアド入力して送信ボタンを押すと空メールが送られる。
    - 返信としてワンタイムパスコードが表示されるのでそれを入れる
  - SMSの場合
    - 番号入力して「認証コードを受け取る」ボタンをクリックして送られた六桁の数字を入力することで登録完了
  - 一度設定したことのある通知方法に変更する場合、設定したことのあるアカウントが表示され、変更がなければ「OK」をクリックして簡単に変更可能（にしたいなあ）
- 出欠入力
  - 一日の始めに全員の園児の今日の出欠は全員出席に設定されている
  - 欠席する場合は今日は欠席ボタンを押すだけ。理由を適当にテキストエリアに入力して送信ボタンを押すだけ。簡単でしょう？
  - 出席の場合は何もしない
### 教員
- ID発行
  - 新しく入園する幼稚園児の情報を一括入力することで一気に全員分のユーザーIDとパスコードを生成してDBに保管、カードIDとの紐づけもここで行う。保護者に渡す用のIDも紙に印刷がボタンワンクリックで出来ちゃうから保護者にも簡単に渡せちゃう（・・・ようにできるといいなぁ）
- ログイン
  - 幼稚園IDを使ってログイン可能
  - 教員用ページは幼稚園ごとの共有IDでログインを行う
- 出欠確認
  - 出欠はバスごとの表で確認可能
  - バスが選択されていない状態だと「グループが選択されていません」と表示される。右上のハンバーガーメニューをクリックするとバスを選択可能
- バスの中
  - 乗降中は常に画面を表示させておく必要がある（特に降車中は一度画面を閉じると画面の降車モードがなかったことになってしまう。製品化する過程ではこれは絶対に解決したい）
- 出欠管理
  - 上記の場合だとバスに乗る時間の前に出欠の連絡を保護者に強いることになるため（まぁバスに乗る前提の園児はそうしないといろいろ困るのだが）万が一に備え（例えば保護者から直々に欠席の連絡が来た時など）教員も出欠の入力をできるようにする必要があるのではないか？
  - バスごとの表の園児の出欠列をクリックすると出欠変更メニューのモーダルが表示され、欠席と出席を切り替えられる。。。ようにできるといいなぁ


https://qiita.com/uneyamauneko/items/4e9e8d4b18eff3c950e9



