はじめに
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の作成方法はこちらに記載しています。
-
LINE Botで結婚式をペーパーレス化してみた
※余裕があればLineBot作成だけまとめた記事起こして置き換えます。
Vapor
Vaporの実行環境作成はこちらに記載しています。
リッチメニュー
今回は実行トリガーにリッチメニューを使用します。
機能として投票を行うだけなので、メニュー全画面で1ボタンとし、
ボタンに設定した文言を受け取ったら、候補者一覧をリプライするようにしました。
Flex Message
今回候補者は30名前後となる為、候補者一覧はFlex Messageを使用して投票ボタンも兼ねる形にしました。
他メッセージタイプと違って扱える配列の最大数があり、一度のリプライで表示したい情報が制限されますが、
Flex MessageはCSS Flexible Boxを使ってメッセージのレイアウトと挙動を定義でき、
大量のコンテンツを送りたい場合に非常に役立ちます。
また、今回は投票という性質上そのまま投票トリガーのボタンとして扱うのに適していました。

公式にシミュレータもあるので、初めて触ってもある程度のものは難なく作成できました。
Flex Message Simulator
実行結果
投票集計
今回はGoogle Apps Scriptを使用し、スプレッドシートに記録する形としました。
LineId(A列)と投票した候補者番号(B列)を記録します。
再度別な候補者を選んだ場合は、LineIdをキーに検索し候補者番号を上書き、
初投票なら最後尾に行を追加するようにしています。
投票回数をカウントしているのは無闇に連打する輩が現れないかチェックする為念のため・・・
私がLineIdでユーザプロフィールを取得しなければ(一応)匿名投票となります。
おまけ機能
Linebotを友達追加さえして貰えれば手間なく投票できるのですが、
友達追加することなくスルーする人がそこそこいるだろうなと予想し、
とりあえず追加してみようと気が起きるおまけ機能を実装しました。
PokeAPIを使用して図鑑番号に対応するポケモンの情報を返すようにしました。
金曜ロードSHOW!で名探偵ピカチュウが終わりかけを目掛けてLinebotのお知らせを流したところ、たくさん遊ばれて狙い通りでした。
おわりに
新年会でそろそろ幹事代わってくれる人いませんかーと呼び掛けても誰もいない中(当たり前だけども)
Linebotという方法で投票者はほんの数秒で終わる方法での匿名投票だったので、
特に文句も出ず幹事交代出来たので今年からは気兼ねなく飲み会だけ参加できそうです。