https://www.notion.so/LINEbot-4aafb46c2d684eb4916e7097e47621b1

上記の記事の作業を事前に済ましている前提で説明していきます。時間指定をしたいのでRakeタスクとwheneverを使って実装していたいと思います。

$ rails g task push_line

lib/tasksディレクトリ配下にpush_line.rakeファイルが作成されました。このファイルの中にpush機能の内容などを書いていきます。今回はtaskを2つ作成しました。

namespace :push_line do
  desc "朝メッセージを送る"
  task push_line_message_morning: :environment do
    message = {
      type: 'text',
      text: 'あれ?まだ寝てるのかな?太陽の光を浴びてスッキリ起きよう?'
    }
    client = Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
    response = client.push_message(ENV["LINE_USER_ID"], message)
    p response
  end

	desc "夜メッセージを送る"
  task push_line_message_night: :environment do
    message = {
      type: 'text',
      text: 'もうすぐ日付超えちゃうよ〜。。今日もお疲れ様です。毎日頑張ってる君はえらい!おやすみなさい。'
    }
    client = Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
    response = client.push_message(ENV["LINE_USER_ID"], message)
    p response
  end
end

response = client.push_message(ENV["LINE_USER_ID"], message)このコードはメッセージを送信する相手を指定しています。Herokuなどにあげてデプロイする予定も、他のユーザーに使ってもらう予定もないので.envファイルに自分のユーザーIDを管理しておきました。

LINE_USER_ID=Your user IDを貼り付ける

※Your user IDはLINE Developersの指定チャンネル内、Basic settingに記載されています。

まず最初にwheneverのgemを追加して、bundle installをします。

gem 'whenever', require: false

時間指定をするためにschedule.rbファイルを作成します。このように出力され、configディレクトリ配下にschedule.rbファイルが作成されたら成功です。

$ bundle exec wheneverize .
>[add] writing `./config/schedule.rb'
>[done] wheneverized!

そして作成したschedule.rbファイルに設定を追記していきます。ここでcronを使って処理が実行されているか確認するための設定を行っています。

そして毎朝7時と深夜11時50分に各rakeタスクの指定した処理が走るように記載しています。

require File.expand_path(File.dirname(__FILE__) + "/environment")

rails_env = ENV['RAILS_ENV'] || :development

set :environment, rails_env

set :output, "#{Rails.root}/log/cron.log"

every 1.day, at: ['7:00 am'] do
  rake 'push_line:push_line_message_morning'
end

every 1.day, at: ['11:50 pm'] do
  rake 'push_line:push_line_message_night'
end

上記の設定を更新して実行できるようにするために下記のコマンドを打ちます。