ChinoDuino(Chino × Arduino)

自発性のないプログラマーがArduinoと出会って悪戦苦闘する様を綴っていく⇒今はいろいろ(^^;

ついカッとなって、slackで2019年の振り返りをした [会社slack編]

この記事は JSL (日本システム技研) Advent Calendar 2019 - Qiita の12月9日の記事です(でした)。

昨年のカレンダーはこちらから

去年、こちらの記事をみて可視化して振り返りしたいなぁっと思いながら1年経ってしまいました😅

developer.kaizenplatform.com

この機会に、↑の記事も参考にさせてもらい、社内のslackを可視化して、振り返りします。

今回の対象範囲

  • 2019/1/1〜2019/12/11 18時ころまで

総発言数

  • 71,285

月毎の発言数:

  • 01月:3,395
  • 02月:4,719
  • 03月:5,146
  • 04月:6,117
  • 05月:6,723
  • 06月:6,095
  • 07月:5,412
  • 08月:5,565
  • 09月:6,868
  • 10月:8,013
  • 11月:8,995
  • 12月:4,237

f:id:chinoppy:20191223232826p:plain

だんだんと発言数が増えたのは、チャネルごと用途を明確化したり、趣味ごとのチャネルを作ったりしたことによる成果だと思います。そして、10月あたりにまた増えたのは、分報が始まった影響からですかね。

総リアクション数:

  • 38,656(※対象チャネルはpublicチャネルのみ)

今年発言があったチャネル数:

  • publicチャネル:106
  • privateチャネル:3

ランキング

発言数の多かったチャネル Top10

  1. 出退勤:5,974
  2. 雑談:3,657
  3. 社内環境:3,624
  4. 雑談−技術 : 2,030
  5. contact:1,324
  6. 委員会活動共通 : 1,117
  7. announce : 1,085
  8. 社内システム : 1,056
  9. event-pyconjp : 1,024
  10. tele-work : 1,016

f:id:chinoppy:20191222224836p:plain

※プロジェクト関連と分報のチャネル以外

1位の出退勤は、日々、勤怠を入力するので、それほど特別ではなさそうです。雑談はslackのデフォルトにある、randomと同じような用途で使用されています。業務以外にも、交流があるということはいいですね!😁

4位の雑談-技術は、技術的なことを共有するチャネルです。技術的なところでも交流があることがわかりました!

発言数が多いひと

  1. s_kamijo : 7,791
  2. chinoppy : 5,876
  3. takino : 5,586
  4. y_nakazawa : 5,278
  5. nakajima : 3,410
  6. kakita : 2,648
  7. sin_tanaka : 2,581
  8. junya_fukuda : 2,392
  9. t_kobayashi : 2,303
  10. gii-neko : 2,036

f:id:chinoppy:20191223235258p:plain

ここは、結構、予想通りの結果でした。ただ、8位のjunya_fukudaが10月からslackへ参加したことを考えると、怒涛の発言数かもしれませんw

分報の発言数ランキング Top5

  1. 分報_s_kamijo : 2,256
  2. 分報_takino : 1,213
  3. 分報_junya_fukuda : 1,133
  4. 分報_okajima : 869
  5. 分報_kyutatsu : 767

f:id:chinoppy:20191222232248p:plain

こちらも結構、予想通りの結果でした。分報を導入したことにより、発言数が増えたひともいたり、相手がどんな思いで仕事しているとか、趣味などざっくばらんにそのひとの一面をみれて確実に交流が増えたと思います。

使用されたリアクション Top10

順位 リアクション リアクション数
1 f:id:chinoppy:20191222112938p:plain 3,643
2 f:id:chinoppy:20191222113345p:plain 2,331
3 f:id:chinoppy:20191222113318p:plain 2,285
4 f:id:chinoppy:20191222113408p:plain 2,210
5 f:id:chinoppy:20191222113427p:plain 1,609
6 f:id:chinoppy:20191222113446p:plain 1,250
7 f:id:chinoppy:20191222113535p:plain 1,247
8 f:id:chinoppy:20191222113559p:plain 999
9 f:id:chinoppy:20191222113623p:plain 912
10 f:id:chinoppy:20191222113638p:plain 878

※対象チャネルはpublicチャネルのみ

こちらに関しては、みなさん承諾のようなかたちで使っていることが多いようです。あと、あざますや拍手が多いのは、お礼したり相手をお祝いしたり、称賛しているということなので、うれしい結果ですね!

リアクションが多かった発言 Top10

順位 発言 リアクション数
1 はじめまして! 11月1日に入社する、XXXXです。\n\n昨年まで学生で、生物を学んでいたのですが、Web開発に挑戦したくてJSLさんにやってきました。 Web開発のほか、機械学習などにも興味があります。\n\n趣味と言えるほどちゃんと出来てないのですが、将棋やジャグリング、お絵かきが好きです。\n\nWeb開発も社会人としても初心者ですが、1日でも早く貢献できるようになるため頑張りますので、皆様どうかこれからよろしくお願いします! 57
2 レビューしてもらった自転車盗難推測BOTが書類選考通過しました!!:sob:\n\n12/7に発表もあるので引き続き頑張ります!!レビューありがとうございました。:sob::man-bowing: 40
2 もともとは長野のSIerでCADアプリケーションや基幹システムなどの開発をしていました。\n\n\n趣味はゆるーくバンド、ゆるーくキャンプ、ゆるーく自転車です。最近はポッドキャストにハマっています。\n\n新しいiPhoneを予約するか迷っています。。。\n\n長文すみません。よろしくお願いします:palms_up_together: 40
4 【 中途採用者について 11/1(金) 】\n11/1(金)より、新しい社員(中途採用)が当社へ入社します。\n\nお名前:XXXXさん\n年 齢:27歳\n\n準備が出来ましたら、Slackでご本人からご挨拶をしてもらう予定です。\n昼礼等はまた後日お知らせします。 31
5 2019/09/26 22:52\nYY家に第二子が産まれました‼️\n元気な女の子です‼️\n本当に色々とご迷惑をおかけしましたが、あたたかく柔軟に対応・フォローして頂き、本当にありがとうございました:pray::pray::raised_hands::raised_hands::raised_hands: 30
6 <!channel>\nトライブで一度ミーティングを行います。\nみなさんの都合のいい日にちをお願いします。\n:one: 5/8 (水)15時30分〜\n:two: 5/9 (木)15時30分〜\n:three: 5/10(金)15時30分〜 26
6 <!channel>\n\n【 トイレ工事完了 】\n\n6Fトイレのウォシュレット化、窓の鍵交換完了しております。\nご利用可能です。 26
6 初めまして。今年度からお世話になる、ZZZです。\n長野県工科短期大学校 情報技術科から来ました。\nご指導ご鞭撻のほど宜しくお願いいたします! 26
9 <!channel> Slackをスタンダートプランにアプデしました!\n以上、ご連絡まで 25
9 <!channel>\n【 資格試験合格者 のお知らせ 】\n■ Python\n Python3 エンジニア認定基礎試験\n・AAAA\n 2019年11月 合格 25

こちらは、新しい仲間が増えたときが比較的、リアクション数が多くなるようです!ちなみに、トイレのウォシュレット化は私もうれしかったですw

見える化してみて

すべてのプロジェクトでという訳ではないですが、当社は基本、slackで取引先とコミュニケーションをとっています。ただ、slackへの発言者が、ほぼ固定化されているという課題もありました。しかし、改善の取り組みをして、今回、見える化をした結果、成果がみえたのはやはりうれしいですね😆

今回、ランキングで一部の数字しか見えなかったので、最後に個人ごとの発言数もだしてみました。

f:id:chinoppy:20191231120338p:plain

※ x軸がユーザ名ですが、名前は変更しています

だいたい、平均でひとり1年で2,000発言くらいになりました。そうするとひとりの1日の発言は「平均 8(※1)」となり、数字だけみるとちょっと少ないかなぁとも思うのですが、全員、slackが必要かというとそうではないですし、「多いからよい」「少ないから悪い」という訳でもないと思います。

※1 2,000 ÷ 12か月 ÷ 20営業日 = 8

とはいえ、基本リモートでお仕事をしているため、こちらの状況を伝えるということは、大切かなと思います。それと、報告でslackを使うというよりは、コミュニケーション(会話する)でslackを使えるようになっていくと、リモートですが、お互い近い存在になっていくのかなと思いました!

ふと、コミュニケーションしているか?という観点で、分析してみるのも面白いかなと思ったのですが、、、乞うご期待🙏

リアクションに関しては、新しい仲間が増えたときや、お祝い事、うれしいことに関して多く、みんなで喜べる雰囲気もあることもうれしいです😂

今回使用したAPI

APIに必要なtokenは Legacy tokens | Slack で取得しました(非推奨)

search.all

search.all method | Slack

  • 主に発言数の情報を取得するため使用
  • privateチャネルも含めてメッセージを取得できる
  • リアクションの情報は取得できない

paramsはこんな感じで、今回は、queryで取得年月を指定。「count」を「150」とか「200」にするとresponseで「"warnings":["max_page_limit"]」と返却され、すべてのメッセージが取得できないので「100」としました。

search_all_url = 'https://slack.com/api/search.all'

・・・
        # パラメータ例
        params = {
            'token': 'xxxxxxxxxx',
            'query': 'during:2019年12月',
            'count': 100,
            'page': page,
            'sort': 'timestamp',
        }
        time.sleep(2)
        response = requests.get(search_all_url, params)
・・・

pageをインクリメントしながら、レスポンス内の ['messages']['pagination']['page_count'] まで、繰り返しリクエストしてデータを取得しました。

# レスポンス例
{
    "ok": true,
    "query": "during:2019年1月",
    "messages": {
        "total": 3520,
        "pagination": {
            "total_count": 3520,
            "page": 1,
            "per_page": 100,
            "page_count": 36,
            "first": 1,
            "last": 100
        },
        "paging": {
            "count": 100,
            "total": 3520,
            "page": 1,
            "pages": 36
        },
        "matches": [
            {
                "iid": "xxxxx",
                "team": "XXXXX",
                "channel": {
                    "id": "xxxxx",
                    "is_channel": true,
                    "is_group": false,
                    "is_im": false,
                    "name": "xxxxxx",
                    "is_shared": false,
                    "is_org_shared": false,
                    "is_ext_shared": false,
                    "is_private": false,
                    "is_mpim": false,
                    "pending_shared": [],
                    "is_pending_ext_shared": false
                },
                "type": "message",
                "user": "xxxxx",
                "username": "takino",
                "ts": "1548942831.090900",
                "text": "↑ややわかりにくいが多かったです・・・・",
・・・

channels.history

channels.history method | Slack

  • 主にリアクションの情報を取得するために使用
  • 発言も取得できるけど、privateチャネルは取得できない

paramsはこんな感じで、今回は、oldest〜latestで一ヶ月ごと指定。

history_url = 'https://slack.com/api/channels.history'

・・・
        # パラメータ例
        params = {
            'token': token,
            'channel': channels[1],
            'oldest': 1546268400,  # 2019/01/01 00:00:00
            'latest': 1548946799,  # 2019/01/31 23:59:59
            'count': 1000,
        }
        time.sleep(2)
        response = requests.get(history_url, params)
・・・
# レスポンス例
{
    "ok": true,
    "latest": "1548946799.000000",
    "oldest": "1546268400.000000",
    "messages": [
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "<@U3AAL6Q6L>\n次回ギークランチお願いしてもいいですか?",
            "user": "xxxxx",
            "ts": "1548387019.001600",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "ok",
                    "users": [
                        "xxxxx"
                    ],
                    "count": 1
                }
            ]
        },
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "<!channel> リマインド\n↑今日やります",
            "user": "xxxxx",
            "ts": "1548382093.000600",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "+1",
                    "users": [
                        "xxxxx",
                        "yyyyy",
                        "zzzzz"
                    ],
                    "count": 3
                }
            ]
        },
        {
            "client_msg_id": "xxxxx",
            "type": "message",
            "text": "メッセージサンプル",
            "user": "xxxxx",
            "ts": "1547683902.001700",
            "team": "xxxxx",
            "reactions": [
                {
                    "name": "+1",
                    "users": [
                        "xxxxx",
                        "xxxxx"
                    ],
                    "count": 2
                },
                {
                    "name": "fire_engine",
                    "users": [
                        "xxxxx"
                    ],
                    "count": 1
                }
            ]
        },
        {
            "type": "message",
            "subtype": "slackbot_response",
            "text": "<https://docs.google.com/spreadsheets/d/xxxxx/edit?usp=sharing>",
            "user": "xxxxx",
            "ts": "1547005647.000400"
        },
        {
・・・

ソースについては、整備中です・・・乞うご期待😅