はじめに
ゆる〜く学ぶ。みんなのWeb勉強コミュニティー。 「にゅ〜ぶる会」を運用中です。
https://newburu.github.io/
そこで、何か教育用のコンテンツが欲しいなぁ〜と思い立ち、今回の企画をスタートしました!
Railsで基本情報技術者試験の過去問題サイトを作ります!
最終目標
- 問題・回答の登録は、Scaffoldで簡易でOK
- APIを用意して、ランダムに問題を抽出する機能を追加する
- TwitterBOT、LINEBOT、SlackBOTが出来たら良いな
履歴
1:構築編
https://qiita.com/newburu/items/ed59f47ac645b19620f6
2:日本語化(i18n)編
https://qiita.com/newburu/items/4f12fdb61bf6cd601545
3:親子関係、登録編
https://qiita.com/newburu/items/f2a20289be5ec1fc1b77
4:親子関係、参照編
https://qiita.com/newburu/items/51b11bd02691efc2cc0d
5:API編
https://qiita.com/newburu/items/89f9f847a2648bdd006c
6:SlackBOT編
https://qiita.com/newburu/items/aeeb9acb453da786bd59
7:Herokuデプロイ〜自動化編
本ページ
今回やる事
- Herokuにデプロイし、定期的にSlackに投稿する設定を行う。
Herokuにデプロイします
1. GitHub、Herokuにプロジェクトを新規作成します。
この辺りは、既に色々情報が溢れていると思いますので、省略させて頂きます。
- GitHubにソース一式をプッシュします。
- HerokuとGitHubを紐付け、Herokuにデプロイします。
- MySQLを追加します。
- DBを作成する。(rake db:migrate)
- DBに問題を登録する。
2. 環境変数を設定しましょう。
デプロイまで完了したら、本プロダクトに必要な環境設定を行いましょう。
その前に、自由に設定変更出来るように、ソースに環境変数を追加しました。
require 'slack'
Slack.configure do |config|
config.token = ENV["SLACK_API_TOKEN"] # BOTのトークンは公開できない為、環境変数で設定します。
end
namespace :slack_bot do
desc 'ランダムに問題をSlackに書き込む'
task :random_question => :environment do
question = Question.random
source = "出典:#{question.category1}年度 #{question.category2} 基本情報技術者試験 午前 問#{question.category3}"
msg = "【問題】\n#{question.msg}\n\nア #{question.answers[0].msg}\nイ #{question.answers[1].msg}\nウ #{question.answers[2].msg}\nエ #{question.answers[3].msg}\n\n#{source}"
# text:出力テキスト、channel:出力先のチャンネル名、username:表示ユーザ名
Slack.chat_postMessage(text: msg, channel: ENV["SLACK_CHANNEL_NAME"], username: ENV["SLACK_BOT_NAME"])
end
end
設定する環境変数は以下の通り。
環境変数 | 内容 |
---|---|
SLACK_API_TOKEN | スラックのBOTトークン |
SLACK_CHANNEL_NAME | 出力先のチャンネル名 |
SLACK_BOT_NAME | 表示ユーザ名 |
3. 定期的に実行する設定を行います。
Herokuに「Heroku Scheduler」というものがありますので、それを追加してください。
設定内容は、以下の通り。
設定値 | 内容 | 補足 |
---|---|---|
実行時間 | 毎日PM3時 | UTCでの設定のため、日本時間(JST)にすると、毎日AM0時 |
実行コマンド | rake slack_bot:random_question |
4. 手動で動かして問題ないか確認しましょう。
heroku run rake slack_bot:random_question --app {Herokuアプリ名}
これで思い通りのチャンネルに投稿されればOKです!
今回はここまで
ありがとうございました!
次回は、基本情報の問題には、表が含まれる場合がありますので、問題に画像を登録出来るようにしたいと思います。