Rakeタスクとは
アプリケーションを起動せず、コマンドラインから実行できるようにするためのもの
rake -Tで登録されているタスクを確認できる

下にもっとたくさん並んでいる
Rakeタスクはいつ使う?
- 定期的に実行したい処理があるとき
- 1日に1回、ユーザーの登録状況をSlackに通知する など
- 運営者がアプリの機能を利用したい場合
- メールのお知らせ機能を運営者が利用する など
Rakeタスクを作成する
利用者にメールを送信するRakeタスクを登録してみる
app/lib/tasks/notification.rakeを作成する
今回はわかりやすく「puts 'はじめての Rake task'」を入れてみる
namespace :notification do
desc '利用者にメールを送付する'
task send_emails_from_admin: :environment do
puts 'はじめての Rake task'
end
endこの状態でrake -Tを実行してみる

登録できている!
| コード | 説明 |
|---|---|
| namespace | 「rake ●●」に入る |
| task | 「rake notification:●●」に入る |
namespaceがあると、なにをどうするのかがわかりやすくなる
コードを実行してみると、「puts 'はじめての Rake task'」が動く
rails notification:send_emails_from_admin
コマンドラインからコードが実行できるようになった
※「puts 'はじめての Rake task'」は不要なので削除しておく
↓のjobを実行できるようにする

メールが非同期処理で送付されるように定義する
namespace :notification do
desc '利用者にメールを送付する'
task send_emails_from_admin: :environment do
NotificationFromAdminJob.perform_later('rake task test')
end
endredis、sidekiqが起動していることを確認する
先ほどと同じように実行する
rails notification:send_emails_from_adminforemanのログを見ると、workerが働いたことがわかる

Letter_openerを見ると、「rake task test」のメールが全ユーザー(4名)に送られている

Rakeタスクに引数を使う
コマンドラインでメール送信する際、引数を使って、本文を自由に変更できるようにしたい
引数を受け取ってputsできるようにしてみる
task :send_emails_from_admin, ['msg'] => :environment do |task, args|
puts args
endキー['msg'] => バリュー:environment
argsとはargumentsの略
arguments・・・引数の英語
'msg'の引数がargsに入ってくる
rails notification:send_emails_from_admin\[こんにちは\]\[こんにちは\]のように、バックスラッシュoption+¥をいれる

task :send_emails_from_admin, ['msg'] => :environment do |task, args|
puts args['msg']
endハッシュのように渡すことができる

もし変数msgが存在したらメールを送付する
task :send_emails_from_admin, ['msg'] => :environment do |task, args|
msg = args['msg']
if msg.present?
NotificationFromAdminJob.perform_later(msg)
end
end↓「こんにちは」というメールが送付されている

task :send_emails_from_admin, ['msg'] => :environment do |task, args|
msg = args['msg']
if msg.present?
NotificationFromAdminJob.perform_later(msg)
else
puts '送信できませんでした。メッセージを入力してください。ex. rails notification:send_emails_from_admin\[こんにちは\]'
end
end送信できませんでした、のあとに例文を書いておくと◎
このrake taskを使いたい人がエラーになった際、すぐ解決することができる
#DAY11

