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
Slack bot をGoでつくってみた
Search
Kutsuzawa Ryo
July 09, 2018
Programming
1
150
Slack bot をGoでつくってみた
golang 気持ちい
Kutsuzawa Ryo
July 09, 2018
Tweet
Share
More Decks by Kutsuzawa Ryo
See All by Kutsuzawa Ryo
大企業でもできる!短期間でプロダクトローンチするための勘所
oliva
8
6k
Recap: `How Uber "Go"es` in Japanese
oliva
0
230
Other Decks in Programming
See All in Programming
Gemini CLIの"強み"を知る! Gemini CLIとClaude Codeを比較してみた!
kotahisafuru
3
950
新世界の理解
koriym
0
130
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
2k
実践!App Intents対応
yuukiw00w
1
220
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
280
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
630
バイブコーディングの正体——AIエージェントはソフトウェア開発を変えるか?
stakaya
5
800
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.5k
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
180
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
1k
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Documentation Writing (for coders)
carmenintech
73
5k
Six Lessons from altMBA
skipperchong
28
3.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
KATA
mclloyd
32
14k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.7k
Side Projects
sachag
455
43k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Transcript
4MBDL#PUΛ (PͰ࡞ͬͯΈͨ HPQIFSEPKP-5 3ZP,VUTV[BXB !CPPLVO
ࣗݾհ n 沓澤 遼 pGitHub: https://github.com/bookun pQiita: https://qiita.com/bookun nお仕事 pServer
Side Engineer ØPHP / Laravel or CakePHP ngopher道場参加のきっかけ p興味のあるプロダクトでgo製のものが多かった ØDocker ØCloud Foundry ØMinio (https://github.com/minio/minio) Qiita投稿記事のタグ⽐率
4MBDL#PU Λ࡞ͬͯΈͨཧ༝ ˢ 社内のこれをなくしたかったから それSlack内から サクッと ⼊れれるよー GitHubとSlackでユーザネームが違うから結局アレをやられてしまう恐れ!! GitHubの名前 しかし。。
1VMM3FRVFTUͷ3FWJFXґཔ͕ ͖ͨͱ͖ʹɺ4MBDLͰϝϯγϣϯΛ ͚ͭͯ௨ͯ͘͠ΕΔ#PUΛ(PͰ ࡞Γ͍ͨ
(JUIVC㱺#PU㱺4MBDL GitHubがPull Requestイベントを検知するとBotに対してJSONがPOSTされる https://<heroku appのURL>/ にPOSTがきたら 上記のハンドルで処理 レビュー依頼のみ取り扱った。 イベントの種類ごとにJSONが異なるため、 イベント毎にJSONをDecodeするための
構造体を宣⾔する必要がある。 Ex) var requestedPR pr.PR
(JUIVC㱺#PU㱺4MBDL PRの情報が格納されたJSONをDecodeする 道場の第4回⽬でやったやつ!?!? GitHubからのJSON JSONデコード⽤の構造体をどう定義するか??? 講義のものよりプロパティが多い。 デコード⽤の構造体を定義するのが困難。
(JUIVC㱺#PU㱺4MBDL JSONからデコード⽤構造体を⽣成してくれるWebサービス (https://mholt.github.io/json-to-go/)
(JUIVC㱺#PU㱺4MBDL 第4回⽬でやったやつ!! GitHubからのJSON JSONデコードのための構造体の定義 PRの情報が格納されたJSONをDecodeする
(JUIVC㱺#PU㱺4MBDL 以下の3つの情報が必要 n SlackのWebhook n Channel名 n 本⽂ (text or
attachment) Attachment構造体 それっぽいメッセージが送れた!! Mentionになってない!! しかし
4MBDL㱺#PU GitHub名とSlack名の対応表が欲しい。 SlackにAppを作り、Slash Commandを作った /useradd <GitHub名> @<Slack名> ⇒ https://<heroku appのURL>/commandsへPOST
https://<heroku appのURL>/commands に POSTがきたら上記のハンドラで処理 user.Add() にてDBに Github名に対するSlack名の 情報を格納したかったが今回は時間の関係で断念。 環境変数に保存させるようにした。 SlackからのPOST内容
4MBDL㱺#PU /useradd コマンドを打つ
4MBDL㱺#PU 補⾜ 環境変数にgithub名=slack名で 格納されていればなんでもよい。 • .envに記載 • heroku config:set •
heroku web UIから • /useradd Mentionキタ!! 再度 Review依頼を送る
1VMM3FRVFTUͷ3FWJFXґཔ͕ ͖ͨͱ͖ʹɺ4MBDLͰϝϯγϣϯΛ ͚ͭͯ௨ͯ͘͠ΕΔ(Pͷ#05 https://github.com/bookun/slackbot
·ͱΊ https://deeeet.com/writing/2016/10/25/go-interface-testing/ より引⽤ 道場での受講中、様々な記事に助けていただきました。 ありがとうございました!! n 薄い⾔語仕様 Ø 暗記事項みたいなものが少ない n
Testやhttp serverそのものもピュアなGolangで⼗分に書くことができる Ø golangを知っているだけで理解できることが多い n 使われていない変数があると怒られる Ø 定義された変数は必ずどこかで使われているはずだから確実に読む価値がある n (vim-goを⼊れるだけで⼗分にvimでコーディングできる) Ø (宗教戦争なので議論はしないが、vimでGolangを書くのが気持ちがいい) 私が感じたGolangの気持ちがいいところ