Work
School Project/3 minutes read

サークル向けシフト管理サイト

大学サークルのシフト管理サイト。

作ったもの

サークルのリーダーから依頼をうけ、大学のサークルで使うシフト管理サイトを作りました。メンバーはスマホからシフト回答、公開済みシフトの確認、出欠記録、代打募集を行えます。運営側はメンバーの承認、曜日班の管理、2週間ごとのシフト生成と公開、出欠状況の確認をまとめて扱えるようにしました。

技術構成はNuxt 4とVuetify 4、Cloudflare Workers、Cloudflare D1、Drizzle ORMです。LINE LoginとLINE Messaging APIも入れていて、シフト調査の開始、公開、締切前のリマインド、代打募集や成立の通知をLINEで送れるようにしています。

シフトのサイクル

このサイトでは、シフトを2週間単位のサイクルとして扱っています。調査期間が始まると、メンバーは自分の曜日班に該当する日を中心に参加可否を回答します。回答締切後、運営者がシフトを生成し、必要に応じて手で調整してから公開します。

以前はLINEのグループチャットで手動で行っていたシフト管理をそのまま移行する必要があったので、複雑なシフトサイクルのルールや、シフト交代の仕組みなど、計画段階から困難なプロジェクトでした。

メンバー側

メンバー側のページでは、短い時間で操作できることを優先しました。ウェブサイトにアクセスすることに対して心理的障壁があれば、それが直接サークル活動への参加障壁になると考えたので、開発にあたっては快適さを非常に重視しました。シフト回答画面では14日分の日付を並べ、参加可能、参加不可、未回答をボタンで切り替えられるようにしています。

公開後のシフト画面では、自分が入っている日を確認するだけでなく、代打募集と追加参加も同じ画面で処理できます。自分のシフトに行けなくなったら代打を募集し、別のメンバーは募集中の代打を受けられます。成立したら元の担当者にLINE通知が飛びます。LINEを通じてユーザーにアクションを促すことで、心理的障壁を減らすねらいがあります。

運営側

運営側のページでは、メンバー承認、役割変更、ユーザーデータの修正、シフト生成、シフト参加者の手動調整が可能です。登録直後のユーザーをそのままログイン可能状態にせず、運営者が承認してから利用できる仕組みとしました。これはセミクローズドなコミュニティにおいて効果的であるということを過去の経験から学んでいます。

LINE通知とCloudflare

通知はLINE Messaging APIで実装しました。シフト公開時には、各メンバーに自分の担当日を入れたメッセージを送ります。締切前のリマインドでは、未回答のメンバーだけに送るようにしています。全員に同じ文面を送る仕様では、通知を切られて終わるので、必要な人にだけ送る方式にしています。

インフラはCloudflare WorkersとD1を使っています。NuxtをCloudflare向けにビルドし、D1にはDrizzle ORMからアクセスします。2週間ごとのサイクル更新はNitro.jsのscheduled taskで動かし、調査開始、締切、公開、サイクル作成がサーバー側で自動で進むようにしました。

所感

Nuxt、Vuetify、Cloudflare Workers、D1という私の慣れ親しんだ技術スタックを採用し、また生成AIを活用したこともあり、開発自体は苦ではありませんでした。

一方で、サークルの運用ルールをロジック化して自動化できる状態にするのは困難でした。未回答、追加参加、代打、休会や復帰、LINE連携の有無など、現実世界の複数のステートをロジックで管理できる仕組みを構築することに難しさを感じました。