【第12週】パRails輪読会🚂 (2023-11-07~ 2023-11-10)

tags: パRails🚂

目次


2023-11-07(火)

ファシリ

@moegi29

ドライバー

@sadanora

読んだところ

5-2-6 233p 「Active Storageの問題点」から
5-3-1 236p まで。
PR:

次回

5-3-1 237p から。🚂

学んだこと・感想

  • @sharoa

    • Active Storageにはバリデーション用のヘルパーメソッドが同梱されていない。(大抵のファイルアップロードライブラリには入っている。)
    • また、casheという仕組みも入っていない。(このcasheという仕組みがあると、バリデーションエラー時にcasheという場所にファイルを一時的に保管しておくことができて、再びファイルをアップロードする手間を省ける。)
    • 少し物足りないActive Storageだけど導入時に比べておおくの改善がされている。今後も期待したいところ。
    • Action Mailerという送信機能を簡単に実装できるライブラリがある。
  • @hiromisugie

    • Active Storageには以下などの不足している機能もある
      • validationヘルパーが不足している(画像添付を想定しているのに動画を添付できちゃう、とか。ちなみにバリデーションは別のgemで追加対応可能)
      • cacheの不足:例えば名前必須のバリデーションをつけてバリデーションエラーになったときに、画像の添付も解除されてしまっていてあらめて添付しないといけない(キャッシュされない)
    • 上記のような不足機能もありつつ、どんどん改善されているのでActive Storageはこれからも現役であり続ける可能性が高い、らしい
    • Action Mailerはメール送信機能を簡単に実装できる。次に出てくるAction Mailboxがメールの受信機能を提供してくれるので、これらをセットで実装するとメールの送受信ができるようになる。
    • Action Mailerで使うファイルは、generatemailerサブコマンドを使って生成できる。
  • @moegi29

    • validationヘルパーやcacheという仕組みが不足しているという話もあり必ずしもActiveStorageを使うと良いということはない。ということを知った。Rails7で修正されたのか気になる。
    • ActionMailerを使うとメール送信機能をかんたんに実装できる。使いこなせたら便利そう。
  • @ayu-0505

    • Active Storageにはvalidationヘルパーの不足やcache機能の不足がある。(Rails6時点なのでRails7は確認すること)
    • Action Mailerはメール送信機能でありメール受信機能である、Action Mailboxと対をなしている。
    • 3点から、コントローラーの設計と近しいものがある。
      • paramsオブジェクトを通してデータを取得
      • メイラークラスで処理した内容をインスタンス変数に代入してビューに渡す
      • コールバックやヘルパーメソッドが用意されている
  • @sadanora

    • Active Storageの問題点
      • 画像アップロード機能を実装する場合、画像の大きさ、ファイルのサイズや種類などのバリデーションはほぼ必須だけど、validationヘルパーが標準で搭載されてない
        • 自分で実装するか、それ用のgemを追加するなどして対応する必要がある
      • cacheの不足
        • cacheの機能があれば、バリデーションエラーがあった時に画像を再添付しなくて済むようにしたりできるが、標準でcacheの仕組みはActive Storageにはない。
    • Action Mailer
      • メール送信機能をかんたんに実装できる機能
      • Action Mailer
        • メール送信機能を提供するコンポーネント
      • Action Mailbox
        • メール受信機能を提供するコンポーネント
  • @motohiro-mm

    • ActiveStorageの問題点
      • validationヘルパーが不足している
      • cacheが不足しているのでバリデーションエラーになったときに画像を添付し直さなきゃいけない
    • ActionMailer:メール送信機能を簡単に実装できる
      • rails generate mailer ~でファイルが作られる
      • app/mailers/application_mailer.rbにメールアドレスを登録できる
      • app/mailer/user_mailer.rbでユーザー登録完了時にメール送信機能を設定できる
    • npm installyarn addにした方が良い!

2023-11-08(水)

ファシリ

ドライバー

読んだところ

5-3-1 237p から
5-3-3 「Action Mailerの設定」まで。
PR: https://github.com/motohiro-mm/Perfect_Ruby_on_Rails_Ch5/pull/6

次回

5-3-4 「Action Mailerのテスト」から。🚂

学んだこと・感想

  • @sharoa

    • 昨日からのつづきで、Action Mailerのビューの動作などをプレビュー機能を使って確認するのを画面越しで確認できたのはよかった。
    • deliver_nowは同期的にその場でメール送信を行うメソッド。
    • deliver_laterは非同期でメールを送信するメソッド。
    • この非同期送信を利用すれば、Webのリクエスト/レスポンスサイクルの外でメールを送信できて、ユーザーは送信完了をまつ必要がなくなる。
    • また、waitオプションで5分後とか、wait_untilオプションで送信日時を指定することもできる。
    • ただ、非同期送信時には注意が必要。
  • @shodan

    • UserMailer.with(送り先).メールのメソッドに繋げる形で、同期的/非同期的にメールを送るかどうかを選択できる。
    • メールの送信方法の設定はconfig/内の設定ファイルのconfig.action_mailer.delivery_methodで設定する。
  • @moegi29

    • メール送信機能の実装の部分でdeliver_nowメソッド,deliver_laterメソッドが使える。deliver_nowは同期的にメール送信を行う、deliver_laterは非同期でメール送信を行う。Railsを再起動するとキュー内のジョブは破棄される→キューを永続化させたり未配信メール,二重配信メールを防ぐなどの工夫が必要。
  • @sadanora

    • deliver_later
      • コントローラは送信完了を待たずに処理を続行できる
    • `deliver_now
      • 同期的にその場でメール送信を行う
    • Active JobのキューはRalisの再起動で破棄される。deliver_laterActive Jobを利用しているので、ジョブの永続化をしておくなどの工夫をしないと、Railsの再起動のタイミングでキューが消えてしまう。
  • @hiromisugie

    • ユーザー登録のメール送信は同期的に行うdeliver_nowメソッドと非同期で行うdeliver_laterメソッドがある。deliver_laterdeliver_later(wait: 5.minutes)のように引数で5分後とか設定できる。
    • deliver_nowの方が今すぐやってくれそうだけど、厳密には「ユーザーへのメール送信が終わったら次のタスク(画面上に「登録しました」と表示するなど」)が実行され、deliver_laterはメール送信と次のタスクを並行でやってくれるから、後者のがユーザー体験的には良さそう?
    • ということで良さそうな非同期送信だが、Railsを再起動するとキュー内のジョブが廃棄されてメール送信されないとかが起こるので注意が必要らしい。

Select a repo