Slackでの集中力管理 – Slack API で複数のチャンネルを一斉にミュート・ミュート解除する ( Rubyの例 )
大問題
リアルタイムに見たいチャンネル
↓
↓
(この中間がないんだよ‥! 1日1回だけ見たいチャンネルとか)
↓
↓
ミュートするチャンネル
集中力管理は大問題。
大事なことなので二度書いた。さらっと流してほしくない。
同じ問題意識を持っている人は、ちゃんといるようだ。
- Slackにより断片化した集中タイムを取り戻すための、Bot開発 - Qiita
-
集中できる時間にやるべきこと - Qiita
最近ではSlackなどのチャットを用いた開発現場が当たり前になっていると聞きます。私の会社でもチャットツールが導入されていますが、通知の内容を確認していると、意識がそちらに行ってしまい、集中が切れてしまいます。
- チャットやマルチタスクは生産性を40%下げるので依存しない方が良い:はたらきたい。:オルタナティブ・ブログ
これが「大きな問題」だと認識できないのは、そもそも僕らが、 膨大な集中力を奪われながら仕事をすることに、慣れきってしまっているから だと思う。
集中力の高まりには気づきやすいが、低下には気づきにくい。なぜならそもそも集中力が途切れているから。
解決 – Slack API を使えば良い
簡単に出来る!
ということを今日知った。
「えーぴーあい」という響きだけで怖がらないでほしい。手順に従えば初心者でもできるはず。
この記事の場合でいうと、Rubyの実行環境さえあれば。
Rubyスクリプトを使う例 ( slack-silencer )
- 公開のRubyスクリプトがある。これを手元から叩くだけ。
- APIにリクエストを送るだけの簡単な作り。1ファイル。
- この slack-silencer を使う場合は「ミュートするチャンネル」の一覧は、全て slack-silencer で管理していく必要がある
- 「Slackから直接チャンネルをミュートする」など、別の方法でのミュート・ミュート解除などはおこなわない ( slack-silencer をいちどでも使うと、全チャンネルのミュート状態が変更されてしまうため )
スクリプトを取得
Githubレポジトリを clone するなりして、スクリプトを取ってくる。
git clone https://github.com/dopin/slack-silencer
Slack API の LegacyTokenを取得しておく
xoxp-*****-*****-*****-*****
みたいなのを使う、
使用例
特定のチャンネルをミュートする
ミュートするチャンネルを引数に羅列する。
ここで指定していないチャンネルはすべてミュート解除されるので注意。
SLACK_API_TOKEN=xoxp-*****-***** slack-silencer/mute.rb inu saru kiji
特定チャンネルのミュートを解除する
- 「ミュート解除」というアクションがあるわけではない。
- 「ミュートするチャンネル」以外はすべて「ミュート解除」される。
なので inu だけミュート解除したい場合は、前記のリストから inu を外してスクリプトを叩く。 saru kiji は残しておく。
SLACK_API_TOKEN=xoxp-*****-***** slack-silencer/mute.rb saru kiji
全チャンネルでミュート解除
元のミュート状態には戻せないっぽいので注意。
SLACK_API_TOKEN=xoxp-*****-***** slack-silencer/mute.rb
ユースケース
- ずっとミュートするチャンネル
- 1日1回ミュート解除するチャンネル
をリスト管理して、特定の時間にスクリプトを叩いて、ミュート状態を切り替える。
Mac の cron などに登録しておけば、自動で叩いてくれて、いい感じになるはず。あとは時間設定をうまく調整すれば。
願い
Slackなどのチャットツールでは、ユーザーにおける「集中力の管理」が本当に大事だと思っている。
そもそもチャットツールというのは、人の集中力を妨害するもの、気を散らすものだという宿命を背負っているので。
なぜSlack公式で対応していないんだろう? と思うぐらい、本質的な問題だと思っている。
大事なことに集中する―気が散るものだらけの世界で生産性を最大化する科学的方法
ところで Ruby スクリプトの中身はこんな感じ
特別なことはやっていない。
普通に自分が使いやすいように改造もできそう。
#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'uri'
def get_channels(token:)
url = URI.parse "https://slack.com/api/channels.list?token=#{token}"
res = Net::HTTP.get url
json = JSON.parse res
end
def mute_channels_ids(token:, channels: [])
ch = get_channels token: token
ch_ids = {}
ch['channels'].select{ |c| c['is_channel'] && c['is_member'] && !c['is_archived'] }
.map{ |c| ch_ids[c['name']] = c['id'] }
ids = channels.map { |a| ch_ids[a] }
ids
end
def request_mute(token:, channel_ids: nil)
url = URI.parse "https://slack.com/api/users.prefs.set?token=#{token}"
Net::HTTP.post_form url, { name: 'muted_channels', value: channel_ids.join(',') }
end
if __FILE__ == $0
token = ENV['SLACK_API_TOKEN']
abort 'Please set SLACK_API_TOKEN' if token.nil?
if ARGV.nil?
request_mute(token: token)
else
ids = mute_channels_ids token: token, channels: ARGV
request_mute token: token, channel_ids: ids
end
end
参考
-
Slackに気を取られすぎる問題とその解決 - 無理しない感じ
- 記事は 2015年のものだが、2018年11月現在でも動作した。
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2018-11-06
Discussion