私の所属しているサークルで定期的に行われているサークル内の番付けです。
「〇〇な人は?」というような質問に何問か答えて、それを集計してランキングにします。
こちらを見ていただくとイメージがしやすいかと思います。
今回私はLaravel×LINE Messaging APIであらんきんぐを作成しました。
例年、あらんきんぐは紙で回答を集め、集計していました。
しかし去年から、コロナの影響で紙での集計は難しいとのことで、Googleのアンケートフォームで集計を行うようになりました。
回答の集計自体は自動化できて良かったのですが、2つ問題点がありました。
- 大量の質問を一気に回答しなくてはいけないということ
- 1人で複数回答ができてしまうこと
それらの問題点を解決するためにLINEbotでの実装をすることを決めました。
ここから私が実際に作ったLINEbotの紹介をします。「LINE上で完結する」ことを目標に作成しました。
実際に「投票」、「回答の修正」、「結果の確認」まで全てLINE上でできるようになっています。
ランキングの結果画面になります。
リロードするたびに表示されるポケモンが変わる仕様になっています。
レスポンシブWebデザインにも対応しています。以下スマートフォンでの表示になります。
回答状況確認画面になります。
現在のサークル全体の回答状況が可視化できます。このページを使って回答の催促を行いました。
下記ボタンもしくはQRコードからLINEbotを追加します。
追加して「使い方」とLINEを送ると使い方のチュートリアルが見られます。
「エラー」と送信するとエラーが発生したときのテストができます。
LINEのAPIに関する記述をController内で全て書いてしまうと、可読性が下がり、オブジェクト指向的にも良くないということでコードを分離しました。APIに関する記述はApp\Library\LineMessagingApi.phpで記載するようにしています。
回答をする際、4色に分かれているのがわかると思います。これはサークル内のグループで色分けをしており、新入生でも誰がどのグループなのか分かるデザインになっています。
既定の日時になるまでは「結果を見る」ボタンを押しても「集計中です」と返信が来るようになっており、仮に結果画面のurlにアクセスしたとしても、結果が見れないような仕様にしています。
サークルの代表に「回答状況がわかる画面が欲しい」と言われたので作りました。回答管理画面にアクセスすると現在の回答状況が確認できます。
LINE Messaging APIではレスポンスに文字列しか指定できません。keyとvalueの形で持つことができないので、私は誰がどんなリクエストを送ってきたのかを全て数字で管理しました。
作り終えてからJson形式でレスポンスを管理すればもっと可読性が上がったと反省しています。
リレーションの主キーがid以外になっていたり、必要なカラムが足りなかったりとテーブル設計が今見ると残念なことになっています笑。
- Laravel 8.61.0
- Bootstrap 5.0
- LINE Messaging API
- MySQL
- Git
- Poke API