2
0

More than 5 years have passed since last update.

Railsで基本情報技術者試験の過去問題サイトを作る(6:SlackBOT編)

Last updated at Posted at 2019-06-01

はじめに

ゆる〜く学ぶ。みんなの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をつけてクラスメソッドですね!

app/models/question.rb
  def self.random()
    Question.all.sample
  end

うん、これは、一度全レコードを取得しちゃうので、メモリ圧迫するし遅いからダメですね。。。

app/models/question.rb
  def self.random()
    Question.find( Question.pluck(:id).sample )
  end

というわけで、先にIDをランダムに決めてから取得する方法に変更します。

3. Slackに呟くタスクを追加します。

SlackAPI用のGem(slack-api)があるので追加します。

./Gemfile
gem 'slack-api'

まずは、rails gでタスクを新規作成します。

rails g task slack_bot

作成されたファイルに処理を追加します。

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
  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です!
Slackを確認
※事前にブラウザから、問題を登録しておく必要があります。

今回はここまで

ありがとうございました!
次回は、このSlackBOTを定期的に実行する環境を作りましょう!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0