🍺

年末年始はSlackのスタンプ人気ランキングで盛り上がろう

2023/12/29に公開

年末年始、みなさんいかがお過ごしでしょうか?
1年間を振り返る施策として、Slackのスタンプの人気ランキングを集計して公開しました。

社内の忘年会で発表した図
とても盛り上がったので、ぜひやってみてください✨

準備

以下URLにアクセスし、SlackのWorkSpaceにApplicationを作成してください。
https://api.slack.com/apps

作成方法は以下の記事が参考になるかと思います。
https://zenn.dev/kou_pg_0131/articles/slack-api-post-message

Applicationのインストールに成功後、User OAuth Tokenをコピーしておいてください。

実行環境

Node.jsが実行可能な環境を用意してください。
下記はv18.18.0の環境で実行しています。

$ mkdir slack-rank-list
$ cd slack-rank-list
$ npm init
$ npm i @slack/web-api dayjs
$ export SLACK_USER_OAUTH_TOKEN={先ほどコピーしたUser OAuth Token}

スクリプト

下記にソースコード全体を記載しています。
https://gist.github.com/hirykawa/77725ee2b71ed34ed78b89f3aca86d69

パブリックチャンネル全ての投稿とそのスレッド内の投稿に付与されたスタンプを種類ごとにカウントするスクリプトになります。
1ヶ月毎に集計してCSVに吐き出します。

// MEMO: 取得したい年を指定
const start = dayjs(`2023-${i + 1}-01 00:00:00`);
const START_UNIX_TIME = start.unix();
const FINISH_UNIX_TIME = start.endOf("month").unix();

2023の部分を2024に変えていただければ来年も利用可能です。

// https://api.slack.com/methods/conversations.list
const result = await client.conversations.list({
exclude_archived: false,
types: "public_channel",
limit: 999,
});

typesにprivate_channelを追加すれば鍵チャンネルの集計もできます。
ただし、実行者が参加しているチャンネルのみになります。

// MEMO: 除外したいチャンネルを指定
if (channel.name === "github") {
continue;
}

if (channel.name === "notion") {
continue;
}

機械的に投稿が流れるだけなど、集計を除外したいチャンネルがあればチャンネル名を追加してください。
実行時間に響くため、サボらずに追加することをおすすめします。

// https://api.slack.com/methods/conversations.replies
// Tier 3 毎分50回以上
await setTimeout(1000);
const threadResult = await client.conversations.replies({
channel: channel.id,
ts: message.ts,
limit: 999,
});

スレッドの取得部分がリクエストが膨大になることと負荷が高いです。
Tier3扱いなので毎分50回付近のリクエストが許可されます。
状況を見てsetTimeoutを変更するなどしてご利用ください。

実行

$ node get_emoji_list.js

弊社のSlackでは約8時間ほどかかりました。
実行完了すると同じディレクトリ内にCSVファイルが月毎に12個生成されます。
あとは月毎で見るなり、まとめて集計したりと利用いただければと思います。

最後に

ちなみに弊社では以下のランキングになりました!
使いやすい「ありがとうございます」がぶっちぎりの1位になりましたね。

あなたの組織ではどんなスタンプが1位ですか?
ぜひ社内に公表してみてください。

Contreaでは一緒にプロダクトを成長させていただけるエンジニアを募集しています。
カジュアル面談からでもお話しさせてください!
https://www.wantedly.com/projects/1526413
https://musubite-job.com/recruitments/Rd5aNJioeaYK

Contrea Tech Blog

Discussion