Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
非同期朝会ボットを作った話 / Create serverless-daily-standup...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tsubasa
October 05, 2018
Technology
0
410
非同期朝会ボットを作った話 / Create serverless-daily-standup-bot
2018/10/05 に社内勉強会で発表した時のスライドです。
tsubasa
October 05, 2018
Tweet
Share
More Decks by tsubasa
See All by tsubasa
一年間の育休を振り返る / FFTT 20210312
tsub
0
2.3k
ここがつらいよECS
tsub
0
3.4k
mruby-cliでCLIを作りたかった話
tsub
2
340
Other Decks in Technology
See All in Technology
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
230
AWS Network Firewall Proxyを触ってみた
nagisa53
0
210
データ民主化のための LLM 活用状況と課題紹介(IVRy の場合)
wxyzzz
2
690
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
430
Greatest Disaster Hits in Web Performance
guaca
0
160
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
170
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
150
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
130
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
630
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
340
Featured
See All Featured
Bash Introduction
62gerente
615
210k
First, design no harm
axbom
PRO
2
1.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
410
Why Our Code Smells
bkeepers
PRO
340
58k
Designing Experiences People Love
moore
144
24k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
160
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Fireside Chat
paigeccino
41
3.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
BBQ
matthewcrist
89
10k
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Transcript
非同期朝会ボットを作った話 @tsub FFTT 2018/10/05
自己紹介 • (主に) インフラエンジニア • コンテナ大好き • 好きなエディターは NeoVim •
Arch Linux たのしい @tsub (高山 翼)
チームでの朝会の様子
None
None
このやり方でかれこれ4ヶ月くらい • リモートワークの全社的な導入がきっかけ • 月〜木はオンライン、金はオフライン • 金曜日のオフライン朝会は話したいことが溜まるからか少し時間かかり気味 • 誰かがリモートワークしている日だけやり方を変える、というのは大変なので常にリモートワークを考慮したやり 方にしたかった
チームでの決まりごと • 朝の時点で全員書く(だいたい 10:30 までには) • 他の人の投稿は全て読んで必ずリアクションを付ける
オンライン朝会をやっていて良かったこと • 複数の朝会に参加している場合の共有が楽 (リモートのとき) • 遅刻・お休みしても後から見れる・書ける • 聞き逃す心配がない • リンクなども貼れる
非同期朝会ボットについて
geekbot Misoca さんで使っているという話から気になっていた。 実際使ってみると必要十分感があってピッタリハマった。 ただ、現状朝会だけで使うことを考えると料金に見合わずやめてしまった。 これくらいなら作れるんじゃない?ということで @tsub がやる気になった。
自作する前に 既存のサービスで要件を満たせるものがないか調べた。 が、どれも有料だったり表示フォーマットが合わなかったりで断念。 ・https://standuply.com ・https://standupjack.com ・https://standupbot.com ・https://tatsu.io ・https://www.standupalice.com ・https://jell.com/slack ・https://standbot.softwaredevtools.com
・https://www.stehauf.io ・https://scrumbot.sifts.io
tsub/serverless-daily-standup-bot geekbot を止めた翌日からひっそりと土日に作っていて月曜日にいきなり導入。リリース後は脳汁出そうだっ た。 ただ初日は動作確認が不十分でちゃんと動かなかったので運用でカバーした。 目に留まりやすいように名前に “serverless-” を付けた。
アーキテクチャ
最初のアーキテクチャ
ただし微妙なところがある 直近の社内勉強会の発表を聞いて、これだ!となって最初は Step Functions を使っていた。 けど、質問の回答が来るまでループして無駄な function を実行したり、並列実行も並列数を動的に決められず StepFunctions の旨味を全然受けれてなかった。
冷静に考えてみると、サーバーレスアーキテクチャの本質はイベントドリブン (って誰かが言ってた) なので、この 場合の StepFunctions は筋が悪い。 しかも誰かが仕事を休むと、ずっとステートマシンが起動しっぱなしになる。
新アーキテクチャ DynamoDB Streams を使い、質問の回答が書き込まれたら次の質問を送るようにした。 すべての回答が揃ったら特定のチャンネルにサマリを送信する。 これによって無駄なループがなくなる。
新アーキテクチャ
使い方
初期設定 Slash コマンドと Interactive messages を組み合わせて実装。 /daily-standup-bot setting で設定できる。 ただし
Slack だけでやろうとすると制限が多いし実装も複雑になるので厳しい。 素直に Web アプリ作ったほうが楽。
None
初期設定が難しすぎる select フィールドは複数選択ができない。 textarea フィールドはユーザー名の補完が効かない。 Slack 側でユーザー名をユーザー ID に変換する API
もない。ので、ユーザー ID を書いてもらうしか。 スケジュール設定は CloudWatch Events の cron 式 そのまま (これはパーサー書いてなんとかしたい )。 ちなみに Dialog はフィールドが 5 個まで。 なのでこういう設定方法にならざるを得なかった ...
これからやろうと思ってること
None
特に優先順位が高めなのは • README を整備してちゃんと OSS らしくする • FF 本番環境へのデプロイ自動化 (現状ぬくもりのある手動デプロイ
) • 送信済みメッセージの編集機能 • 設定の削除機能 • ...etc
無駄に頑張った ローカル実行するための仕組み
SAPessi/serverless-sam serverless FW は Go ランタイムのローカル実行に非対応。 sam-cli は対応しているため、YAML を変換するために使用。 まったくメンテされてないので
npm audit に引っかかる。 バグもあるので正直おすすめはしない。 例えば serverless FW の ${env:HOGE} みたいな記法を解釈してくれない。 “DynamoDB” と記述するところを単純にキャメルケースにして “Dynamodb” にしてしまってる。 → sed で解決!
awslabs/aws-sam-cli AWS 公式ツール。 Go ランタイムのローカル実行にも対応している。 function 実行ごとに docker pull が走る。
function のコードが zip の場合は実行ごとに解凍する。 どちらも予め済ませておいて skip オプション付けて実行することで Slack の Webhook のタイムアウトをギリギリ回避できる。
ngrok localhost の Web サーバーを外部に公開できる。開発向け。 https でのアクセスも可能。 Web UI でリクエストの中身とかも見れる。
起動すると top コマンドみたいに全画面使われるのが地味に困る。
oxequa/realize Go 向けのタスクランナー。 YAML を書いておけばコードの変更を watch して再ビルドなどしてくれる。 go build だけじゃなく
go run, go vet, go fmt なども実行できる。
全体の流れ 1. serverless-sam プラグインで SAM の YAML を書き出す 2. serverless-sam
プラグインがバグっているので sed で YAML を修正 3. zip は予め解凍 4. Docker イメージも予め pull 5. sam local でローカル実行 6. ngrok で外部に公開して Slack から叩かせる 7. realize でコードを watch して自動再ビルド
Tips
他チャンネルにリンク貼っても展開されない件
シェアを使えば展開される
まとめ
サーバーレスアーキテクチャは楽しい 仕組みを考えるのは楽しい。けど難しい。 アイデア勝負的なところがあって、どのサービスを組み合わせてどういう風に設計するかがかなり自由。 ただスケーラビリティを考慮して、となると途端に難しくなる気がする。 イベントドリブンに則っていればとりあえず間違いはない。
アプリ公開しないの? Web サービス化や Slack アプリ公開は今のところ厳しい。 CloudWatch Events のスケジュールを使っているためそこがボトルネック (あれ?どこかで聞いたような ...)
それよりは OSS 化して使いたい人がデプロイして使えばいいかな感はある。
ぜひ使ってください! /daily-standup-bot setting を叩けば社内の誰でも設定可能 Go のリファクタリングとか PR も募集! とはいえうちのチームぐらいしか使わないだろうなぁとは思ってる。
そして気づいてしまった... 無料で使える Standup Alice が要件を満たしていたっぽいことを ...