
Djangoで出欠管理システムを作る Part①
こんにちは、塗師@GVです。
唐突な話題なんですが、僕はひょんなことからフットサルチームの運営を1年ほどやっています。
会社とは全く関係ないプライベートでやっているものなのですが、これがとにかく面倒くさい。その中でも折り紙付きで手間なのが…
出欠管理ってめんどくさい
こういうイベントの催しをする上で避けて通れないのが出欠管理です。昨今ではフリーで使える様々な出欠管理アプリがあって、飲み会やBBQ程度ならこれらを活用することで簡単に出欠管理を行うことができます。
こんなのとか
こんなの
事実、僕も毎週行うフットサルの出欠にLINEスケジュールを使っています。こういったアプリの存在自体はとてもありがたいものです。
が
それでも毎週となると、とてもとてもとてもとても、超が10個付くくらい面倒くさい……
しかも、これらのフリーアプリには実運用上物足りない部分も数多くあります。
例えば、履歴管理。過去の回答履歴を残して検索するようなデータベース的機能があるわけではないので、出席率に基づくメンバー整理などをする際には不便で仕方ありません。
LINEスケジュールだと募集期限を決められないのも痛いですね。募集を終えた後から予定変更され放題です。「やっぱり行けます」はまだしも、「やっぱり行けません」を連絡なしにサイレントでやられたりします。
そんな微妙に不便なアプリを騙し騙し使いながら、実際に今行っている出欠管理作業は下図のような感じです。
これを毎週やってます。存外しんどいです。
図の中にあるタスクだけではなく、実際には募集に対して期限までに返答しないスットコドッコイに対するリマインドメッセージを送る作業とかもあります。
下の方にある「出席・欠席・未回答を集計」に至っては、LINEスケジュールの〇×△を目視で確認しながらスプレッドシートに書き写す作業です。アナログすぎてゾクゾクしますね
一応これらの負荷を分散するためにチームの運営メンバーは5人いるのですが、上記一連のタスクって微妙に分業しづらくて、結果として全て1人で行う状況に陥っています。
システム化する
面倒くさい作業や手間の掛かる仕事を自動化してこそITの本質、ということで、この面倒な出欠管理を楽にするシステムを作ります。
自動化する対象は
・開催情報の説明と募集開始お知らせの送信
・リマインドメッセージの送信
・開催可否の決定とお知らせの送信
・メンバー名簿の管理
・出欠の集計
・整理対象メンバーの抽出
この辺かなぁと。出欠連絡に関しては、日時や場所の開催情報を入力した後は何もしなくていい状況が作れたら理想です。
開催情報や出欠回答は全てデータベースに保管し、人数集計や参加者の確認・出席率が低いメンバーの抽出も自動で行えるようにしましょう。もっというと退会勧告メッセージも自動送信できるようにしたい……
メンバーに関してもデータベース上でIDを付けて管理します。これまで同じ苗字のメンバーがいるとややこしくて仕方なかったので(田中(仮称)が3人います)、IDに氏名とLINE名を紐づけて一元管理できるようにしましょう。
どうやって作る?
サクッと簡単に作るならWordPressでプラグインをポチポチ追加していくのもアリなのですが、今回はwebアプリを設計・開発して、インフラを整えて実装・運用するまでを全て1人で行ってみようという勉強の側面も大いにあります(むしろそっちがメイン)
そのため、アプリ部分はスクラッチ開発をしようということで、pythonのフレームワークであるDjangoを使用します。
システムアーキテクチャの設計は以下のような感じでザックリ作成しました
大まかに説明すると、
イベント入力画面
①イベント入力画面に開催情報を入力
②Eventテーブルにレコード登録
③Attendanceテーブルにも全員分の未回答状態のレコードを登録
④募集が始まった旨をURLと共にLINEへ送信
⑤締切になったら人数を見て開催するorしない旨のメッセージをLINEへ送信
出欠回答画面
①メンバーがLINEメッセージについているURLからアクセス
②ログインを行う(ここをLINE認証にするか考え中)
③未回答のイベントに対して回答をする
④Attendanceテーブルのレコードを更新
⑤締切になると回答欄は選択・変更不可になる
出欠確認画面
①当日参加する旨の回答をしたメンバー一覧を表示
②運営メンバーが実際の出席者をチェック
③Attendanceテーブルのレコードを更新
メンバー管理
①検索機能をつけ、特定条件のメンバーを抽出できるようにする
②該当メンバーに自動で退会確認メッセージを送る…?(できるの?)
そんな感じです。
いざ開発したら思ったより工数かかりそうでした、なんて理由で変更する可能性もありますが、現時点では上記のようなシステムを作りたいな~と考えています。
データベースのERはこんな感じ
極々シンプルで、出欠確認テーブルであるAttendanceテーブルをFactとして、EventテーブルとUserテーブルを外部キーで繋げた構造を取ります。
これらのテーブルに画面からの入力に合わせてレコードの登録・更新を行ったり、検索に対して適切にJoin、Select、whereを適用させていきます。
SQLなら簡単なんですが、Djangoでのデータベース操作であるQuerySetには全く慣れていないので上手くできるかわからない部分も多いです……
まあなんとかなる…かな…?(根拠なし)
最悪pandas入れてDataFrameで処理します。それでもダメならrawメソッドでSQLを直接ぶち込みましょう。
次回の予定
そんな感じでこの出欠管理システム開発はシリーズ化して続けていこうと考えています。
次の記事ではDjangoでのデータベースモデル作成と、システム機能の出発点となるイベント管理画面の作成をしていきたいと思います。
Djangoの基本的な機能について知りたい方は
公式ドキュメント
入門用書籍
Django Girls
この辺りを見ればなんとなくわかります。
それでは
グランバレイに興味がある方はこちら
この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。