オープンソースのチャット型コラボレーションツール「Rocket.Chat」や「Mattermost」を使ってみよう



 メールやIRC、Skypeといったコミュニケーションツールに変わって、最近急速に利用者を増やしているのがSlackに代表されるチャット型コミュニケーションツールだ。今回はオープンソースで公開されているSlack風コミュニケーションツール「Rocket.Chat」および「Mattermost」を紹介する。

Twitterのような気軽にコミュニケーションを取れるツールを開発現場へ

 ソフトウェア開発の現場で利用されているコミュニケーションツールとしては、電子メールがもっともメジャーだろう。電子メールは低コストでさまざまな環境で利用でき、テキストだけでなくファイルを添付することも可能だ。また、電子メールを使ったことがないという人は少数であるため、利用するにあたっての学習コストが低い点もメリットだ。

 しかし、電子メールでのコミュニケーションは内容が冗長になりやすいというデメリットもある。そのため、大量のメールが飛び交うような環境ではそれらに目を通すだけでも大変だ。また、状況によってはメールを送信してから送信先に届くまでに時間がかかる場合がある。そのため、リアルタイム性が求められる場合には使いにくい。

 いっぽう、ソフトウェア開発者の間で古くから使われているコミュニケーションツールとしてIRC(Internet Relay Chat)がある。IRCはいわゆるテキストチャットツールであり、ほぼリアルタイムでやり取りができる点が特徴だ。長文のやり取りには向いていないが、その分気軽に投稿できるというメリットもある。

 IRCは現在でも多くの利用者がいるものの、チャットルームやユーザーの管理機能が貧弱であり、管理が難しいというデメリットがあった。いっぽう、2000年代半ばから普及し始めたSNSはオンラインで他人と容易にコミュニケーションを取れるシステムを提供しており、このようなシステムをビジネスの現場向けに提供する「Yammar」や「HipChat」といったサービスが登場し始めた。また近年では、「Slack」が使い勝手の良さから人気を博すようになり、これらツールを導入する企業が増えている(図1)。

図1 Slackのメイン画面
図1 Slackのメイン画面

 YammerやHipChat、Slackといった新しいコミュニケーションツールの特徴は、ユーザーはTwitterやFacebookなどのSNSと同じような感覚で利用できるため導入コストが低く、さらに利用者やチャットルームの管理が用意である点だ。

 また、これらツールは検索機能にも注力されており、過去の投稿アーカイブから必要な情報を見つけやすくなっている。外部ツールとの連携機能も充実しており、監視ツールやビルドツールと連携させ、アラートや各種通知をチャットルーム内に自動投稿させる、という使い方も増えている。

オンプレミスでSlackと同様のサービスを構築できるオープンソースソフトウェア

 現在、このようなチャット型のコミュニケーションツールでもっとも有名なのがSlackだろう。Slackはいわゆる「SaaS(Software as a Service)」型のクラウドサービスとして提供されているため、管理の手間が少なく簡単に導入できる。ただし、これらは商用サービスとして提供されており、フル機能を利用しようとすると一定のコストが必要となる。無料で利用することも可能だが、その場合機能制限が加えられることとなる。また、クラウドサービスの場合投稿内容はすべてサービス提供側が管理するサーバー内に保管されることになる。これらが漏洩する可能性は低いとは思われるが、開発プロジェクト内でのやり取りが外部に保存されるのを好ましく思わないユーザーもいるだろう。業務の現場ではセキュリティ対策の観点から外部に情報を持ち出すことやインターネットへのアクセスが制限されている場合があり、そういった環境では利用が難しいという問題もある。

 そういったケースに向け、自分達で管理しているサーバー内で同様のサービスを提供できる、オンプレミス向けのコミュニケーションツールも登場している。今回はこのようなオンプレミス型のコミュニケーションツールのうち、オープンソースで公開されており評価も高い「Rocket.chat」および「Mattermost」を紹介する。

「Rocket.Chat」を使ってみる

 まずRocket.Chatだが、こちらは「究極のオープンソースWebチャットプラットフォーム」を謳ったチャットツールだ(図2)。

図2 Rocket.Chatのメイン画面
図2 Rocket.Chatのメイン画面

 基本機能はほぼSlackと同様で、UIも似ている。また、WebブラウザだけでなくiOS/AndroidアプリやWindows/Mac OS X/Linux向けのデスクトップクライアントも提供されている点もSlackと近い。さらに音声/ビデオチャット機能やファイル共有機能、画面共有機能も備えている。

 実装言語はNode.jsで、データベースにはMongoDBを採用。また、アプリケーションフレームワークにはMeteorが使われている。そのため、これらの技術に関する知識があればカスタマイズしやすい。

Rocket.Chatのインストール

 Rocket.Chatのインストールについては詳しいドキュメントが公開されているが、今回はCentOS 7でのインストール方法を紹介する。

 Rocket.Chatでは、前述のとおりMongoDBおよびNode.jsを使用しているため、まずこれらのインストールが必要だ。また、curlやGraphicsMagicも必要となる。これらの一部はCentOSの標準パッケージとしては提供されていないが、EPELというパッケージリポジトリを利用すれば容易に導入が可能だ。もしEPELを利用していない場合、下記のようにしてリポジトリを追加できる。

# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 EPELを利用できる状態になったら、yumコマンドで下記のように必要なパッケージをインストールする。

# yum install --enablerepo=epel mongodb-server nodejs npm curl GraphicsMagick

 依存するツールやライブラリのインストールが完了したら、続いてRocket.Chat本体のインストールを行う。まず、Rocket.Chatのダウンロードページに掲載されているダウンロードURL(https://rocket.chat/releases/latest/download)から以下のように最新の安定版リリースアーカイブをダウンロードする。

# curl -o rocket.chat.tgz -L https://rocket.chat/releases/latest/download

 ダウンロードしたアーカイブでは「bundle」というディレクトリ内にソースコードやライブラリ一式が含まれているので、アーカイブの展開後、このディレクトリを適当なディレクトリに移動する。今回は「/opt/rocket.chat」という名前にリネームした。

# tar xvzf rocket.chat.tgz
# mkdir /opt
# mv bundle /opt/rocket.chat

 続いて、npmコマンドを使って依存する外部ライブラリをインストールする。

# cd /opt/rocket.chat/programs/server/
# npm install

 また、今回はRocket.Chatを「rocketchat」というユーザー/グループで実行することにする。まず「rocketchat」ユーザーおよびグループを作成し、Rocket.Chatのディレクトリ内のファイル/ディレクトリの所有者をこのユーザー/グループに変更する。

# useradd -r rocketchat -U
# chown -R rocketchat:rocketchat  /opt/rocket.chat

 以上でインストール作業は完了だ。続いて、Systemdを使ってRocket.Chatをサービスとして実行できるよう設定ファイルを用意する。まず、「/etc/rocket.chat」というディレクトリを作成し、ここに「rocketchat.env」という名前で設定ファイルを作成する。

# mkdir /etc/rocket.chat
# touch /etc/rocket.chat/rocketchat.env

 /etc/rocket.chat/rocketchat.envファイルの中身は以下のようになる。

 

MONGO_URL=mongodb://localhost:27017/rocketchat
ROOT_URL=http://<ホストのIPアドレス>:3000/
PORT=3000

 続いて、Systemdの設定ファイル「/etc/systemd/system/rocketchat.service」を作成する。

# touch /etc/systemd/system/rocketchat.service

 このファイルの中身は次のようになる。

[Unit]
Description=Rocket.Chat Server
After=network-online.target mongod.target
Requires=network-online.target

[Service]
ExecStart=/usr/bin/node /opt/rocket.chat/main.js
EnvironmentFile=/etc/rocket.chat/rocketchat.env
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat

[Install]
WantedBy=multi-user.target

 最後にsystemctlコマンドで設定を反映させ、MongoDBおよびRocket.Chatを起動させる。

# systemctl daemon-reload
# systemctl start mongod
# systemctl start rocketchat

 作業後、「systemctl status」コマンドで正しくサービスが起動できているかを確認しておこう。

# systemctl status rocketchat
● rocketchat.service - Rocket.Chat Server
   Loaded: loaded (/etc/systemd/system/rocketchat.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2016-08-30 20:21:49 JST; 3s ago
 Main PID: 26448 (node)
   Memory: 100.0M
   CGroup: /system.slice/rocketchat.service
           mq26448 /usr/bin/node /opt/rocket.chat/main.js

 8月 30 20:21:49 centos10 systemd[1]: Started Rocket.Chat Server.
 8月 30 20:21:49 centos10 systemd[1]: Starting Rocket.Chat Server...

 また、今回使用する3000番ポートにアクセスできるようファイアウォールの設定も行っておく。たとえばfirewalldを利用している場合、下記で一時的に3000番ポートを有効にできる。

# firewall-cmd --add-port 3000/tcp