Slackに代わるオンプレ型チャットツールRocket.Chatを導入する

# Rocket.Chatとは？
オンプレへの導入が可能なSlackのようなチームコミュニケーションツールです。[^1]
無料で使用できる上、自由度も高いため、Slackを何らかの理由で使えない企業にもってこいです。

[^1]: [公式GitHub](https://github.com/RocketChat/Rocket.Chat)です。

# なぜSlackを使わないの？
- ファイルアップロード機能により、顧客情報が漏れることを懸念した。
- 社外からでもSlackだとアクセスできてしまう(スマホなど)
- Slackだとメッセージが無料枠で1万件までしか送信できない。

ここらへんの理由により、Rocket.Chatを導入することとなりました。

# Rocket.Chat vs Slack
※Rocket.Chatはオンプレ版であるとします。

|  |Rocket.Chat  |Slack  |
|---|---|---|
|価格  |無料  |無料（有料あり）  |
|環境  |オンプレ  |クラウド  |
|自由度  |高い  |価格次第  |
|連携性  |低い  |高い  |
|上司を説得  |簡単  |難しい  |

Rocket.Chatは設定や、権限周りが豊富で幅の広い設定が可能です。
Slackほどの他ツールとの連携力はありませんが、Hubotと連携しChatOpsな環境を作ることも可能です。[^2]

[^2]: hubot-rocketchatは[こちら](https://github.com/RocketChat/hubot-rocketchat)から確認できます。

# 導入

１．導入するディレクトリに以下のdocker-compose.ymlを配置

```yaml:docker-compose.yml
version: '2'

services:
  rocketchat:
    image: rocket.chat:latest
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    restart: unless-stopped
    volumes:
      - ./uploads:/app/uploads
      - /etc/localtime:/etc/localtime:ro
    environment:
      - PORT=3000
      - ROOT_URL=http://xx.xx.xx.xx:3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
      - TZ=Asia/Tokyo
    depends_on:
      - mongo
    ports:
      - 3000:3000

  mongo:
    image: mongo:4.0
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     - ./data/dump:/dump
     - /etc/localtime:/etc/localtime:ro
    environment:
     - TZ=Asia/Tokyo
    ports:
     - 27017:27017
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1

  mongo-init-replica:
    image: mongo
    command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
    depends_on:
      - mongo

  hubot:
    image: rocketchat/hubot-rocketchat:latest
    restart: unless-stopped
    environment:
      - ROCKETCHAT_URL=xx.xx.xx.xx:3000
      - ROCKETCHAT_ROOM=GENERAL
      - ROCKETCHAT_USER=bot
      - ROCKETCHAT_PASSWORD=password
      - BOT_NAME=bot
      - RESPOND_TO_DM=true
      - RESPOND_TO_EDITED=true
      - HUBOT_ADAPTER=rocketchat
      - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics
      - TZ=Asia/Tokyo
    depends_on:
      - rocketchat
    volumes:
      - ./scripts:/home/hubot/scripts
      - /etc/localtime:/etc/localtime:ro
    labels:
      - "traefik.enable=false"
    ports:
      - 3001:8080
```

`ROOT_URL=http://xx.xx.xx.xx:3000`のxx部分は、
対象のホストのIPアドレスを持ってきてください。[^3]

２．以下のコマンドを配置したディレクトリで実行

```
$ docker-compose up -d
```



# プロキシに引っかかる場合
プロキシで引っかかる場合は、大体npmかDockerのプロキシ周りではないでしょうか。
以下のサイトが参考になるかと思います。

[proxy環境でnpmを使う方法](https://qiita.com/shogo124/items/dfbc5104f6b35612e838)
[日々プロキシで苦しむ人の為のプロキシ設定まとめ](https://qiita.com/uzresk/items/bc7c4a9dc764390cd5ce)

# 最後に
Hubotを使いこなしたり、他のツールとの連携ができたら記事にしたいと思います。
よいRocket.Chatライフを！



[^3]: `$ ip -4 a`で取得できます。