SSTエンジニアブログ

SSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。

社内で使われているSlackの人気絵文字を調査してみた

新年、明けましておめでとうございます!
Slack大好きエンジニアの西尾です!

ところで皆さん、Slack 使ってますか?
弊社では積極的にSlackを活用していて、業務上のやり取りのほかに、カスタム絵文字が毎日のように作られたり、様々なbotが開発されています。
実は私も新人研修で執事botを開発したのですが、それもいつかブログに書こうかなと思ったり…(大ボリュームになりそうですが)

さて今回は、社内Slackで使われている人気カスタム絵文字を調べてみたので、その調査方法と結果を書いていきます!

調査概要

調査概要は以下の通りです。

・メッセージに対するリアクションで使われた絵文字の使用回数を集計する
 (メッセージに含まれる絵文字は対象外)
・カスタム絵文字だけを集計する
・全てのPublicチャンネルが対象
・各チャンネルの最新1000件のメッセージが対象

ちなみに今回は、ワークスペースの権限が「メンバー」の場合を想定しています。
管理者権限以上を持っている場合は、以下のURLからPublicチャンネルの全メッセージを取得できます。
https://slack.com/services/export

私は管理者権限を持っていないので、泥臭くメッセージ履歴を取得していきます…。
とは言っても、SlackのWeb APIを使えば結構簡単にできちゃいます!

調査用スクリプトの作成

今回の調査はPythonでスクリプトを作って実施しました。
ただ、コードを公開するのは恥ずかしいので、概要だけ説明していきます…。
調査結果だけ知りたい方は読み飛ばしてください!

準備作業

まずは調査を行うためのSlackAppを作成(設定)します。
大体は下記のサイト通りに設定すればOKです。

qiita.com

Scopesについては、以下を設定しました。

  • channels:read  ⇒チャンネル一覧を取得する際に必要
  • channels:history ⇒各チャンネルからメッセージ履歴を取得する際に必要
  • emoji:read    ⇒カスタム絵文字一覧を取得する際に必要
  • chat:write:bot  ⇒調査結果をSlackに自動投稿するために設定

Appを作成後、チームにインストールしてトークンを取得しておきます。
(OAuth Access Tokenというもので、 xoxp- から始まる文字列です)

f:id:swime:20181227142732j:plain:w300
絵文字調査くんを作成・追加

チャンネル一覧の取得

まずは調査対象とするチャンネルの「チャンネルID」を取得します。
使用するAPIメソッドは channels.list になります。
channels.list method | Slack

私の場合、PythonでHTTP通信をする際にはRequestsライブラリを使いました。URLに https://slack.com/api/channels.list を指定し、引数に token (SlackAppのOAuth Access Token)を設定してGETリクエストを送ります。

レスポンスはjson形式になっていて、 channels の中の id が各チャンネルのIDとなっています。(チャンネルIDは C から始まる9文字)
ちなみにchannels.listの結果にPrivateチャンネルは含まれません。

カスタム絵文字一覧の取得

次にワークスペースに登録されているカスタム絵文字の一覧を取得します。
使用するAPIメソッドは emoji.list になります。
emoji.list method | Slack

先ほどと同じようにGETリクエストを送るだけで、引数も token を設定するだけです。
レスポンス内の emoji に各カスタム絵文字の名前があるので、それを全て取得します。

各チャンネルからメッセージ履歴を取得し、カスタム絵文字の使用回数を数える

今回のスクリプトのメイン部分となります。
使用するAPIメソッドは channels.history です。
channels.history method | Slack

GETリクエストの引数には token channel count を利用します。
channel には channels.list から取得したチャンネルIDを設定します。
count は取得するメッセージ数の最大値です。MAXが1000なので、私は1000に設定しました。

レスポンスには様々な情報があるのですが、今回はメッセージに対するリアクションだけを取得したいので、messages の中の reactions を見ていきます。
reactions の中の name がリアクションで付けられた絵文字の名前、 count が回数になります。
あとはその絵文字の名前が emoji.list に含まれているかを確認して、使用回数を計算していくだけです。

注意点として、このAPIには1分あたり50件くらいまでのリクエスト制限があるので、for文を回す際には制限にかからないようsleep関数などで休憩を入れてあげましょう。

調査結果をSlackに投稿

チャンネルへの投稿には chat.postMessage のAPIを使用します。
chat.postMessage method | Slack

GETリクエストの引数には token channel text を利用します。
channel に投稿先のチャンネルIDを設定し、text に投稿するメッセージを設定します。
text の文字数が大きすぎると投稿されないので注意が必要です。

調査結果

さてお待たせしました!ここでは調査結果の一部をランキング形式で載せていきます。

総合ランキング

まずは全Publicチャンネルを集計した結果になります。
上位10位はこんな感じでした!

f:id:swime:20181227155949j:plain:w150
総合ランキング

なんとありがとが圧倒的1位…!
皆さん感謝の気持ちを積極的に伝えてるのですね…個人的に少し感動しちゃいました。笑
他は返事以外にも、『お疲れ様』や『いいね!』『よき』など、ポジティブな表現がよく使われていますね!

ちなみに、Publicチャンネルは約210件もありました!
基本的に情報は出来るだけ共有しようという方針から、多くのチャンネルが作られているのだと思います。

general

ここからはチャンネル毎の結果を少しだけ見せちゃいます!
まずは全社員向けの業務連絡が行われるgeneralチャンネルの集計結果です。

f:id:swime:20181227162003j:plain:w150
general内の人気絵文字

結果は予想通りで、業務連絡に対する返事が多いですね。

random

次は全社員向けの雑談が行われているrandomチャンネルです。

f:id:swime:20181227162624j:plain:w150
random内の人気絵文字

generalに投稿するほどではない業務連絡だったり、ネタ的な投稿に対するリアクションが多い印象です。個人的には『かずとよ』をつい使っちゃうのですが、この絵文字の意味については企業秘密です…笑

社内広報チャンネル「スカステ」

つづいては社内広報専用のチャンネル、通称「スカステ」です。(スカイ・ステーションの略だそうです)
このチャンネルでは、社員の活躍や人となりなどが紹介されています。

f:id:swime:20181227164705j:plain:w150
社内広報で人気の絵文字

やはり誉めたりポジティブなリアクションが多いですね!
弊社はちょっとしたことでも誉めてくれる社員が多いので、個人的には居心地よく感じます。

福岡オフィスの雑談チャンネル

そして次は福岡オフィスの雑談チャンネルです。(とは言っても東京勤務の方も結構いますが笑)
このチャンネルでは雑談のほかに、福岡オフィス内の業務連絡も行われています。

f:id:swime:20181227170511j:plain:w150
福岡の雑談チャンネルで人気の絵文字

意外と業務連絡の投稿が多いので、マジメな返答リアクションが多いですね。
あとは飲み会の募集や、食べ物の話題が多いことが分かります。(福岡は美味しいものがたくさんあるけんね…!)

脆弱性診断チームの雑談チャンネル

最後は、主に脆弱性診断チームのメンバーが雑談しているチャンネルです。(診断チーム以外の方も結構いますが)

f:id:swime:20181227172339p:plain:w150
診断チームの雑談チャンネルで人気の絵文字

なんと1位は、『かずとよ』と並んで某ラーメンチェーン店のロゴ画像!(一応モザイク処理してます)
弊社社員のとあるラーメン店に対する愛が伝わってきますね…。(私は行ったことないですが笑)

最後に

今回は社内Slackで使われている人気絵文字を調査してみました!
絵文字の使用率だけでチャンネル毎の特色や会社の雰囲気が表れてて面白かったです。
今回はサクッと調査しただけなので、今度はもっと深く社内Slackの投稿を分析してみたいなぁと思っています。

皆さんも会社や組織のSlackで使われている人気絵文字を調査してみてはいかがでしょうか?