はじめに
ゆる〜く学ぶ。みんなの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編
本ページ
7:Herokuデプロイ〜自動化編
https://qiita.com/newburu/items/0a8bb02e1e8c8fe737c7
今回やる事
- 登録された問題からランダムで問題を呟くSlackBOTを作ります
SlackBOTを作ります
1. SlackにBOTを追加します。
BOTのトークンが必要になりますので、
以下のURLからBOTを追加し、トークンをメモしておいて下さい。
https://api.slack.com/bot-users
2. ランダムで問題を取得するメソッドを追加します。
まずは、モデルに必要なメソッドを追加しましょう。
※もちろん、selfをつけてクラスメソッドですね!
def self.random()
Question.all.sample
end
うん、これは、一度全レコードを取得しちゃうので、メモリ圧迫するし遅いからダメですね。。。
def self.random()
Question.find( Question.pluck(:id).sample )
end
というわけで、先にIDをランダムに決めてから取得する方法に変更します。
3. Slackに呟くタスクを追加します。
SlackAPI用のGem(slack-api)があるので追加します。
gem 'slack-api'
まずは、rails gでタスクを新規作成します。
rails g task slack_bot
作成されたファイルに処理を追加します。
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
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: 'times_にゅーぶる', username: 'FE問題_出題BOT')
end
end
4. 確認しましょう
まずは、rakeタスクとして登録されているか確認しましょう。
$ rake -vT
〜 略 〜
rake slack_bot:random_question # ランダムに問題をSlackに書き込む
〜 略 〜
では、実行!
$ rake slack_bot:random_question
Slackを確認し、こんな感じの表示されればOKです!
※事前にブラウザから、問題を登録しておく必要があります。
今回はここまで
ありがとうございました!
次回は、このSlackBOTを定期的に実行する環境を作りましょう!