Slide 1

Slide 1 text

Rails 6.0ͷ
 Action Mailbox ݕূ
 (megurorb#28) גࣜձࣾπΫϧόɹαʔόαΠυΤϯδχΞ ງ઒ɹ@CASIXx1

Slide 2

Slide 2 text

• ීஈ͸ʮcowcamoʯͱ͍͏ΞϓϦΛ։ൃͯ͠ ·͢ • αʔόαΠυ͸ɺRailsʢ5.2ʣΛ࢖ͬͯ·͢

Slide 3

Slide 3 text

Rails 6.0.0͕ͦΖͦΖग़ͦ͏ʂ

Slide 4

Slide 4 text

Rails 6.0.0.rc1͕ग़͍ͯΔͷ Ͱɺ΄΅6.0ͷػೳ͸ࢼͤΔʂ

Slide 5

Slide 5 text

৭ʑ௥Ճ͞Ε͍ͯΔ

Slide 6

Slide 6 text

Rails 6.0ͷओཁ௥Ճػೳ • Action Text • Action Mailbox • Multiple Databases • Parallel Testing • Zeitwerk...etc

Slide 7

Slide 7 text

Action Textͷ࿩୊͸
 ฉ͚͘Ͳɺɺ

Slide 8

Slide 8 text

Action Mailboxͷ࿩͸ฉ͔ͳ͍...
 
 Qiita΍ϒϩά΋΄΅ͳ͍!

Slide 9

Slide 9 text

Action MailboxͰ
 αϯϓϧ࡞ͬͯΈ·ͨ͠

Slide 10

Slide 10 text

ݩʑɺผͷgemͱ࣮ͯ͠૷͞Ε ͍ͯͨ

Slide 11

Slide 11 text

ͪ͜Βͷϒϩά͸ɺ
 gemΛࢼ͍ͯ͠Δ https://bagelee.com/programming/ruby-on-rails/rails6-action-mailbox/

Slide 12

Slide 12 text

Rails 5.2Ͱ΋࢖͑ͦ͏???

Slide 13

Slide 13 text

Action Mailbox֓ཁ

Slide 14

Slide 14 text

Action Mailboxͱ͸ʁ • ड৴ϝʔϧʹରͯ͠ɺʮRailsʯ಺Ͱɺॲཧ͢Δʂ • S3ʹอଘͨ͠Γɺ
 Action MailerΛ࢖ͬͯɺࣗಈฦ৴ͨ͠Γ… • ฦ৴ϝʔϧΛ΢ΣϒʹࡌͤͨΓ

Slide 15

Slide 15 text

4FOE(SJE Ϣʔβʔ ϝʔϧૹ৴ RailsʹHTTP Post ɹ3BJMT "DUJPO.BJMCPY ॲཧ %# อଘ 4

Slide 16

Slide 16 text

ಋೖํ๏

Slide 17

Slide 17 text

ॳظઃఆ • $ rails action_mailbox:install • ApplicationMailboxΫϥε͕ੜ੒͞ΕΔ • MailboxΛ֨ೲ͢Δςʔϒϧ͕ੜ੒͞ΕΔ • ActiveStorage΋ಉ࣌ʹΠϯετʔϧ͞ΕΔ

Slide 18

Slide 18 text

༨ஊ • ActiveStorageͷMigration Version͸ 5.2Ͱ
 ੜ੒͞ΕΔ͕ɺਖ਼͍͠໛༷ • https://github.com/rails/rails/pull/32042

Slide 19

Slide 19 text

app/mailboxes/application_mailbox.rb class ApplicationMailbox < ActionMailbox::Base # [email protected]Ѽͷϝʔϧ͸ # MegurosMailboxΫϥε಺ͰɺॲཧΛߦ͏ routing /^meguro@/i => :meguros end

Slide 20

Slide 20 text

ϝʔϧ͸ɺ
 ActionMailbox::InboundEmail
 Ϟσϧͱͯ͠ѻΘΕΔ • class InboundEmail < ActiveRecord::Base • https://github.com/rails/rails/blob/ master/actionmailbox/app/models/ action_mailbox/inbound_email.rb • ActiveStorageͱࣅͨΑ͏ͳײ͡??

Slide 21

Slide 21 text

app/mailboxes/application_mailbox.rb • ஫ҙ • routingʹରԠ͢ΔϝʔϧΞυϨεʹૹΔͱɺ
 ϝʔϧ͕delivered ѻ͍ • ରԠ͠ͳ͍ϝʔϧΞυϨεʹૹΔͱɺ
 bounced ѻ͍ʹͳΔ • ྫʣ #]>

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ϝʔϧαʔϏεड͚ೖΕઃఆ • config/environments/֤؀ڥ.rb
 config.action_mailbox.ingress = # ͜͜ʹαʔϏε໊ # sendgridͷ৔߹ config.action_mailbox.ingress = :sendgrid # mailgunͷ৔߹ config.action_mailbox.ingress = :mailgun # exam, mailgun, mandrill, postfix, postmark, qmail, sendgridΛαϙʔτ͍ͯ͠Δ

Slide 24

Slide 24 text

ύεϫʔυઃఆ • SendGridͳͲͷϝʔϧαʔϏεͱͷ࿈ܞͰɺ ύεϫʔυ͕ٻΊΒΕΔͷͰɺ
 
 ؀ڥม਺ or CredentialsͰύεϫʔυΛ
 RailsଆͰઃఆ͓ͯ͘͠
 
 ྫʣCredentials

Slide 25

Slide 25 text

ϝʔϧαʔϏεଆͷઃఆ ྫɿSendGrid SendGrid͔ΒɺHTTP POSTͯ͠΋Β͏ʂ https://actionmailbox:password@domain/rails/ action_mailbox/sendgrid/inbound_emails

Slide 26

Slide 26 text

Sender Authenticationͷઃఆ๨Εͣʹ ϝʔϧΛड৴͢ΔυϝΠϯʹରͯ͠ɺ
 DNSઃఆΛͯ͠Լ͍͞
 
 Status͕ Verifiedʹͳ͍ͬͯͨΒɺOK

Slide 27

Slide 27 text

S3ͷઃఆ • Active StorageͱS3Λܨ͛Δ͚ͩͰ
 Action Mailboxͱউखʹ࿈ܞͯ͘͠Ε·͢ • ↓͜Μͳσʔλ͕ೖΓ·͢

Slide 28

Slide 28 text

σϞ

Slide 29

Slide 29 text

ϝʔϧΛ
 [email protected]ʹૹΔͱɺ಺༰͕ˣʹࡌΓ·͢
 
 https://www.beif.jp/mailbox/megurorbs
 
 ʢ͜ͷαΠτ͸͙͢Ϋϩʔζ͢Δ༧ఆʣ

Slide 30

Slide 30 text

ิ଍

Slide 31

Slide 31 text

S3͔ΒϝʔϧϑΝΠϧΛμ΢ϯϩʔυ͢Δ͜ͱͰ Mail::MessageͷϝιουΛ࢖͑Δ

Slide 32

Slide 32 text

S3͔ΒϝʔϧϑΝΠϧΛμ΢ϯϩʔυ͢Δ͜ͱͰ Mail::MessageͷϝιουΛ࢖͑Δ • > ActionMailbox::InboundEmail.first.mail.class • D, [2019-06-25T00:41:49.319609 #4] DEBUG -- : ActionMailbox::InboundEmail Load (1.5ms) SELECT "action_mailbox_inbound_emails".* FROM "action_mailbox_inbound_emails" ORDER BY "action_mailbox_inbound_emails"."id" ASC LIMIT $1 [["LIMIT", 1]] • D, [2019-06-25T00:41:49.348480 #4] DEBUG -- : ActiveStorage::Attachment Load (2.6ms) SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = $1 AND "active_storage_attachments"."record_type" = $2 AND "active_storage_attachments"."name" = $3 LIMIT $4 [["record_id", 9], ["record_type", "ActionMailbox::InboundEmail"], ["name", "raw_email"], ["LIMIT", 1]] • D, [2019-06-25T00:41:49.351096 #4] DEBUG -- : ActiveStorage::Blob Load (1.5ms) SELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1 LIMIT $2 [["id", 9], ["LIMIT", 1]] • I, [2019-06-25T00:41:50.006908 #4] INFO -- : S3 Storage (655.4ms) Downloaded file from key: hogehogehogehogehoge • => Mail::Message

Slide 33

Slide 33 text

ૹ৴ݩΞυϨεͳͲ΋औΕΔ

Slide 34

Slide 34 text

ૹ৴ݩΞυϨεͳͲ΋औΕΔ

Slide 35

Slide 35 text

·ͱΊ

Slide 36

Slide 36 text

·ͱΊ • ϝʔϧαʔϏεଆͷઃఆ΋ඞཁʹͳΔ • SendGridͳΒɺInbound ParseͳͲ • SES͸ɺRails 6.1͔ΒͷαϙʔτͱͳΓͦ͏ • https://github.com/rails/rails/commit/ f480cfabcd9000b5817b610e21466299025b12d2 • ࣍ճ͸ • ࣗಈฦ৴ͱ͔
 Ϣʔβʔςʔϒϧͱૹ৴͞ΕͨϝʔϧͷΞυϨεΛಥ͖߹Θͤͯɺ
 ͲͷϢʔβʔ͕ϝʔϧΛૹͬͨͷ͔Λ෼͔ΔΑ͏ʹͯ͠ΈΔ • InboundEmail͔Βͷ৘ใऔಘΛͲΕ͚ͩ޻෉Ͱ͖Δ͔

Slide 37

Slide 37 text

ऴΘΓ

Slide 38

Slide 38 text

ࢀߟ • Action Mailbox gem • https://github.com/rails/actionmailbox/tree/master • Rails Guides • https://edgeguides.rubyonrails.org/ action_mailbox_basics.html • bagelee • https://bagelee.com/programming/ruby-on-rails/rails6- action-mailbox/