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
160
Slack bot をGoでつくってみた
golang 気持ちい
Kutsuzawa Ryo
July 09, 2018
Tweet
Share
More Decks by Kutsuzawa Ryo
See All by Kutsuzawa Ryo
大企業でもできる!短期間でプロダクトローンチするための勘所
oliva
8
6.3k
Recap: `How Uber "Go"es` in Japanese
oliva
0
240
Other Decks in Programming
See All in Programming
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
4
370
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
110
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
160
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
310
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
180
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
390
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
14
7.9k
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
170
SourceGeneratorのマーカー属性問題について
htkym
0
140
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
200
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
470
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Ruling the World: When Life Gets Gamed
codingconduct
0
160
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
200
Designing for Performance
lara
611
70k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
460
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
190
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
63
53k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
190
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の気持ちがいいところ