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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kutsuzawa Ryo
July 09, 2018
Programming
170
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slack bot をGoでつくってみた
golang 気持ちい
Kutsuzawa Ryo
July 09, 2018
More Decks by Kutsuzawa Ryo
See All by Kutsuzawa Ryo
大企業でもできる!短期間でプロダクトローンチするための勘所
oliva
8
6.4k
Recap: `How Uber "Go"es` in Japanese
oliva
0
240
Other Decks in Programming
See All in Programming
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
230
CSC307 Lecture 17
javiergs
PRO
0
320
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
280
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
170
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
510
Oxlintのカスタムルールの現況
syumai
6
1.1k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Visualization
eitanlees
152
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
How to build a perfect <img>
jonoalderson
1
5.6k
BBQ
matthewcrist
89
10k
Paper Plane (Part 1)
katiecoart
PRO
0
8.9k
The Curse of the Amulet
leimatthew05
1
13k
Google's AI Overviews - The New Search
badams
0
1k
Building Applications with DynamoDB
mza
96
7.1k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
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の気持ちがいいところ