この記事は Classi Advent Calendar 2018 の25日目です。

会社ではSlackを使っていろんなやりとりをしているのですが、気軽にコミュニケーションが取れるので投稿にはリアクション絵文字を付けることも多いです。「そう言えばどんな絵文字がよく使われているのかな?」と気になったので調べてみました。

↓ いろいろな絵文字が付けられますよね。こういうやつです。
(しんぺいさんの週刊DeveloperSuccess通信が読めるよ!)

週刊デブサク通信

Conversations APIを使おう


slack APIを使って調べていきます。

提供されているAPIの中には、public channelやprivate channel、DMなどをそれぞれ個別に取得できるAPIもあるんですが、いちいち使い分けるのは面倒です。これらをまとめてダックタイピングできるConversations APIというものがあって、これを使うと便利でした。
https://api.slack.com/docs/conversations-api

ダックタイピング

例えばpublic channelの一覧を取得するAPIのページには、こんな記載もあるので従いましょう。

> Don't use this method. Use conversations.list instead.

Rubyで実装


Rubyだったら slack-ruby-client というgemがあるので、これを使ってみます。
こんな流れで、使われている絵文字のランキングを調べます。

  1. conversations.listでチャンネルの一覧を取得する

  2. 特定のチャンネルに対して、conversations.historyでチャンネルのメッセージ一覧を取得する

  3. そのメッセージにスレッドがあれば、conversations.repliesでスレッド情報も取得する

  4. それぞれのメッセージに付けられた絵文字の回数をカウントする

  5. ランキング上位の絵文字を表示する

チャンネルのメッセージは直近のものを1000件取得しています。コードはこちら。
slack-emoji-checker
require 'slack-ruby-client'
require 'pry'

Slack.configure do |config|
  config.token = ENV['SLACK_API_TOKEN']
end

reaction_counts = Hash.new { |h,k| h[k] = 0 }

client = Slack::Web::Client.new

client.conversations_list(types: 'public_channel,private_channel', exclude_archived: true,  limit: 1000).channels.each do |channel|
  next unless channel.name == ENV['TARGET_CHANNEL']
  p channel.name

  history = client.conversations_history(channel: channel.id, count: 1000)
  history.messages.each do |message|
    #p message.text

    # メッセージにリアクションがあればカウントする
    if message.reactions
      message.reactions.each do |reaction|
        reaction.name.sub!(/::skin-tone-\d/, '')
        reaction_counts[reaction.name] += 1
      end
    end

    # メッセージがスレッドであれば、スレッドを取得する
    # スレッド内のメッセージににリアクションがあればカウントする
    if message.reply_count
      thread = client.conversations_replies(channel: channel.id, ts: message.ts, limit: 20)
      thread.messages.each do |message|
        next if message.ts == message.thread_ts

        if message.reactions
          message.reactions.each do |reaction|
            reaction.name.sub!(/::skin-tone-\d/, '')
            reaction_counts[reaction.name] += 1
          end
        end
      end
    end
  end
end

reaction_counts.sort { |(k1,v1),(k2,v2)| v2 <=> v1 }.each_with_index do |(k,v), i|
  exit if i >= 10
  puts "#{i+1}位 :#{k}:"
end

結果発表


結果はどうなったでしょうか!?

まず、全メンバーが参加しているチャンネルの結果です。🎉や👍など、ポジティブなものが多かったです。8位の "めっちゃええやん" は使い勝手もすごく良いので重宝してます。関西の人がそんなに多いわけではないと思いますが。。松岡修造はガッツポーズのような意味合いと思われます。

絵文字ランキング(全メンバーチャンネル)

次に、エンジニアチャンネルの結果です。お願いする系が多いからか、🙇‍♂️が1位でした。10位の "感謝" もよく使います。大事ですね。そしてよく見ると先ほどのランキングにもこちらのランキングにも "神" が登場しています。たしかによく使う…。

絵文字ランキング(エンジニアチャンネル)

まとめ


ということで、社内Slackでどんなリアクション絵文字が使われているかを見てきました。よく使う絵文字ってその会社の雰囲気を表しますよね。

ちなみに、同じ絵文字でもいろんなバリエーションがありますw

絵文字バリエーション

バリュー(行動指針)絵文字も作られていて、日々使われているのでほっこり。その会社独自のカスタム絵文字って面白いな〜!これからもどんどん追加していきたいと思っています。

一緒に絵文字を追加したいよ!という方はこちらから是非。
Classi株式会社の採用/求人一覧 - Wantedly
このエントリーをはてなブックマークに追加