Slackで筋トレを続ける

スポーン
Dec 18, 2018 · 4 min read

この記事はfreee 19新卒 Advent Calendar 2018の17日目の記事です。

緑髪のスポーンです。

東京に来て大学に入ってからというもの、二郎を嗜み毎週のようにラーメンを食べ、飲み会で食べていたら10kg以上太りました。

冬なので運動するのも億劫ですが、せめても筋トレをと思い筋トレを続けていけるSlack botを開発して導入していきます。

Slack botといえば一昔前はhubotを使って開発するのがデファクトでしたが、今回はサーバーレスアーキテクチャであるAWS Lamdbaを使用しています。

LamdbaはAWSコンソールから記述したり、Cloud9というWeb IDEを使っても開発ができます。しかし、Serverlessフレームワークを使うことでより抽象度をあげて開発することが可能です。(名前が衝突していてクソ)


npm install serverless -gserverless login

まず皆大好きnpmでインストールし、serverlessにログインします。

sls create -t aws-python3

serverless cliコマンドはslsと省略できます。今回はPython3で書きました。

ドキュメントを見ながらIAMのクレデンシャルを取得し、

serverless config credentials --provider aws --key AKIAIOSFODNN7EXAMPLE --secret wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

このようにconfigを設定してあげましょう。

システム概要

目標とするシステムはこの図となります。

褒められないと人は伸びないらしいのでガンガン褒めてもらって圧倒的な筋肉を手に入れましょう。

functions:
training:
handler: handler.training_menu
environment:
token: '自分のSlackトークン
channel: '#training'
events:
- schedule: cron(0 19 * * ? *)

serverless.ymlにLamdbaの関数ごとの設定を書いていきます。

eventsのscheduleにcronを設定してあげることで定期実行が可能です。(この設定だと毎日10時に通知がくる)

単純なメッセージを送るだけの関数を用意すると、serverlessのハンドラーから先程cronで設定したスケジュールに叩かれて実行されます。

cheer:
handler: cheer.cheer
events:
- http:
path: /cheer
method: post

次に褒める部分ですが、SlackのOutgoing Hookを使って「やった」と発言されたら発信されるPOSTを受け取って褒める部分を作ります。

先程とほとんど一緒ですね。

sls deploy

あとはdeployコマンドを叩くだけでAWSへ簡単にデプロイすることができます。

動いてますね。

このようにServerlessフレームワークを使うことで簡単にサーバーレスアーキテクチャを使うことができました。ServerlessではAWS以外にもGCEやAzureも使うことができ、DynamoDBやFirebase Strageといったデータベースへの接続も簡単なので、ぜひ使ってみてください。

あとでDynamoDBを使って何日間継続できたか教えてくれる機能を実装して筋トレ持続に役立てたいと思います。

    スポーン

    Written by

    フロントエンドエンジニア。TDU CPS Lab

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade