先日、X-HACK勉強会でLINEBotの作り方を学びました。
勉強会ではおうむ返しをしてくれるBotを作ったのですが、自分がほしいBotを作ってみよう!と思いアレンジして作ってみました。
電車発車時刻を送ったら準備開始時間と家を出る時間を教えてくれるLINEBot
家から駅が近い・電車が数分おきに来る都会の人には完全不要Botです。
機能
- 電車発車時刻を送ると準備開始時間・家を出る時間を返信してくれる
- 準備時間を変更する(デフォルトは30分)
- 家から駅までの時間を変更する(デフォルトは15分)
- 現在の設定されている準備時間・家から駅までの時間を確認する
作ろうと思ったきっかけ
数ヶ月前に引っ越しをして新しい土地の最寄り駅では、時間によっては1本逃すと次の電車まで15~20分待つことがあります。準備時間と家を出る時間を絶対にミスってはいけません。
いつも電車の時間を調べて準備時間、家を出る時間を計算していたのですが、これが地味にめんどくさい。そして時々計算を間違えて駅まで走ることもありました。毎回自動で計算して教えてくれる何かが…欲しい…!と思い作りました。
使用技術
- AWS Lambda / DynamoDB
- Severless
- Node.js
- LINE Messaging API
全体構成
ざっくり使用サービスの説明
Lambdaとは
Lambdaはサーバレスを実現するためのサービスです。
公式サイトより
「AWS Lambdaを使用すれば、サーバのプロビジョニングや管理なしでコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。」
簡単に言うと
プログラムを実行するためのサーバを用意する必要がないよ、Lambdaを動かした時だけにお金がかかるよ。
ということです。
本来AWS上でWEBアプリケーションを動かしたいと思ったときにはEC2など仮想サーバを立てる必要がありますが、Lambdaの場合は必要ないということになります。実行したいプログラムのことだけ考えれば良いのです。
DynamoDBとは
DynamoDBはNoSQL(Not Only SQL)データベースサービスです。
公式サイトより
Amazon DynamoDB は、どのような規模でも信頼性が高いパフォーマンスを維持できる、非リレーショナルデータベースです。 完全マネージド型、マルチリージョン、マルチマスターのデータベースで、レイテンシーを 10 ミリ秒未満に維持でき、 組み込みのセキュリティ、バックアップと復元、インメモリキャッシュを利用できます。
簡単に言うと
完全マネージドのNoSQLデータベースで、OSやミドルウェアのことを気にしなくて良いよ。システムが停止することなく稼働し続ける能力を考慮したインフラの構築、パッチの適用等はAmazonがやるからきにしないで。高速で予測可能なパフォーマンスとシームレスな拡張性を提供するよ。
Lambdaとも相性が良くAPIGateway+Lambdaと合わせて利用されることが多いとのことです。
今回DynamoDBを使用するにあって以下の設計にしました。
user_id
need_time (準備時間)
leave_time (駅までの時間)
status (none/leave/need)
LINEBotのやりとりの流れ
-
LINEでメッセージを送る
-
DynamoDBにuse_idがあるかどうかを確認
ある→ 3.statusの確認
ない→user_id、デフォルトで準備時間30分、家から駅までの時間15分を新規登録
-
時間変更中かどうか現在のstatusの確認
-
送られたメッセージの内容を確認
-
時間だったら計算して返信
準備時間・駅までの時間を更新
それ以外だとテンプレを返信
使い方
電車発車時刻を送信
時間の変更
「準備時間の変更」「駅までの時間を変更」ボタンを押して、任意の時間を送信して変更する
「確認」と送信
時間や時間変更、確認以外のメッセージを送る
おわり
一通りやりたい機能はできましたが、さらに準備時間や家を出る時間になったらリマインドしてくれる機能も追加したいです。
JavaScriptをもっと勉強したい!実務で使えるレベルになりたい!という方はゲームを作りながら学ぶWeb開発塾がおすすめです!