会社にエンジニア専用の「精神と時のチャット部屋」を作った話

# はじめに
会社内の技術力を上げるために何かエンジニア同士で話し合ったり、共有したりしたかった人の物語。

# 序章
今の会社に転職して約半年。
段々と今の会社の雰囲気や業務にも慣れてきて、少しずつ会社の良いところも悪いところも見えてきた。

悪いところの1個の中に「この会社あまりエンジニア同士のコミュニケーションがないな」と僕は思った。
明るく気さくに話す人は多いけど、基本的にあんまり技術の話とかはしない。
勉強会もたまにあったりするけど、業務後だと参加率も悪いし、そもそもあんまり効率的ではない。

そこで別の会社で同じくWeb業界で働いている友人に聞いてみた。
僕：「Aの会社ってエンジニア同士のコミニュケーションってどうなってる？」
A：「みんな自己中な人多いから、勝手に好き勝手チャットで呟いてるよ。そういうの好きな人は積極的に参加してる。そうじゃない人には強制しないかな。」

なるほど...
「勉強会」の違和感はこれだったのかもしれない。
勉強会だとやっぱりどうしても、参加しない人はノリ悪いみたいな流れにもなるし、もっと軽い感じで好き勝手できる方が良いのか。

じゃあ、会社のチャット内でエンジニアが好き勝手発言できて、他と干渉しない「精神と時の部屋」的なものを作ってしまおう。（うちの会社は割と社員のやりたいという声は特に無視されず、禁止もされてないからもう好き勝手やって頂戴状態なのでそこはよかった。）

# 第1章：精神と時のチャット部屋で必要なものを考えた
皆さんが会社で使っているチャットツールは何でしょうか。有名どころは以下の3種類が多いかと思います。

- Slack
- Teams
- Chatwork

APIが使えて優秀なのは「Slack」なイメージ。Slackだともっと色々なことができるけど、うちの会社で使っているのは残念ながら「Chatwork」。

「Chatwork」でもAPIが公開されていて、Webhookとかでまあ最低限なことはできる。
[≫ Chatwork APIドキュメント](http://developer.chatwork.com/ja/)

新しくSlackで立ち上げても良かったが、すでに使われているツールの方が参加も気軽かなと思い、このまま進めることに。

# 第2章：精神と時のチャット部屋で何を話し、どう運用していくのか
さて、チャット部屋を作るは良いが、作ったところでどういう風に話を始めてどういう風に運用するのか。
以前、身内でエンジニア用の勉強会チャットを作ったは良いが、最初は皆積極的に呟くが、次第にチャットから離れていき、最後の通知はもう1年前とかになっている。

>折角、会社に作ったのに運用も利用もされないまま、埋もれてしまうのは嫌だな。。。

じゃあ定期的に自動でBotが呟くようにしてあげれば、毎日通知飛ぶしチャットルームが下に埋もれてしまうのことを防げるのは？と考えた。

ただ、BotもBotで毎日毎日意味のない言葉を呟かせても意味ないなと考えた。
意味のあるBotとは....

# 第3章：意味のあるBotを考える
意味のあるBot...
個人的は、今日の日にちを教えてくれるとか、挨拶してくれるのは意味が無さすぎると思ったのでもうちょい有益なものを考えたかった。

そこで自分の記憶を探った時に、以前Qiitaでこんな記事を書いたことを思い出した。
>[≫ Qiitaのトレンド（ランキング）を取得してSlackに送信する](https://qiita.com/Daara_y/items/c4b01107bc6191b9fbff)

上記の記事は、Pythonのスクレイピング技術を利用して、その日のQiitaのトレンドを取得してSlackに送信するというもの。
これをcronで毎日精神と時の部屋に流してあげれば良いのでは。

- 誰も呟かなくなってもcronは毎日実行されるのでQiitaの記事がにチャットに通知される
- 毎日通知が来ることで暇つぶしに見るきっかけになる
- Qiitaの記事なのでチャット部屋が知識のデータベースになる

やることは決まった。

# 第4章：ChatworkのAPIを使用してBotを作る

もう元のプログラムは作ってあるのでWebhookの部分をchatwork用の書き方に直してあげるだけで良い。
プログラムの詳細は以下の記事をみてください。

>[≫ Qiitaのトレンド（ランキング）を取得してSlackに送信する](https://qiita.com/Daara_y/items/c4b01107bc6191b9fbff)

Chatworkは{room_id}と個人に振られるAPIトークンを使用すれば以下のように簡単に特定のチャットルームに通知を飛ばすことができる。

```pyyhon
# chatworkに送信
payload = {}
headers = {'X-ChatWorkToken': 'xxxxxxxxx'}
url = 'https://api.chatwork.com/v2/rooms/{room_id}/messages'
payload = {'body': f'{title}[info]\n{message}\n[/info]'}
requests.post(url, headers=headers, data=payload)
```

上記のプログラムを上記の記法に合わせて修正して飛ばすだけ。
実際にプログラムを実行すると上記のようになる。
<img width="749" alt="Chatwork_-_Qiita.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253969/b0906c25-f578-76db-10a5-f0bd3d4ca5da.png">

これらの実行をcronで実行するようにする。
※cronで直接、pythonを実行しようとすると怒られたので一旦シェルスクリプトから実行する。

**1:一旦シェルを作成する**

```sh
#!/bin/sh
python /Users/ys/Work/get_qiita_article/get_article.py
```

**2: cronを設定する**
毎朝10時（会社の始業時間）に実行するように設定

```
$ crontab -e
PYTHONIOENCODING = 'utf-8'
LANG = ja_JP.UTF-8
0 10 * * * cd /Users/ys/Batch/; bash -l -c 'sh get_qiita_article.sh'
```

これで毎朝勝手にこのプログラムが実行されて、chatworkに通知が飛ぶようになる。

# 終章：精神と時のチャット部屋を作ってみて

強制的に通知を飛ぶようにしたら、知識を吸収したい、話し合いで切磋琢磨したいという有志が徐々に集まってきました。適当に「これやってみたいねー」なんて気軽な話をしたり、開発会議でアイデア共有だったり、こういうところ学ばなきゃダメだよね。みたいな話をするようになった。

<img width="1095" alt="Chatwork_-_Qiita_-_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253969/f6d83eb5-d45f-84b7-3459-5b13e4d5c568.png">

結果的には成功で良いのか疑問だけど、個人的には目的は果たせた感じはするのでこれで良いかなと。
仕事中はあんまり話しない職業だからこそ、こういう風に雑談しつつ、知識も付いていくので丁度良い温度感でやれている（はず）。上記でも書いているけれど、チャットとしての役割がなくてもBotが動くだけで知識のデータベース代わりにもなるのでまあまあ有益。

# 終わりに
「会社で働く=色々な人と働く」ってことなので、こういう風に少しでも交流する機会が出来たのは個人的によかった。（まだ半年しか働いていないので多分名前も顔も覚えてもらえていない人がまあまあいるから）

また、自分ちょっとくらいなら動くぞ感も会社にアピールできるので。新入社員がやると面白いかもしれないです。（多分ね）

本音言うと実はこれに近い感じにしたかったけどChatworkの仕様上出来なかったのはまた別の話・・・。
[≫ 社内slackにVIPチャンネルを作った話](https://qiita.com/peisuke/items/80984db8b47cd8243019)