Rails로 기본 정보 기술자 시험의 과거 문제 사이트를 만든다(6:SlackBOT편)

소개



유루~쿠 배운다. 모두의 웹 공부 커뮤니티. "뉴~부루회"를 운용중입니다.
htps // // 네 w부루. 기주 b. 이오/

거기서, 뭔가 교육용의 컨텐츠를 갖고 싶어~라고 생각하고, 이번 기획을 스타트했습니다!

Rails에서 기본 정보 기술자 시험의 과거 문제 사이트를 만듭니다!

최종 목표


  • 문제 및 답변 등록은 Scaffold에서 간단하고 OK
  • API를 준비하고 무작위로 문제를 추출하는 기능을 추가합니다
  • TwitterBOT, LINEBOT, SlackBOT이 가능하면 좋을 것입니다

  • 히스토리



    1: 구축편
    htps : // 코 m / 네 w 부루 / 있어 ms / 에 d59f47 아 c645b19620f6
    2:일본어화(i18n)편
    htps : // 이 m/네 w부루/있어 ms/4f12fdb61bf6cd601545
    3:부모와 자식 관계, 등록편
    htps : // 코 m / 네 w 부루 / 있어 ms / f2 아 20289
    4:부모와 자식 관계, 참조편
    h tps:// 퀵했다. 작은 m / 네 w 불 / MS / 51b11BD02691 그림 FC2 c0d
    5: API편
    htps : // 코 m / 네 w 부루 / 있어 ms / 89f9f847 아 2648 bd d006c
    6:SlackBOT편
     본 페이지
    7 : Heroku 배포 ~ 자동화 편
    htps : // 코 m / 네 w 부루 / 있어 ms / 0 아 8 b02 에 1 8 c8 737 c7

    이번에 할 일


  • 등록 된 문제에서 무작위로 문제를 중첩하는 SlackBOT을 만듭니다

  • SlackBOT 만들기



    1. Slack에 BOT를 추가합니다.



    BOT 토큰이 필요하므로,
    아래 URL에서 BOT를 추가하고 토큰을 기록해 둡니다.
    htps : // 아피. scck. 코 m / 보 t 우세 rs

    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입니다!

    ※사전에 브라우저로부터, 문제를 등록해 둘 필요가 있습니다.

    이번에는 여기까지



    고마워요!
    다음 번에는이 SlackBOT을 정기적으로 실행하는 환경을 만듭니다!

    좋은 웹페이지 즐겨찾기