rigor-actionmailer
Mailer.action(args).deliver_*の呼び出し箇所について、アクションの存在と引数のアリティを検証し、app/views/配下にビューテンプレートが存在しないメーラーアクションを指摘します。includeされたconcernモジュールから継承されたアクションはメーラーのアクション集合にマージされるため、includeしたEmails::*concernからアクションを導出するメーラーでも型チェックが通ります。Railsランタイムへの依存はありません。
このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化してください。
plugins: - rigor-actionmailerチェック内容
Section titled “チェック内容”demo.rb:7:1: info: `UserMailer.welcome` matches mailer action (arity 1..2)errors_demo.rb:7:1: error: `UserMailer.welcome` expects 1..2 argument(s), got 0errors_demo.rb:15:1: error: `UserMailer.does_not_exist` is not a defined mailer action (known actions: digest, reset_password, welcome)app/mailers/user_mailer.rb:14:7: warning: `UserMailer#digest` has no view template under `app/views/user_mailer/`- アクションの存在 —
Mailer.unknown_action(...)→unknown-action(未解決のincludeがある場合は、推測する代わりにこれを抑制します)。 - 引数のアリティ — 位置引数が少なすぎる/多すぎる →
wrong-arity。 - ビューテンプレートの存在 — 各アクションには少なくとも1つの
app/views/<mailer_underscore>/<action>.{html,text}.{erb,haml,slim}が必要です。存在しない場合はmissing-viewとなり、アクションのdefにアンカーされます。
認識される呼び出し形は次のとおりです。直接のアクション呼び出し(UserMailer.welcome(user))、.with(...)チェーン(UserMailer.with(user: u).welcome(user))、末尾の.deliver_now / .deliver_later(受け入れられますが、解釈はされません)。
plugins: - gem: rigor-actionmailer config: mailer_search_paths: ["app/mailers"] # default mailer_base_classes: ["ApplicationMailer", "ActionMailer::Base"] # default views_root: "app/views" # default- 直接の親クラスのマッチのみ。
BaseMailer < ApplicationMailerであるようなclass CustomerMailer < BaseMailerは、BaseMailerがmailer_base_classesに含まれていない限り発見されません。(includeされたconcernモジュール由来のアクションはマージされます。これは親クラスチェーンに関する話です。) - 構文的なアクションリスト。アクションはインスタンス側の
defから読み取られます。define_method、initialize、_始まりの名前は除外されます。 - 標準のビューファイル名パターンのみ(
<action>.{html,text}.{erb,haml,slim})。カスタムエンジン/ビューパスは対象外です。 - 真新しいビューファイルは、メーラーファイルが参照する何かが変わるまでキャッシュされたインデックスを無効化しません(リード追跡のトレードオフです)。
プラグイン内部
Section titled “プラグイン内部”メーラー/concernのディスカバラー、キャッシュされた:mailer_indexプロデューサー、デモ、そしてこのプラグインが利用する契約のサーフェスについては、プラグインのREADMEを参照してください。プラグインの書き方については、examples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.