推しアイデア
ロールごとに比率を自由に変えられる点.
ロールごとに比率を自由に変えられる点.
サークルの合宿など大人数のイベントの時に,運転者補正を考えるのがめんどくさいと感じていたから.
ロールを追加して管理しやすくしたところ.
複数人でのイベントでは、「誰が・何に・いくら払ったか」が複雑になりやすく、さらに「運転手は少なめ」「先輩は多めに払う」といった傾斜配分があると、手計算での清算が非常に困難になるという課題がありました。そこで、日々の立て替え記録を集約し、役職や学年などの「比率」を考慮した上で、最後に「誰が誰にいくら払えばよいか」を自動で最適化して計算する仕組みを実装しました。
イベントごとのグループ作成とメンバー登録
メンバーへのロール(運転手、幹事、1年、3年など)の付与
立て替え記録の追加(支払った人、内容、金額、対象者の選択)
ロール(比率)に応じた各自の負担額の自動計算
最終清算結果の算出(お金の移動回数を最小限に抑える送金指示)
清算ロジックにおいて、全員の「立て替えた額」と「本来払うべき額」の差額(残高)を計算し、「多く払いすぎた人」と「払いが足りない人」をマッチングして効率よく送金指示を出すアルゴリズムを裏側で実装しました。これにより、AさんからBさん、BさんからCさんといった無駄なお金のやり取りを省くことができます。
また、単純な「人数割り」ではなく、メンバーごとに「運転手」や「3年」といったロールを持たせることで、実際の人間関係や状況に合わせた柔軟で公平な傾斜配分ができるようにデータベースとロジックを設計しました。画面UIも、清算結果を「〇〇 ➔ 〇〇へ ¥〇〇」と直感的に分かりやすく表示するよう工夫しています。
フロントエンド:HTML / CSS / EJS
バックエンド:TypeScript / Express
データベース:PostgreSQL
ORM:Prisma
ソースコード管理:Git / GitHub
デプロイ:Render
GitHubでソースコードを管理し、Render上にWebサービスとPostgreSQLデータベースをデプロイすることで、実際のイベント時に参加者全員がスマートフォンなどのブラウザからリアルタイムにアクセスして利用できる形で公開しました。