出社したらSlackで自動的に挨拶する

これはアクトインディ技師舞台報告書に自分が投稿したものの転載です。

--以下転載--

こんにちは、komatsuです。

この記事はアクトインディ Advent Calendar 2015 の11日目の記事です。 前日の記事がハードコアだったので今日は軽いものを。

さて、弊社では週2日程度のリモート勤務が認められています。 リモートだと居るかいないかが特に分かりづらいためでしょうか、勤務開始時にSlackで挨拶をするのが習慣になっているようです。 が、別に出社しているときでも挨拶はしてよいもののはずです。というかリモートからは社内の様子が分かりにくいので、リモートであろうとなかろうとSlack上で挨拶してくれればいいのになーと思っています。

(※ 勤務開始時間は自由に設定できるため人によってバラバラ)

というわけで出社のときでも挨拶するように個人的に心がけているのですが、出社している安心感からかどうしても忘れがちでした。 忘れないためにリマインドするのも悪くはないのですが、いっそ忘れてもいいように自動化してしまいたいところです。

やってみる

出社時間はまちまちなため、社内の無線LANに入ったときをきっかけにしてSlackに挨拶を投稿すればよさそうです。

SlackのTokenを取得

プログラムからSlackに投稿できるように、Tokenを取得します。 https://api.slack.com/web のAuthenticationでCreate tokenすればokです。

スクリプトを作成

こんな感じ(↓)の雑なスクリプトを書いて ~/hello に置きました。 Wi-Fiの接続先が会社のものだったときに、1日1回まで挨拶をSlackに投稿します。

# 1日1回
require 'date'
path = '/Users/nomnel/hello/last'
return if File.exists?(path) && Date.parse(File.read(path)) == Date.today

x = `networksetup -getairportnetwork en0`.match(/Current Wi-Fi Network: (.+)/)
return unless x
ssid = x[1]
if %w(office).include?(ssid)
  params = {
    token: 'ここにToken',
    channel: '#general',
    text: 'おはようございます',
    as_user: 'true',
  }.map {|k, v| "#{k}=#{v}" }.join('&')

  require 'uri'
  url = "https://slack.com/api/chat.postMessage?#{URI.encode(params)}"
  `curl "#{url}"`

  File.write(path, Date.today.to_s)
end

launchdで自動実行

~/Library/LaunchAgents/hello.plist を作成し、中身を以下のようにします。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>Hello</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/nomnel/.rbenv/shims/ruby</string>
    <string>/Users/nomnel/hello/run.rb</string>
  </array>
  <key>StartInterval</key>
  <integer>60</integer>
</dict>
</plist>

あとは launchctl load ~/Library/LaunchAgents/hello.plist して読み込んでおき、 出社してPCを開けば…

えびでんす

できましたね!

最後に

アクトインディではとりあえず自動化したがる横着なエンジニアを募集しています!