2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linebotで投票システム作ってみた

Posted at

はじめに

8年ほど使用した自作PCが壊れたので、買い替えマシンを検討した結果MacBookがコスパ良さそうということでMacを購入。
折角なのでSwift勉強してみようかなと思ったけれどもバックグラウンドおじさんの自分にはいきなりアプリ開発は難易度が高い気がしたので知見のあるLINE Botと組み合わせて言語学習を行おうと思い、
iOSアプリ開発言語のSwiftでサーバーサイド処理を行えるフレームワーク"vapor"を使用してLine Botを作成してみました。

題材

高校の部活のOB会の幹事をやっているが、そろそろ代替わりしたいので
新しい幹事を決める投票Botを作成しました。

開発環境

ver
OS macOS Catalina
Xcode 11.3
Swift 5.1.3
vapor 3.0.0

LineBot作成

Linebotの作成方法はこちらに記載しています。

Vapor

Vaporの実行環境作成はこちらに記載しています。

リッチメニュー

今回は実行トリガーにリッチメニューを使用します。
機能として投票を行うだけなので、メニュー全画面で1ボタンとし、
ボタンに設定した文言を受け取ったら、候補者一覧をリプライするようにしました。
スクリーンショット 2020-06-17 0.19.19.png

Flex Message

今回候補者は30名前後となる為、候補者一覧はFlex Messageを使用して投票ボタンも兼ねる形にしました。
他メッセージタイプと違って扱える配列の最大数があり、一度のリプライで表示したい情報が制限されますが、
Flex MessageはCSS Flexible Boxを使ってメッセージのレイアウトと挙動を定義でき、
大量のコンテンツを送りたい場合に非常に役立ちます。
また、今回は投票という性質上そのまま投票トリガーのボタンとして扱うのに適していました。

overviewSample.772a618f.png

公式にシミュレータもあるので、初めて触ってもある程度のものは難なく作成できました。
Flex Message Simulator

実行結果

s8lo0-49ill.gif

投票集計

今回はGoogle Apps Scriptを使用し、スプレッドシートに記録する形としました。
LineId(A列)と投票した候補者番号(B列)を記録します。
再度別な候補者を選んだ場合は、LineIdをキーに検索し候補者番号を上書き、
初投票なら最後尾に行を追加するようにしています。
投票回数をカウントしているのは無闇に連打する輩が現れないかチェックする為念のため・・・
私がLineIdでユーザプロフィールを取得しなければ(一応)匿名投票となります。
スクリーンショット 2020-06-17 0.41.57.png

おまけ機能

Linebotを友達追加さえして貰えれば手間なく投票できるのですが、
友達追加することなくスルーする人がそこそこいるだろうなと予想し、
とりあえず追加してみようと気が起きるおまけ機能を実装しました。
スクリーンショット 2020-06-17 0.55.28.png
PokeAPIを使用して図鑑番号に対応するポケモンの情報を返すようにしました。
金曜ロードSHOW!で名探偵ピカチュウが終わりかけを目掛けてLinebotのお知らせを流したところ、たくさん遊ばれて狙い通りでした。

おわりに

新年会でそろそろ幹事代わってくれる人いませんかーと呼び掛けても誰もいない中(当たり前だけども)
Linebotという方法で投票者はほんの数秒で終わる方法での匿名投票だったので、
特に文句も出ず幹事交代出来たので今年からは気兼ねなく飲み会だけ参加できそうです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?