オールアバウトTech Blog

株式会社オールアバウトのエンジニアブログです。

オールアバウトエンジニアのSlack人気スタンプを調査してみた

毎年恒例オールアバウトグループの新卒1年目エンジニアが投稿する企画「テックブログ新卒週間2022」を開催します。

今回は、オールアバウトメディア開発部の@eeveeがお送りします。

はじめに

突然ですが、皆さんはSlackをご存知ですか?

株式会社オールアバウトでは、社内のコミュニケーションツールとしてSlackを採用し、業務上のやりとりを行っています。

Slackでは投稿に対して文字で補足や反応する代わりに絵文字でリアクションを取ることができます。

Slack公式の定義にならい、この絵文字でのリアクションのことを絵文字リアクションと呼びます。

社内Slackでは、多種多様なカスタム絵文字が登録され、絵文字リアクションがコミュニケーションの一環として使われています。

社内Slackの絵文字リアクションを集計してみるとチームごとのコミュニケーションの違いが現れておもしろいのではないかと思い、人気絵文字リアクションを調査してみました。

本記事では、その調査方法と結果を紹介したいと思います。 社内Slackのデータを分析してみたい方、またオールアバウトの開発チームのSlack事情気になる!という方の参考になれば幸いです。

自己紹介

私は非情報系学部出身で、業界未経験から新卒入社しており、今回のようなWEB APIを使ったデータ集計は初めての試みでした。 そのためかなりの試行錯誤を経て集計しており、今回ご紹介する実装方針はあくまで一例であるということを前提に読んでいただければと思います。

私は開発部の中でも、オールアバウトで運営するメディアや社内CMSの開発・メンテナンスをするチームに所属しています。 個人作業のときもありますが、基本はペアで開発業務を進めています。

私のチームはエンジニア同士だけではなく、企画グループや社内CMSを利用する記事編集グループなどと部署内外問わず様々なやりとりを行っています。

チーム内での報告・連絡・相談や部署内外でのやりとりでは、「はじめに」で記載したようにSlackを利用しています。

一行で済む返信は絵文字リアクションで伝えて良いこととしたり、問い合わせが来た場合には確認したら絵文字リアクションをとるようにするなど、Slackでのコミュニケーションを重要視しているチームです。

Slackのスタンプを解析してみた

同じ開発部でもチームによって、Slackの使い方の方針は異なるようです。

Slackの絵文字リアクションを集計してみるとチームごとの特徴・働き方の違いが現れておもしろいのではと思い、普段使われている絵文字リアクションのデータを分析してみることにしました。

集計ルール

今回の集計ルールは以下のとおりです。

  • 集計項目
    • メッセージに対する絵文字リアクションの使用回数
    • カスタム絵文字と通常の絵文字どちらも対象とする
  • 集計範囲
    • タイムラインに載っているメッセージのみ集計範囲とする
    • 直近の2000件のメッセージが対象
    • メッセージに含まれる絵文字は絵文字リアクションではないため対象外

全体の実装の流れ

今回のようなデータ分析を行うときはPythonを用いることが多いと思いますが、今回は勉強のために業務で用いるPHPで実装を行いました。

実装の流れはざっくり以下のとおりです。

  1. SlackAPIを利用する準備

    • Slack Appの作成
    • scopeの設定
  2. 実装

    • Slackからメッセージ履歴とカスタム絵文字データを取得
    • 絵文字データを抽出・集計

SlackAPIを利用する準備

SlackAPIとは、他のアプリケーションでのAPIと同様に外部アプリケーションからSlackを操作するための仕組みです。

SlackAPIの中でもWebAPIやEventsAPIなど様々な種類のAPIがありますが、今回はWebAPIを使用します。

公式のドキュメントはこちらです。

api.slack.com

必要なSlackAPIが何なのかはこちらが参考になります。

api.slack.com

まずはSlack Web APIを利用するための準備をしていきます。

Slack Appを作成する

データ調査を行うためにはまず、SlackAppを作成する必要があります。

そのApp用のトークンを発行し、トークンを用いてApp経由でチャンネルのデータを取得します。

ここは検索してみるとやり方をまとめたQiitaがすぐに出てくるのであまり苦労することはありません。 今回は以下のQiitaを参考に設定しました。

qiita.com

また、作成したSlackAppには使いたいメソッドごとに必要な権限を付与しないとAPIを利用できません。

ここで注意する点があります。

付与する権限はUserとBotで別れており、Appをどのように用いるかで利用する権限が異なります。

botとして権限を付与すると、データを取得したいチャンネルにSlackAppを登録しないとAPIを利用できないようです。

使いたいメソッドのリファレンスに、必要な権限も書いてあるためしっかり確認しておきましょう。

実装の流れ

SlackAPIメソッドを使って、メッセージ履歴とカスタム絵文字を取得します。 これに必要なメソッドはそれぞれ、conversations.historyとemoji.listです。

それぞれのメソッドのリファレンスはこちらです。

api.slack.com

api.slack.com

メソッドにはそれぞれ必要な権限があるので、使うメソッドを決めたらそのメソッドのRequired scopesを確認してSlackAppに必要な権限を追加しましょう。

メッセージ履歴とリアクションの取得

APIメソッドを使用する際、引数のchannelには、Slackのチャンネルリンクを発行した際にわかるIDを設定します。

今回は特定のチャンネルを指定してそのメッセージ履歴を取得するので、IDを引数にベタ書きしました。

ほかのやり方としては、channels.listというAPIメソッドもあり、publicチャンネルIDの一覧がとってこれるのでそれを使うこともできると思います。

conversations.historyではメッセージそれぞれに対するリアクションとして絵文字名とその回数を取得できます。 ここでemoji.listメソッドを使い、絵文字リアクションをカウントアップしていきます。

絵文字一覧の取得

emoji.listメソッドで取得できるのはカスタム絵文字の登録名と画像のURLの一覧です。 Slackに登録されているデフォルトの絵文字は入っていません。

もしカスタム絵文字以外のデフォルトの絵文字でもカウント対象としたい場合は、どうすればよいのでしょうか。

いろいろなやり方があるとは思いますが、今回は、カスタム絵文字データから絵文字名を抽出し、絵文字名をキー、回数(初期値として0)をバリューにした連想配列にしてカウント用の絵文字リストを作りました。

そして、conversation.historyで取得した絵文字リアクションが絵文字リストに含まれている場合はそのままバリューをカウントアップし、含まれていないデフォルトの絵文字の場合は絵文字リストに追加してキーとバリューを登録するようにしました。

これで全絵文字がカウントできるようになりました。

カウントする際に気をつけるポイント

conversations.historyメソッドではとってこれるメッセージ数のlimitとしてMAX1000件となっています。

引数で取得したいデータの期間を設定できますが、1000件以上になると意図した期間のメッセージをとってこれないので気をつけてください。

また、conversations.historyメソッドではスレッド内のリプライは基本的に取得できません。スレッド内のリプライであってもチャンネルに送信すれば、タイムラインに載るためメッセージとして取得します。

あくまでもチャンネルのタイムラインに投稿されているメッセージだけを取得するメソッドなので気をつけましょう。

もしリプライもとりたい場合は、conversations.repliesというメソッドをさらに使用する必要があります。

とってこれるデータや必要な引数がconversations.historyと少し異なりますので、リファレンスのテスターから試して確認してみてください。以下がリファレンスです。

api.slack.com

もう一点気をつけたい点として、SlackのAPIメソッドは定期的にアップデートされるということです。 今回紹介したメソッドが廃止されてほかの名前になっていることもありえます。

例として、conversations.historyメソッドができる前は、channels.historyという名前の別のメソッドだったようです。二次情報の記事の内容は参考程度にして、メソッドが存在するかや必要な権限は自分で確認するようにしましょう。

調査結果

それでは、調査結果を載せていきます。

対象のチャンネルは、以下のとおりです。

  • エンジニア同士の連絡用チャンネル
  • 私の所属するメディア開発1グループ
  • AllAbout IDの開発をおもに手掛けるメディア開発2グループ
  • BMP(ビジネスマッチングプラットフォーム)の開発をおもに手掛ける、マーケティング開発グループ

まずはエンジニア同士の連絡用チャンネルの結果です。

大事な連絡事項が多いチャンネルのためか、『確認中』の意味の目の絵文字リアクションが一位でした。確認済みであることがひと目でわかって便利な絵文字リアクションですよね。

特徴的だったのは、クラッカーの絵文字リアクションがランキングに入っていたことです。

これはリリース完了連絡に対するお祝いやねぎらいの意味合いで使用されているようです。ちょっとした気持ちを伝えられるのも絵文字リアクションのよいところですよね!

また、Slackbotのリマインダー通知に対する『それな。』や『済』の絵文字リアクションがランキングに色濃く反映されていたのはおもしろかったです。

ここからは、開発グループごとの結果を見ていきたいと思います。 私の所属するメディア開発1グループの結果です。

前述の通り、積極的に絵文字リアクションを活用するようにルールとして決めていることもあり、スタンプの総数が多かったです。

『ありがとうございます』や『承知しました』だけでなく、『いいね』や『確認中』の意味の目の絵文字も多く、メッセージに対して絵文字リアクションをとる文化が定着していそうだということがわかりました。 また、自分のメッセージに対して絵文字リアクションをとることで自分の状態を表すといった場合もあるため、人気ランキング10位圏外にも多種多様なカスタム絵文字がありました。

続いて、メディア開発2グループです。

人数が少ないこともあってか、1Gと比べてメッセージ自体も絵文字リアクションの総数も少ないことが印象的でした。

1Gでは報告・連絡・相談は基本的にSlackでやりとりしているのに比べて、2Gでは口頭などのSlack以外のコミュニケーションがメインと考えられます。

Slackでは必要最低限のコミュニケーションをしているように感じました。

人気絵文字リアクションの種類は業務連絡が多いことについては似ていますが、1Gとの違いがわかりますね。

続いて、マーケティング開発グループです。

こちらも人気絵文字リアクションの種類はほかと似ていますが、『ありがとうございます』と『いいね』の絵文字リアクションが大半を占めているのが特徴的でした。

メッセージ自体の数は1Gよりは少ないですが2Gよりも多く、Slackでも活発にやりとりされていることがわかりました。

人気ランキング圏外にも、チーム内で感謝を伝えるときに用いるカスタム絵文字があったりしておもしろかったです。

最後に

今回は社内Slackで使われている人気絵文字を調査してみました!

グループごとに雰囲気や働き方の違いがかなり現れていて、おもしろかったです。

また、APIを使って個人的にデータを分析してみたり集計してみたりといったことは初めて行ったので、よい勉強の機会になったと感じました。

試行錯誤する中で妥協した点至らなかった点もあり、現時点での自分の力を図ることもできてよかったです。

新卒一年目を卒業するということで、これからはインプットだけではなく今回のようなアウトプットの機会も積極的に設けていければと思います。