はじめに
- 以前AWS Lambdaを用いて作成したSlack Botについてまとめる機会があり、せっかくなので備忘録含めQiitaにも投稿しようと思いました。
- 作成当時の記憶はだいぶ薄れておりますが、覚えている範囲で引っかかったところなどどなたかの参考になれば幸いです。
※ 本記事のbotを作成したのは約2年前なので、現在の仕様と乖離する部分もありますがご了承ください。
※ 作成したbotそのもののソースは以下となります。
https://github.com/spinrock/delayTrainBot
そもそもSlack bot作成に至った経緯
- 筆者の家は、複数路線の駅に挟まれた立地にあり、駅から別の駅への移動が大変でした。
- 駅に到着後に遅延に気付いても別の路線に乗る(駅を移動する)、という選択肢をとることが難しい状況でした。
- 起床時に自分で路線情報を確認できればいいのだが、朝の時間帯はバタバタしていることが多く、見逃す日も多分にありました。
- 普段から確認するツール(LINEやSlack)に通知が来て教えてくれると便利なのにと感じておりました。
- Lambda(を含むFaaSやSaaS)で何かを作ることに純粋に興味があり、この際なので自作してみようと思いました。
- (当時の職業柄コーディングをしないため、久々にプログラミングしたくなったのも理由の一つです。)
やりたいこと
- 朝起きてから電車に乗る手前くらいの間で、電車が遅延したら自動で通知して欲しい。
- 月~金の朝7~9時くらいの間
- 通知先はSlackの指定したチャネル
構成図と処理イメージ
- draw.io (https://www.draw.io/) で書いてみました。
- 使っていた言語はPython3.x系です。

利用した技術の簡単なご紹介
- AWS Lambda : イベント駆動(何か(=イベント)をきっかけにして動く)のアプリケーションを実行できるAWSのサービス
- Amazon CloudWatch : リソースとアプリケーションの監視/管理サービス
- 今回はその中のCloudWatch Event(特定のルールを基にターゲット(Lambdaなど)へイベントを振り分ける機能)を利用しました。
- https://aws.amazon.com/jp/cloudwatch/
- スクレイピング : Webサイトから取得した情報からHTMLタグを利用して情報を抽出する技術
- 今回はPythonのスクレイピングライブラリの一つである「Beautiul Soup」を利用しました。
- https://www.crummy.com/software/BeautifulSoup/bs4/doc/
- Slack Incoming Webhooks : HTTPリクエストを利用して特定のチャネルに指定したメッセージを投稿するアドオン(のようなもの)
- 作成していた当時と仕様が変わり、作成したSlack アプリケーションに対してIncoming Webhookを付与できるようです。
- https://api.slack.com/messaging/webhooks
できたもの(Slack 画面)
実際にしばらく使ってみて思ったこと
- 最初困っていたことは無事解決できました。
- 朝通知が来ることで遅延していない路線(駅)を選べるようになりました。
- 遅延が解消した時に通知してくれるといいな、と思いはじめました。
- 現状は通知が来なくなることで遅延が解消したことを判断する仕様となっています。
- これ以外にもいろいろBot化させたら便利だろうなと感じました。
- 買い物メモとか、今日の予定(荷物の到着など)とか...
(最後に)引っかかったことなどなど
- 通知のタイミングがおかしいなと思ったら、時刻指定がUTCでした。
- 日本時間に直すために+9:00する必要がありました。
- 情報取得&スクレイピング処理に時間がかかっていた結果、Lambdaがタイムアウトしていました。
- Lambdaのデフォルトタイムアウトが3秒なので、必要に応じて変更する必要がありそうです。(後からでもGUIで変更可能でした。)