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
Gotanda.rb#47 Mailgun3分クッキング
Search
Hiroki Tanaka
October 27, 2020
Programming
7.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gotanda.rb#47 Mailgun3分クッキング
Gotanda.rb#47でLT発表した『Mailgun3分クッキング』です。
Hiroki Tanaka
October 27, 2020
More Decks by Hiroki Tanaka
See All by Hiroki Tanaka
機能QA会のすゝめ
hiroki_tanaka
0
320
定期リリースの導入
hiroki_tanaka
0
240
noteの品質課題に立ち上げ直後のQAチームが挑んだ軌跡
hiroki_tanaka
1
1.6k
note初のBug Bashを やってみた
hiroki_tanaka
1
1.6k
コロナ禍の1年間でAWSの資格を 3つ取得した話
hiroki_tanaka
0
570
Rubocop対応のすゝめ
hiroki_tanaka
0
110
Gotanda.rb#48 ECS on Fargateでのハマりポイント
hiroki_tanaka
1
410
Gotanda.rb#46 権限管理のつらみとPundit
hiroki_tanaka
1
7.6k
Other Decks in Programming
See All in Programming
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
620
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
360
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
800
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
290
My Marp Sample
sinoue0108
0
140
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
110
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
200
Building an Out-of-Order CPU
latte72
0
590
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
490
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
150
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Leo the Paperboy
mayatellez
8
2.2k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Color Theory Basics | Prateek | Gurzu
gurzu
0
450
Writing Fast Ruby
sferik
630
63k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
Transcript
Gotanda.rb#47 Mailgun3ΫοΩϯά 2020/10/27 גࣜձࣾτϨλ @hiroki_tanaka
ࣗݾհ ɾాத جɿ@hiroki_tanaka ɾSIerɿϑϡʔνϟʔΞʔΩςΫτ(4ؒ) →WebܥϕϯνϟʔɿגࣜձࣾτϨλ(1ؒ) ɾRubyɿ2ɾJavaɿ2ɾSQLɿ5 →࠷ۙΠϯϑϥΤϯδχΞݟश͍தɻ ɾझຯɿεϓϥτΡʔϯɾમ౬८Γ
αʔϏεհ - τϨλҿ৯ళ͚ͷ༧ாɾސ٬ா͕ϝΠϯ ϓϩμΫτɻ(࠷ۙͩͱGoToEatʹࢀՃ͍ͯ͠·͢ɻ)
αʔϏεհ - ίϩφՒʹҿ৯ళ͕͜Ε·ͰஷΊ͖ͯͨாͷސ٬ʹ DMΛҰׅૹ৴ग़དྷΔʮτϨλϝοηʔδʯͱ͍͏αʔ Ϗε͕ੜ·Εͨɻ
ࠓ͢͜ͱɾ͞ͳ͍͜ͱ ʲ͢͜ͱʳ - RailsͱMailgunΛ༻͍ͨૹ৴ϝʔϧͷड৴֬ೝɾ։෧֬ೝɾ URLͷΫϦοΫ֬ೝͷऔಘʹ͍ͭͯ (MailgunΛ͍ͬͯΔਓʹͱͬͯجຊతͳΛ͢ΔͷͰɺऍᷟʹઆ๏͔Ͱ͢…) ʲ͞ͳ͍͜ͱʳ - ϝʔϧؔ࿈ͷgem →ruby-gmailletter_opener_webͳͲ
- ActionMailerͷ͍ํ
ϝʔϧͰ͋Γ͕ͪͳཁ͕ τϨλϝοηʔδͰ͋Γ·ͨ͠ɻ
γεςϜ͔Βૹ৴ͨ͠ϝʔϧ͕Ͳͷఔड৴ ͞Ε͔ͨΓ͍ͨɻ
ૹ৴ͨ͠ϝʔϧͷɺԿ%͕։෧͞ ΕͯຊจͷURL͕ͲͷఔΫϦοΫ͞Ε͔ͨ Γ͍ͨɻ
Ͳ͏࣮ͬͯݱ͠Α͏ʁ
ϝʔϧૹ৴ʹඞཁͳESPଆͰ Կͱ͔ग़དྷͳ͍͔ͳ…ʁ
ESPͱ - ESPͱEmail Service ProdiverͷུͰిࢠϝʔϧ৴ γεςϜαʔϏεΛఏڙ͢Δࣄۀऀͷ͜ͱɻ - ಛʹϚʔέςΟϯάϝʔϧτϥϯβΫγϣϯϝʔϧ(༧֬ ೝϝʔϧͳͲ)ͱ͍ͬͨࣄۀʹ݁͢Δϝʔϧͷ৴͕ओɻ -
༗໊ॴͩͱSendGridMailChimpɾAmazon SESɻ - ٛʹGmailyahooϝʔϧ֘͢Δɻ
ࠓճ༻͢ΔESPɿMailgun - ࠓճMailgunͱ͍͏ESPΛ༻ɻ - Mailgun Technologies Inc͕ఏڙ͍ͯ͠ΔαʔυύʔςΟͷ ΫϥυϝʔϧαʔϏεɻ - ຖ݄࠷େ1ສ௨·ͰແྉͰϝʔϧΛૹ৴Ͱ͖ΔͷͰɺखܰʹ
ελʔτग़དྷΔɻ (Googleύʔτφʔϖʔδ͔ΒͷਃࠐΈͩͱ3ສ௨·Ͱແྉɻ)
MailgunͷϝϦοτ ʲϝϦοτʳ - ॳظઃఆ͕؆୯ɻ →ΞΧϯτ࡞~Mailgunઃఆ~DNSઃఆ~RailsଆʹͦͷMailgunઃఆΛద༻͢Δ͚ͩ Ͱɺ͙͢ʹϝʔϧૹ৴ՄೳʹͳΔɻ - APIΛެ։͍ͯ͠ΔͷͰɺϓϩάϥϜ͔ΒͷΧελϚΠζ͕Γ͢ ͍ɻ -
ϩάϏϡʔϫʔ͕͋Γ͔ͦ͜Βϝʔϧͷ࠶ૹ͕Ͱ͖ɺࣗલͷϩάཧ ෆཁɻ - ཧऀҎ֎ͷݖݶͰϢʔβൃߦ͕ग़དྷΔɻ →ඇΤϯδχΞͷνʔϜʹτϥϒϧγϡʔτϝʔϧੳΛґཔͰ͖Δɻ
MailgunͷσϝϦοτ ʲσϝϦοτʳ - RFC४ڌ͍ͯ͠ͳ͍ຊͷΩϟϦΞಠࣗڐ༰ͷϝʔϧΞυϨε ͷ৴Λແ༻Ͱ͘ɻ →ʮ
[email protected]
ʯʮ
[email protected]
ʯͳͲ - ͦͦ͜͜ߴՁͰAmazon SESͷ4ഒఔɻ
MailgunͷWebhook - MailgunʹಛఆͷΠϕϯτൃੜ࣌ʹΞϓϦʹΠϕϯτ௨Λ POST͢ΔWebhook͕͋ΓɺͦΕΛར༻͍ͯ͘͠ɻ - Webhook༷ʑ༻ҙ͞Ε͍ͯΔ͕ɺࠓճdelivered(৴)ɾ opened(։෧)ɾclicked(ΫϦοΫ)Λར༻͢Δɻ - ઃఆ୯ҐυϝΠϯ୯Ґ͔ϝʔϧ୯ҐͰઃఆͰ͖Δɻ ※ࢀߟ
- WebhookͷҰཡɿhttps://documentation.mailgun.com/en/latest/api- webhooks.html#webhooks - Webhookͷ͍ํΨΠυɿhttps://www.mailgun.com/guides/your-guide-to-webhooks/
Webhook͔ΒPOST͞ΕΔύϥϝʔλྫ - `event-data`ͱ͍͏ͷϋογϡΩʔͷόϦϡʔͱ͠ ͯҎԼ͕֨ೲ͞ΕΔɻ
࣮खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮͢Δɻ →Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛࠐ Ήɻ →ࠓճυϝΠϯ୯ҐͰͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3.
MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮͢Δɻ
࣮खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮͢Δɻ →Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛࠐ Ήɻ →ࠓճυϝΠϯ୯ҐͰͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3.
MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮͢Δɻ ͜Ε͔Βઆ໌͢Δ෦
ϝʔϧͷϔομʔઃఆ - ϝʔϧૹ৴ॲཧͷafter_actionͰMailgunͷ։෧֬ೝɾ ΫϦοΫ֬ೝͷͨΊͷϔομʔΛ༩͢Δɻ (ड৴֬ೝϔομʔͷઃఆ͕ෆཁɻ) - ࢠͷMailerΫϥε - ͷApplicationMailerΫϥε
࣮ࡍͷϝʔϧͷϔομʔ - ૹ৴͞Εͨϝʔϧͷϔομʔʹ։෧֬ೝͱΫϦοΫ֬ ೝͷͨΊͷ`X-Mailgun-Track`͕ઃఆ͞ΕΔɻ
MailgunͷWebhookઃఆ - RailsΞϓϦͷWebhookͷPOSTઌΛMailgunͷ Webhookʹઃఆ͢Δɻ - Mailgunଆͷઃఆ - RailsଆͷϧʔςΟϯάઃఆ (ɿPathμϛʔͰ͢)
RailsͰWebhookͷPOSTΛड͚ͯͷॲཧ - Mailgun͔ΒͷPOSTΛड͚࣮ͯߦ͢ΔॲཧΛRailsʹ࣮͢ Δɻ - `event-data`Լʹ͋Δ`event`ʹԠͯ͡ॲཧΛذͤ͞Δɻ
ૹ৴݁Ռ֬ೝը໘Ͱͷ֬ೝ - ࠷ޙʹRailsΞϓϦଆͷૹ৴݁Ռ֬ೝը໘͔ΒνΣοΫ͢Δɻ - ԼهͷྫͰड৴֬ೝͰ͢ɻ
্खʹग़དྷ·ͨ͠ʂ
ҙ 1. Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨ ը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨΊɺϓϨʔϯς ΩετϝʔϧඇରԠɻ 2. େྔͷϝʔϧΛMailgunܦ༝Ͱૹ৴͢ΔͱMailgun ΤϥʔʹͳΒͣʹਖ਼ৗʹૹ৴ॲཧΛߦͬͯ͘ΕΔɻ →ಉ࣌ʹେྔͷWebhook͕ΞϓϦέʔγϣϯʹPOST͞ ΕΔͨΊɺηϧϑDoS߈ܸঢ়ଶʹͳͬͯ͠·͏ɻ
(࣮ࡍʹͦΕͰΞϓϦέʔγϣϯ͕1མͪ·ͨ͠…)
͓ΘΓʹ - MailgunͷWebhookػೳΛར༻͢Δ͜ͱͰૹ৴ϝʔ ϧͷड৴֬ೝɾ։෧֬ೝɾΫϦοΫ֬ೝΛ؆୯ʹग़དྷ ·ͨ͠ɻ - ੳ͕खܰʹͰ͖Δ͜ͱࣄۀͷʹ݁͢ΔͷͰ େࣄɻ - ͱ͍͑ɺMailgunΛ༻͠ͳ͍ଞͷํ๏͋Δͱࢥ
͍·͢ͷͰɺ৭ʑڭ͚͑ͯΔͱخ͍͠Ͱ͢ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ