38
38

More than 3 years have passed since last update.

Node.js+AWS Lambda+DynamoDBで作るLINEBot

Last updated at Posted at 2021-02-10

先日、X-HACK勉強会でLINEBotの作り方を学びました。

勉強会ではおうむ返しをしてくれるBotを作ったのですが、自分がほしいBotを作ってみよう!と思いアレンジして作ってみました。

電車発車時刻を送ったら準備開始時間と家を出る時間を教えてくれるLINEBot

家から駅が近い・電車が数分おきに来る都会の人には完全不要Botです。

IMG_CFDC000E4F39-1.jpeg

機能

  • 電車発車時刻を送ると準備開始時間・家を出る時間を返信してくれる
  • 準備時間を変更する(デフォルトは30分)
  • 家から駅までの時間を変更する(デフォルトは15分)
  • 現在の設定されている準備時間・家から駅までの時間を確認する

作ろうと思ったきっかけ

数ヶ月前に引っ越しをして新しい土地の最寄り駅では、時間によっては1本逃すと次の電車まで15~20分待つことがあります。準備時間と家を出る時間を絶対にミスってはいけません。

いつも電車の時間を調べて準備時間、家を出る時間を計算していたのですが、これが地味にめんどくさい。そして時々計算を間違えて駅まで走ることもありました。毎回自動で計算して教えてくれる何かが…欲しい…!と思い作りました。

使用技術

  • AWS Lambda / DynamoDB
  • Severless
  • Node.js
  • LINE Messaging API

全体構成

Lambda.png

ざっくり使用サービスの説明

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のやりとりの流れ

  1. LINEでメッセージを送る
  2. DynamoDBにuse_idがあるかどうかを確認

    ある→ 3.statusの確認

    ない→user_id、デフォルトで準備時間30分、家から駅までの時間15分を新規登録

  3. 時間変更中かどうか現在のstatusの確認

  4. 送られたメッセージの内容を確認

  5. 時間だったら計算して返信

    準備時間・駅までの時間を更新

    それ以外だとテンプレを返信

使い方

電車発車時刻を送信

準備開始時間と出発時間を計算して送ってくれる
IMG_F240A8A51576-1.jpeg

時間の変更

「準備時間の変更」「駅までの時間を変更」ボタンを押して、任意の時間を送信して変更する
IMG_266EF169F278-1.jpeg

「確認」と送信

現在設定されている準備時間と駅までの時間を送ってくれる
IMG_08E25CFE04F5-1.jpeg

時間や時間変更、確認以外のメッセージを送る

送られてきたメッセージをおうむ返し&使い方の説明
IMG_7B033232D018-1.jpeg

おわり

一通りやりたい機能はできましたが、さらに準備時間や家を出る時間になったらリマインドしてくれる機能も追加したいです。

JavaScriptをもっと勉強したい!実務で使えるレベルになりたい!という方はゲームを作りながら学ぶWeb開発塾がおすすめです!

38
38
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
38
38