Posted at

Railsで基本情報技術者試験の過去問題サイトを作る(7:Herokuデプロイ〜自動化編)


はじめに

ゆる〜く学ぶ。みんなの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. 環境変数を設定しましょう。

デプロイまで完了したら、本プロダクトに必要な環境設定を行いましょう。

その前に、自由に設定変更出来るように、ソースに環境変数を追加しました。


lib/tasks/slack_bot.rake

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です!


今回はここまで

ありがとうございました!

次回は、基本情報の問題には、表が含まれる場合がありますので、問題に画像を登録出来るようにしたいと思います。