KEPPLE CREATORS LAB
KEPPLE CREATORS LAB を紹介する Web サイトです。
https://lab.kepple.co.jp/
こんにちは! KEPPLE CREATORS LAB でエンジニアをやっている小須田です。
株式会社ケップルは社内チャットツールに Slack を使用しています。
ある人が言いました「社内スタンプで会社の雰囲気が分かる」と。ケップルでは日々業務をしていく中で、リアクションをする時やメッセージ内にスタンプを使用しています。たかがスタンプ、されどスタンプ。そんなスタンプに込められた思いや熱意を紐解くため、社内のスタンプ使用ランキングを調査してみました。
好きなものは先に食べる派なので、先に結果を発表します。
勘の良い方はお察しかと思いますが、私の所属しているプライベートチャンネルが対象で、重複して所属してるメンバーのバイアスがかなりかかっています。なので、実質 KEPPLE CREATORS LAB メンバーの使用ランキングになります。
テキストスタンプランキングとリアクションスタンプランキングのそれぞれを発表します。
お願いする系の土下座や祈りが多数ランクインしていました。みなさん土下座しすぎですね。2位にランクインした 🌝は、LAB のメンバーが無駄に多用するのでこのような結果になったと言えますね 🌝
🌝はWindowsの環境だと、怖い印象になるので他の事業部では評判が良くないとの噂もあります。
▲テキストスタンプランキング
サムアップ👍が堂々の1位でした!サムダウン👎ではなくてホッとしています。素敵, イイね などのお褒めの言葉はリアクションで使いやすいようです。テキストだと少し恥ずかしいけど、スタンプだと伝えられますね 👏
ハートやかわいいのスタンプは #working-parent という働くパパとママのチャンネルがあるのですが、可愛いお子さんの写真へのリアクションでランクインした模様です。
▲リアクションスタンプランキング
たまには、エンジニアらしいことも書こうかなと思ったので、実装の方針や手順を書きます。掻い摘んで説明するので参考程度に。
それでは、Slackのスタンプ使用ランキングを調査していきましょう。Slack には Web API があるのでこちらの API を使って調査していきます。conversations.history でメッセージの履歴とそのメッセージにリアクションしたスタンプが取れるようです。
今回調査対象とするのは、私の所属するプライベートチャンネルとパブリックチャンネルです。加えて、少し大変になってしまうことからスレッド内に投稿されたメッセージは対象外としてます。
スタンプはメッセージ内に表示されるものと、メッセージにリアクションしたものがあるので、この二つの軸で集計していきます。
ざっとこんな感じでやりました。部分的に説明を補足します。
Slack のドキュメント 通りに進めていけば Token は発行できるかと思います。conversations.list と conversations.history を使用するので以下を Scope に追加します。User Token Scopes にも追加するのをお忘れなく。
適当な Node の環境を手元で作って、@slack/web-api のパッケージを使ってAPI叩いていきます。
import { WebClient } from "@slack/web-api";
const webApiToken = process.env.SLACK_WEB_API_TOKEN;
const web = new WebClient(webApiToken);
// チャンネル一覧を取得
const channels = web.conversations.list();
// チャンネル内のメッセージ一覧を取得
const histories = web.conversations.history({ channel: "CHANNEL_ID" });
上記のように叩けます。SLACK_WEB_API_TOKEN には User Token の方を指定してください。
conversations.history のドキュメントでAPIテストできるので、実際に帰ってきたデータを元に調査します。メッセージ内のスタンプは、blocks の中に テキストとスタンプのデータが入っているのでこの中から取得できます。リアクションのスタンプは、reactions の中に入っているのでこれを取得します。
サンプルコードをここに供養します。
import { MessageElement } from "@slack/web-api/dist/types/response/ConversationsHistoryResponse";
function countTextEmoji(conversation: MessageElement) {
const blocks = conversation.blocks ?? [];
for (const block of blocks) {
const filteredElement =
block.elements?.filter((e) => e.type === "rich_text_section") ?? [];
const emojiElements = filteredElement.flatMap((e) => {
return e.elements?.filter((f) => f.type === ("emoji" as string)) ?? [];
}) as { type: string; name: string; unicode?: string }[];
for (const emojiElement of emojiElements) {
// カウントする処理
}
}
}
function countReactionEmoji(conversation: MessageElement) {
const reactions = conversation.reactions ?? [];
for (const reaction of reactions) {
if (reaction.name && reaction.count) {
// カウントする処理
}
}
}
スタンプ使用ランキングで弊社の雰囲気が分かったか分からなかったかはさておき、今後は 🌝の使用率を下げることに尽力していきたいと私は思いました。スタンプ警察として社内の風紀を正します。
余談ですが、執筆時点で 2628 個のカスタムスタンプがあるのですが、そのうちの 1189 個が一人の社員よって生み出されました。とんでもない人がいたものですね 🌚本来の業務をしてほしいです。
せっかくなので、社内のカスタムスタンプをいくつか紹介して終わりたいと思います。
※ 私の勝手な解釈が多分に含まれています。
弊社の代表が一番パワフルなので、もちろん 全力神先 もあります。
パワフルさを感じたらとりあえず使います。
余白とは心の余裕、余白とは人生。みなさん余白を意識しましょう。
「結局余白」スタンプの文字の余白が気になりますが、それもまた余白です。
さあ、本物の「たしかに」はどれでしょう?
全て、:tashikani_: から始まる文字で登録されているので、作った人は相当意地が悪いです。
実は、この中に「たしかに」はありません。残念でした。
筋肉界隈のスタンプもたくさんあるのですが、私は筋トレが嫌いなのでここでは言及しません。「闇の取引」が作成された経緯が気になりますね。個人的に「手の込んだガラクタ」が一番好きです。使ったことないですけど。
スタンプは用法用量を守って正しくお使いください。
KEPPLE CREATORS LAB では一緒にスタンプを作成するメンバーを募集しています。
募集しているポジションの詳細はこちらをご覧ください。
▼KEPPLE CREATORS LAB ブランディングサイト
▼ケップルの求人一覧