ムーのしょ〜もない様でしょ〜もなくもないブログ

プログラミング未経験だけど、エンジニアになりたい、IT関係の仕事がしたい方向けに情報を発信しています!あっ!けどプログラミング以外にも皆さんに有益になる様な情報も発信しますよー!

LINE Message APIで10分間隔でメッセージが通知されるまでのメモ

おうむ返しが出来る様になり、次は自分が設定したメッセージが

10分間隔で送られて来る様に設定する!

おうむ返しで作成したのをそのまま使う

もしおうむ返しをしてみたい方はこちらの記事をどうぞ

LINE Message APIでRailsを使っておうむ返し - ムーのしょ〜もない様でしょ〜もなくもないブログ


まずはherokuの設定から

herokuのResourcesから、Add-onsでHeroku Schedulerを検索

そして10分間隔に設定

f:id:muuuuukun:20181213223206p:plain


次にrailsの設定

この時にrailsのrake taskを勉強

rake taskって何?って方は下の記事をお読みください 何回も何回も読みました

・rakeタスクについて

railsで定期的にバッチ回すwhenever

https://qiita.com/yumiyon/items388fbb84450f49a6ab0d

railsでrakeタスクの作成

https://qiita.com/suzuki_koya/items/787b5562d2ae1a215d94

railsのrakeについて

https://qiita.com/you8/items/ce893fa27b19fd6da031

rakeとは

http://opiyotan.hatenablog.com/entry/rails-rake-task

rake taskの作り方と、意外とハマりがちな引数の扱い

https://bottoms-programming.com/archives/rake-task-handling-of-arguments.html

rakeタスクの作り方

https://yatta47.hateblo.jp/entry/2016/02/19/232718


タスクを生成

$ rails g task reminder_task

次にコントローラーを生成

$ rails g controller webhook kokodayo

description(説明)とtask(タスク)を記述

lib/tasks/reminder_task.rake

namespace :reminder_task do
  desc "ここにタスクのお題"
  task :koko => :environment do
    webhook = WebhookController.new
    puts webhook.kokodayo
  end
end

見てきた記事でモデルにアクセスする時はenvironmentが

必要と書いてて、てっきりモデルはMVCのMの事だと思っていた

けどそうではないみたい


次にWebhookcontrollerのアクションを定義

app/controllers/webhook_controller.rb

def kokodayo
    puts "メッセージ"
end

ここでrakeタスクに追加されているか確認

$ rake -T
rake reminder_task:koko               # ここにタスクのお題

追加されているか確認が出来たら

$ rake reminder_task:koko

「メッセージ」が出力されたら成功!!

色々調べてエラーとの戦いやったから出力された時嬉しかった(☝︎ ՞ਊ ՞)☝︎


次に、今のままだとLINE Message API

コードを書き込んだ時にローカルで確認が出来ないから

環境変数を設定してローカルでも確認出来る様する。

環境変数に関する記事はこちらを参考にしました

【Ruby on Rails】GitHubに公開したくない変数や値を隠してpushする方法 - Qiita

Ruby | dotenv gem で 環境変数をスマートに管理 #ruby #dotenv - Qiita

環境変数の設定

rails環境変数を設定するには

gem 'dotenv-rails'

をインストールだけどもう既にインストールしてあるから

今回はしなくても大丈夫!

環境変数を定義

dotenvでは.envというファイルの中に書いてあるデータを参照

.envをアプリケーションディレクトリのルートディレクト

(appやdbやGemfileがあるディレクトリ)に作成し、

公開したくないデータを定義します。

LINE チャネルのTOKEN SECRET IDをセットする。

LINE_CHANNEL_SECRET='xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
LINE_CHANNEL_TOKEN='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
LINE_USER_ID='zzzzzzzzzzzzzzzzzzzzzz'

.gitignore

/.env

Webhookcontrollerのkokodayoアクションを書き換える

LINE Message APIドキュメントに記載されているコードを参照する

Messaging API

app/controller/webhook_controller.rb

class WebhookController < ApplicationController
  require 'line/bot'

def kokodayo
  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)
  end
end

これでherokuにpushをしたら10分間隔で通知が来るはず!

こない!こない!こない!

herokuの環境変数を設定し直したり、チャネルの設定を見直したり、自分のコードを見直したり

それでも通知がこない!

そこでherokuスケジューラーの設定を変更

f:id:muuuuukun:20181224205717p:plain

rake reminder_task

rake reminder_task:koko

にしたらしっかりと10分間隔で通知が出来ました。

2020年プログラミング必修化に先手!家庭で学べるレゴ ロボット。