はじめに
豊田工業高等専門学校の加藤愛斗です。私は今年度の学校祭(こうよう祭)において、副実行委員長を務めさせていただきました。
こうよう祭は学生主体で運営されています。運営の最上層組織である幹部は、実行委員長により任命されます。(実行委員長は立候補者の中から、前年度の幹部により選ばれます。)
今年度の実行委員長は私の友人でした。彼は、私のプログラミングなどのスキルを理解してくれており、かつ、彼の作りたいこうよう祭のイメージの1つにIT化を進めるというものがあったため、私に副実行委員長のオファーを寄せてくれました。
私は、自分のモットーの1つに、「あるチャンスは掴む」というものがあるため、オファーをありがたく受け入れました。
なぜナビシステムを作成したか
前年度のこうよう祭において、当時の実行委員長より、各展示の待ち時間が分かるシステムの作成をお願いされて作成してました。
今年は、実行委員長のIT化を進めるという目標も相まって、前年度学んだ反省を存分に生かして、学校祭のナビシステムを作成することにしました。
ナビシステムの機能
オンラインMAP
本校は大変広く初見では迷うことが多いです。紙のMAPも配布しているのですが、数に限りがあるためオンラインMAPを開発しました。展示の位置と内容が簡単に把握できます。
展示の待ち時間
来場者は、コロナ禍開催であるため各展示の混雑状況が知りたかったり、単純に待ち時間が知りたいという要望がありました。そこで、展示の待ち時間を表示する機能を開発し、上記のMAPと同じ画面で確認できるようにしました。
BINGO景品
こうよう祭は、潤沢な予算が与えられ、その使い道も我々に委ねられています。そのため、BINGO景品も大変豪華です。しかしながら昨年までは、どんな景品があるのかはBINGOした人しか分からないような運営方式でした(パンフレット等に載せていない)。せっかく、予算を使って豪華景品を用意しているのにもったいないと感じたため、BINGO景品並びに残数が分かる機能を開発しました。
技術
フロントエンド
友人が担当してくれた部分であるため割愛します。
バックエンド
FastAPI x Djangoで実装されています。
https://github.com/kathmandu777/koyofes-navi-backend
※こうよう祭の他の仕事が忙しく、ものすごい短時間で書き上げたため、あまりきれいなコードではありません。
工夫したポイントは、adminの一覧ページから各景品の残数を変更出来るようにしたことです。(写真右側のPlus, Minusというボタン)
私はdjango adminがものすごく好きなため、わざわざ FastAPI x Djangoという組み合わせでサーバーを実装しています。通常であれば、オブジェクトのアップデートをする際は、個別ページに移動してから修正する必要があるのですが、手間であるため、一覧ページから直接修正できるようにしました。
インフラ
知見がなく時間もなかったため、AWSのEC2をサーバーにしました。
運用
事前にlocust
を用いて負荷試験などを行っていましたが、想定していたアクセス数よりも多くのアクセスがあったため、かなりサーバーダウンが発生しました。
そのため二日目は、サーバーをスケールアップして対応しました。
感想
インフラの知見が少なく苦労が多かったため、これからゆっくりと勉強していきたいです。色んな人にしっかりと使ってもらうサービスを作成する機会はあまりないため、よい機会となりました。
教訓
仕様はしっかり把握しよう
BINGO景品について、同じものが複数あると思っていましたが、1種類1つでした。そのため、残数というフィールドは必要なく、残っているか残っていないかのみ表示するほうがスマートでした。
AWSのリソース全部消せよー
かなり高いインスタンスタイプを指定していたため、本番終了後すぐにEC2は停止したのですが、ボリュームを消していなかったため、しばらくの間課金されてしまっていました。
まとめ
限られた時間・リソースでのPJ開発であったため、かなり大変でしたが、何とか形にすることが出来てよかったです。また、今回の経験を生かして、もし来年度の実行委員長にお願いされれば、より良いシステムを作成できるように頑張りたいと思います。