Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

10分コーディング! Rubyでつくる Slack時報

こんにちは、エンジニアの杉本です。 マネーフォワードではRailsエンジニアとして働いています。

エンジニアはパソコンに向かっている時間が比較的長いため、一日のメリハリがなくなりがちです。

そこで今回は、APIを使ってSlackに時報を流す方法をご紹介しようと思います。

今回はHubot等は利用せず、Rubyを使った方法をお伝えします。  

初期設定

まずはスクリプトの置き場所を作ります。 ディレクトリを作成してGemfileを生成します。

mkdir local_bots
cd local_bots
bundle init

 

SlackAPIを動かす

Gemの導入

次にAPIを動かす為のGemを導入します。 今回はslack-ruby-gemというGemを利用します。 早速Gemfileに設定を追加してインストールします。

Gemfile

source "https://rubygems.org"

gem 'slack-api'
bundle install

 

slack-ruby-gem の動作確認

次にSlackAPIを実際に動かしてみます。 事前にこちらでSlackAPIのtokenを取得しておいて下さい。

local_bots以下にtime_signal.rbを作って実行してみます。 「自分のTOKEN」と「発言したい部屋」は自分の環境に合わせて書き換えて下さい。

time_signal.rb

#!/usr/bin/env ruby
require "slack"

Slack.configure do |config|
  config.token = '自分のTOKEN'
end

Slack.chat_postMessage(text: 'TEST!', channel: '発言したい部屋')

以下のコマンドで自分の指定した部屋への発言がされるかと思います。

chmod 755 time_signal.rb
./time_signal.rb

 

スクリプトを定期実行させる

定期実行にはWheneverというGemを利用します。 Wheneverはcrontabの設定をRubyで記述できるGemです。

Wheneverのインストールと初期設定をします。

Gemfile

source "https://rubygems.org"

gem 'slack-api'
gem 'whenever'
bundle install
mkdir config
wheneverize

wheneverizeを呼ぶとconfigフォルダにschedule.rbというファイルが生成されます。 そこにcrontabの設定を記述していきます。  

schedule.rb

# 平日の10時〜18時に実行
every '0 10-18 * * 1-5' do
  command '~/Documents/local_bots/time_signal.rb'
end

設定が終わったらcrontabに反映させます。

whenever --update-crontab

 

時報処理を作る

最後にtime_signal.rbに時報処理を記述していきます。 今回は下のように書きました。

time_signal.rb

#!/usr/bin/env ruby

require "slack"

Slack.configure do |config|
  config.token = '自分のTOKEN'
end

text = case Time.now.hour
       when 10 then '10時: 今日も頑張りましょう'
       when 11 then '11時: 午前中もうひと踏ん張り!!'
       when 12 then '12時: ++ ランチタイム ++'
       when 13 then '13時: 午後も頑張りましょう'
       when 14 then '14時'
       when 15 then '15時: ++ おやつの時間 ++'
       when 16 then '16時: 午後も3時間経過、今日の目標の達成具合を確認しよう'
       when 17 then '17時'
       when 18 then '18時: 一日もあと少し、集中しましょう!!'
       end

Slack.chat_postMessage(text: text, channel: '発言したい部屋')

これで時報が流れてくれるはずです。

スクリーンショット 2015-02-16 15.38.08    

最後に

マネーフォワードでは様々な技術を使って仕事環境を改善していけるエンジニアを募集しています。 みなさまのご応募お待ちしております!

マネーフォワード採用サイト https://recruit.moneyforward.com/

Wantedly https://www.wantedly.com/companies/moneyforward