Slackスタンプで分かるツクリンクの称賛文化を公開!
こんにちは、ツクリンク株式会社でソフトウェアエンジニアをしている千葉です。
弊社には、日々の感謝や賞賛をSlack上で送り合う「つくぽ」という制度があります。
今回は、その「つくぽ」がどのように使われているのか、実際のスタンプの使用ランキングを通してツクリンクの文化を紹介します。
🍬 「つくぽ」とは
「つくぽ」とは、ツクリンクのコーポレートアイデンティティ(以下CI)を日常的に浸透させるために導入されたピアボーナス制度です。
Slack上で簡単に感謝や称賛を送り合える仕組みになっており、メンバー同士が「ありがとう!」「すごい!」といったポジティブな気持ちをリアルタイムで伝えることができます。
この制度には以下のような特徴があります。
- 感謝や賞賛を見える化: 日常のちょっとした貢献も拾える
- CI(価値観)との紐付け: どんな行動が評価されるのかを共有できる
- リモートでも文化が育つ: Slack上で完結するので、フルリモート環境でも使いやすい
ツクリンクではCIを「設定して終わり」にせず、日常のコミュニケーションの中で自然に浸透させるために、この「つくぽ」を活用しています。

※ 「つくぽ」はCollaというサービスを用いて運用しています
🗒️ 集計方法
今回はSlack APIを使って、「つくぽ」用チャンネルのメッセージを全件取得し、その中に含まれるリアクション(スタンプ)をRubyスクリプトで集計しました。
具体的には以下の手順でデータを収集しました。
-
Slack APIでチャンネルIDを取得
conversations.listを使って対象チャンネルのIDを取得しました。 -
チャンネル内の全メッセージを取得
conversations.historyをページングしながら呼び出し、全メッセージを取得しました(1回の取得件数は最大1000件)。 -
リアクションのみを抽出
取得したメッセージからreactionsフィールドだけを取り出し、すべて1つの配列にまとめました。 -
リアクションを集計してランキング化
抽出したリアクションを絵文字名ごとにカウントし、使用回数の多い順にランキングしました。
実際に使用したスクリプトは以下になります。
require 'net/http'
require 'uri'
require 'json'
SLACK_API_TOKEN = <'Slack APIトークン'>
##
# Slack APIにGETリクエストを送信し、結果をJSONとして返す
#
# @param url [String] Slack APIエンドポイントのURL
# @param params [Hash] クエリパラメータ
# @return [Hash] Slack APIレスポンスをパースしたHash
def slack_get(url, params = {})
uri = URI(url)
uri.query = URI.encode_www_form(params) unless params.empty?
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "Bearer #{SLACK_API_TOKEN}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
JSON.parse(res.body)
end
##
# チャンネル名からチャンネルIDを取得する
#
# @param channel_name [String] チャンネル名(例: "general")
# @return [String, nil] チャンネルID(存在しない場合はnil)
def fetch_channel_id(channel_name)
channels = slack_get('https://slack.com/api/conversations.list', { types: 'public_channel', limit: 1000 })['channels']
channels.find { |c| c['name'] == channel_name }&.[]('id')
end
##
# 指定したチャンネルの全メッセージをページングしながら取得する
#
# @param channel_id [String] チャンネルID
# @return [Array<Hash>] メッセージの配列
def fetch_all_messages(channel_id)
messages = []
cursor = nil
page = 1
loop do
response = slack_get('https://slack.com/api/conversations.history',
{ channel: channel_id, limit: 1000, cursor: cursor })
batch = response['messages'] || []
messages.concat(batch)
puts "ページ#{page}取得完了: #{batch.size}件、累計: #{messages.size}件"
cursor = response.dig('response_metadata', 'next_cursor')
break if cursor.to_s.empty?
page += 1
end
messages
end
##
# メッセージ配列からリアクションだけを抽出して1次元配列にする
#
# @param messages [Array<Hash>] Slackメッセージの配列
# @return [Array<Hash>] リアクションの配列
def collect_reactions(messages)
messages.flat_map { |msg| msg['reactions'] || [] }
end
##
# リアクションを集計してランキング化する
#
# @param reactions [Array<Hash>] リアクション配列
# @param top_n [Integer] 上位何件を取得するか(デフォルト10)
# @return [Array<Array(String, Integer)>] [[絵文字名, カウント], ...] の配列
def reaction_ranking(reactions, top_n = 10)
reactions.each_with_object(Hash.new(0)) { |r, h| h[r['name']] += r['count'] }
.sort_by { |_, v| -v }
.first(top_n)
end
puts '絵文字使用ランキングを出すチャンネル名を入力してください:'
target_channel = gets.chomp
channel_id = fetch_channel_id(target_channel)
abort("#{target_channel} は存在しません") if channel_id.nil?
messages = fetch_all_messages(channel_id)
puts "取得メッセージ件数: #{messages.size}"
ranking = reaction_ranking(collect_reactions(messages))
puts 'ランキング結果:'
ranking.each.with_index(1) { |(emoji, count), i| puts "#{i}位 :#{emoji}: #{count}回" }
👑 ランキングTOP10
集計結果は以下の表になります。
| 順位 | スタンプ | 使用回数 |
|---|---|---|
| 1位 | 8497 | |
| 2位 | 4517 | |
| 3位 | 2589 | |
| 4位 | 1801 | |
| 5位 | 1800 | |
| 6位 | 1298 | |
| 7位 | 1284 | |
| 8位 | 1203 | |
| 9位 | 788 | |
| 10位 | 768 |
※ 集計期間: 2022年12月1日〜2025年11月26日
※ 集計メッセージ件数: 13883件
※ 「自分ごと化・現状突破・越境・前進志向・顧客思考」はツクリンクのCIの5つのバリューです
✏️ 集計結果
1位は圧倒的に「感謝」で全体の約6割がこのスタンプという結果でした。
感謝がとても多い会社だということが、データからもはっきり分かりました。
個人的にも、日々のやり取りの中で「つくぽ」があることで、感謝や気づきを言葉にしやすくなっていると感じています。特に、普段の業務で見えにくい貢献や、裏側で支えてくれている行動が自然と可視化されるため、チームとしての一体感が生まれやすくなる仕組みだと感じています。
📖 まとめ
「つくぽ」は、感謝や称賛を気軽に伝えられるだけでなく、「どんな行動が評価されているのか」をメンバー同士で共有できる仕組みでもあります。
今回の集計では、「感謝」が全体の約6割を占めるなど、日々の感謝が圧倒的に多いことがデータからも明らかになりました。
こうした文化のおかげで、メンバー同士が気持ちよく働き、前向きな行動が自然に連鎖していく職場づくりに繋がっているのだと感じました。
もしツクリンクの文化に興味を持っていただけた方は、ぜひ下の参考リンクから採用情報も覗いてみてください!
Discussion