3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Slackでの集中力管理 – Slack API で複数のチャンネルを一斉にミュート・ミュート解除する ( Rubyの例 )

Last updated at Posted at 2018-11-06

大問題

リアルタイムに見たいチャンネル


(この中間がないんだよ‥! 1日1回だけ見たいチャンネルとか)


ミュートするチャンネル

集中力管理は大問題。

大事なことなので二度書いた。さらっと流してほしくない。

同じ問題意識を持っている人は、ちゃんといるようだ。

これが「大きな問題」だと認識できないのは、そもそも僕らが、 膨大な集中力を奪われながら仕事をすることに、慣れきってしまっているから だと思う。

集中力の高まりには気づきやすいが、低下には気づきにくい。なぜならそもそも集中力が途切れているから。

解決 – 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公式で対応していないんだろう? と思うぐらい、本質的な問題だと思っている。

大事なことに集中する―気が散るものだらけの世界で生産性を最大化する科学的方法

image.png

ところで 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

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

3
7
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
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?