Ginza.rbのRails Action Mailer Previewのコードリーディングに行ってきた #ginzarb

June 18, 2014 by Yudai Suzuki

これに行ってきた。
会場を提供してくださった リクルートライフスタイル様、ありがとうございました。

概要

機能、使い方

読む所

https://github.com/rails/rails/blob/4-1-stable/actionmailer/lib/action_mailer/preview.rb

コードリーディングの進め方

パーフェクトRailsの著者の一人であるWillnetさんがPCをプロジェクターに映して解説しつつ読み進め、機能に詳しくてrailsのコミットログしょっちゅう読んでるy_yagiさんが補足説明するという豪華なスタイル。それを参加者が見つつなんか言いつつという方式で進めていた。

コードリーディング

今回のスコープだが、ここだけ読んでもピンとこない。
実際にアプリからpreviewを開いてログを見てみると、railtiesのmailers_controller.rbが実行されていることがわかる。
なので、そこと合わせて見る。

Started GET "/rails/mailers/user_mailer/mail2?part=text%2Fplain" for 127.0.0.1 at 2014-06-17 19:54:00 +0900
Processing by Rails::MailersController#preview as HTML
  Parameters: {"part"=>"text/plain", "path"=>"user_mailer/mail2"}
  Rendered user_mailer/mail1.html.erb (0.1ms)
  Rendered user_mailer/mail1.text.erb (0.0ms)

UserMailer#mail1: processed outbound mail in 14.1ms
  Rendered text template (0.0ms)
Completed 200 OK in 17ms (Views: 0.5ms | ActiveRecord: 0.0ms)


Started GET "/rails/mailers/user_mailer/mail2?part=text%2Fhtml" for 127.0.0.1 at 2014-06-17 19:54:04 +0900
Processing by Rails::MailersController#preview as HTML
  Parameters: {"part"=>"text/html", "path"=>"user_mailer/mail2"}
  Rendered user_mailer/mail1.html.erb (0.1ms)
  Rendered user_mailer/mail1.text.erb (0.0ms)

UserMailer#mail1: processed outbound mail in 13.4ms
  Rendered text template (0.0ms)
Completed 200 OK in 16ms (Views: 0.3ms | ActiveRecord: 0.0ms)

ActionMailer::Preview.allは作成したpreview配下にあるファイルを全部とってきてるのがわかる。indexメソッドのテンプレートはこれ

で、その後にメールのタイトルと本文をとってきてこれに表示させてる感じ。あとはプレーンテキストかHTMLで表示するかを条件分岐してて、これをparamsからとってきてる。

mailer_previewのroutingはここで追加されてて、Rails.envdevelopmentだとroutingが動的に追加されるようになってる。welcomeページと一緒。

感想

Railsに詳しい人が解説しながら読み進めてるのを見るのは非常に楽くて勉強になった。ソースの難易度や規模的にも丁度良い感じだったと思う。(自分はアホなので予習しないとたぶんついていけなかったけど)またやってほしいです。

余談

少し時間が余ったので、メール周りの話になった

開発中のメールを飛ばして閲覧できる(Fake SMTP Server + α)

メール配信サービス

© 2017 | Onigra | Powerd by Hucore theme & Hugo