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
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
3
470
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
1
6.7k
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
240
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
910
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
130
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
330
RailsGirls IZUMO スポンサーLT
16bitidol
0
190
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
14k
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
1k
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
180
PipeCDのプラグイン化で目指すところ
warashi
1
290
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
270
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Why Our Code Smells
bkeepers
PRO
336
57k
What's in a price? How to price your products and services
michaelherold
246
12k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
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の気持ちがいいところ