松島浩道メールやIRC、Skypeといったコミュニケーションツールに変わって、最近急速に利用者を増やしているのがSlackに代表されるチャット型コミュニケーションツールだ。今回はオープンソースで公開されているSlack風コミュニケーションツール「Rocket.Chat」および「Mattermost」を紹介する。Twitterのような気軽にコミュニケーションを取れるツールを開発現場へソフトウェア開発の現場で利用されているコミュニケーションツールとしては、電子メールがもっともメジャーだろう。電子メールは低コストでさまざまな環境で利用でき、テキストだけでなくファイルを添付することも可能だ。電子メールを使ったことがないという人は少数であるため、利用するにあたっての学習コストが低い点もメリットだ。電子メールでのコミュニケーションは内容が冗長になりやすいというデメリットもある。そのため、大量のメールが飛び交うような環境ではそれらに目を通すだけでも大変だ。状況によってはメールを送信してから送信先に届くまでに時間がかかる場合がある。そのため、リアルタイム性が求められる場合には使いにくい。IRCはいわゆるテキストチャットツールであり、ほぼリアルタイムでやり取りができる点が特徴だ。長文のやり取りには向いていないが、その分気軽に投稿できるというメリットもある。IRCは現在でも多くの利用者がいるものの、チャットルームやユーザーの管理機能が貧弱であり、管理が難しいというデメリットがあった。2000年代半ばから普及し始めたSNSはオンラインで他人と容易にコミュニケーションを取れるシステムを提供しており、このようなシステムをビジネスの現場向けに提供する「Yammar」や「HipChat」といったサービスが登場し始めた。近年では、「Slack」が使い勝手の良さから人気を博すようになり、これらツールを導入する企業が増えている(図1)。Slackのメイン画面YammerやHipChat、Slackといった新しいコミュニケーションツールの特徴は、ユーザーはTwitterやFacebookなどのSNSと同じような感覚で利用できるため導入コストが低く、さらに利用者やチャットルームの管理が用意である点だ。これらツールは検索機能にも注力されており、過去の投稿アーカイブから必要な情報を見つけやすくなっている。外部ツールとの連携機能も充実しており、監視ツールやビルドツールと連携させ、アラートや各種通知をチャットルーム内に自動投稿させる、という使い方も増えている。オンプレミスでSlackと同様のサービスを構築できるオープンソースソフトウェア現在、このようなチャット型のコミュニケーションツールでもっとも有名なのがSlackだろう。Service)」型のクラウドサービスとして提供されているため、管理の手間が少なく簡単に導入できる。これらは商用サービスとして提供されており、フル機能を利用しようとすると一定のコストが必要となる。無料で利用することも可能だが、その場合機能制限が加えられることとなる。クラウドサービスの場合投稿内容はすべてサービス提供側が管理するサーバー内に保管されることになる。これらが漏洩する可能性は低いとは思われるが、開発プロジェクト内でのやり取りが外部に保存されるのを好ましく思わないユーザーもいるだろう。業務の現場ではセキュリティ対策の観点から外部に情報を持ち出すことやインターネットへのアクセスが制限されている場合があり、そういった環境では利用が難しいという問題もある。いったケースに向け、自分達で管理しているサーバー内で同様のサービスを提供できる、オンプレミス向けのコミュニケーションツールも登場している。今回はこのようなオンプレミス型のコミュニケーションツールのうち、オープンソースで公開されており評価も高い「Rocket.chat」および「Mattermost」を紹介する。「Rocket.Chat」を使ってみるまずRocket.Chatだが、こちらは「究極のオープンソースWebチャットプラットフォーム」を謳ったチャットツールだ(図2)。基本機能はほぼSlackと同様で、UIも似ている。X/Linux向けのデスクトップクライアントも提供されている点もSlackと近い。実装言語はNode.jsで、データベースにはMongoDBを採用。アプリケーションフレームワークにはMeteorが使われている。そのため、これらの技術に関する知識があればカスタマイズしやすい。7でのインストール方法を紹介する。Rocket.Chatでは、前述のとおりMongoDBおよびNode.jsを使用しているため、まずこれらのインストールが必要だ。curlやGraphicsMagicも必要となる。これらの一部はCentOSの標準パッケージとしては提供されていないが、EPELというパッケージリポジトリを利用すれば容易に導入が可能だ。EPELを利用していない場合、下記のようにしてリポジトリを追加できる。https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmEPELを利用できる状態になったら、yumコマンドで下記のように必要なパッケージをインストールする。GraphicsMagick依存するツールやライブラリのインストールが完了したら、続いてRocket.Chat本体のインストールを行う。Rocket.Chatのダウンロードページに掲載されているダウンロードURL(https://rocket.chat/releases/latest/download)から以下のように最新の安定版リリースアーカイブをダウンロードする。https://rocket.chat/releases/latest/downloadダウンロードしたアーカイブでは「bundle」というディレクトリ内にソースコードやライブラリ一式が含まれているので、アーカイブの展開後、このディレクトリを適当なディレクトリに移動する。今回は「/opt/rocket.chat」という名前にリネームした。/opt/rocket.chat続いて、npmコマンドを使って依存する外部ライブラリをインストールする。installまた、今回はRocket.Chatを「rocketchat」というユーザー/グループで実行することにする。「rocketchat」ユーザーおよびグループを作成し、Rocket.Chatのディレクトリ内のファイル/ディレクトリの所有者をこのユーザー/グループに変更する。/opt/rocket.chat以上でインストール作業は完了だ。続いて、Systemdを使ってRocket.Chatをサービスとして実行できるよう設定ファイルを用意する。「/etc/rocket.chat」というディレクトリを作成し、ここに「rocketchat.env」という名前で設定ファイルを作成する。/etc/rocket.chat/rocketchat.env/etc/rocket.chat/rocketchat.envファイルの中身は以下のようになる。MONGO_URL=mongodb://localhost:27017/rocketchatROOT_URL=http://<ホストのIPアドレス>:3000/PORT=3000続いて、Systemdの設定ファイル「/etc/systemd/system/rocketchat.service」を作成する。/etc/systemd/system/rocketchat.serviceこのファイルの中身は次のようになる。/opt/rocket.chat/main.jsEnvironmentFile=/etc/rocket.chat/rocketchat.envStandardOutput=syslogStandardError=syslogSyslogIdentifier=rocketchatUser=rocketchat[Install]WantedBy=multi-user.target最後にsystemctlコマンドで設定を反映させ、MongoDBおよびRocket.Chatを起動させる。status」コマンドで正しくサービスが起動できているかを確認しておこう。Server...また、今回使用する3000番ポートにアクセスできるようファイアウォールの設定も行っておく。firewalldを利用している場合、下記で一時的に3000番ポートを有効にできる。3000/tcpRocket.Chatのユーザー登録とログイン、各種設定Rocket.Chatの起動後、「http://<ホスト名もしくはIPアドレス>:3000」にアクセスすると、図3のようなログイン画面が表示される。ここで「新しいアカウントを登録」をクリックし、メールアドレスおよびパスワード、ユーザー名を登録するとRocket.Chatのホーム画面が表示される(図4、5、6)。Rocket.Chatのホーム画面ここで最初に作られたユーザーに対し自動的に管理者権限が与えられる仕組みなので、サービスを起動したらすぐにユーザーを作成しておこう。ユーザー名はいわゆる「メンション」(ほかのユーザーがそのユーザーに対しての投稿)の際に「@<ユーザー名>」という形で使われるので、簡潔なものにしておくことをおすすめする。チャット画面(チャンネル)のレイアウトはSlackと同様、画面下に投稿するテキストを入力するボックスがあるレイアウトとなっている。画面左側の「チャンネル」横にある「+」をクリックするとチャンネルの新規作成が、「ダイレクトメッセージ」横の「+」をクリックするとほかのユーザーへのダイレクトメッセージを作成できる。指定されたユーザーのみが閲覧できるプライベートチャンネルを作成することも可能だ。ユーザー名横の「∨」をクリックすると、「オンライン」や「離席中」といったステータスを変更できる。ここからアカウントの設定画面や、管理者であれば管理画面を開くことも可能だ(図7)。ユーザー名横のドロップダウンメニューでステータス設定や設定/管理画面へのアクセスが行えるアカウント設定では通知や表示方式などを設定できるほか、プロフィールや登録メールアドレス、アバターなどの変更なども行える(図8)。各ユーザーの権限設定や、HipChat/Slackのデータのインポート、サービス連携、ログ表示、各種機能の管理などの設定が可能になっている(図9)。「Mattermost」を使ってみる続いて、Mattermostについて紹介しよう。こちらは、「セルフホスティング式のSlack代替」を謳っており、より強くSlackを意識しているようだ。Slackの機能をほぼすべて備えており、さらにSlackと一部互換性のあるWebフック機能を提供している(図10)。X/Linux向けデスクトップクライアントも提供されている。そのほか、Slackはチーム毎にアカウント作成が必要だったが、Mattermostでは1ユーザーを複数のチームに所属させることができたり、Markdownによるフォーマッティング、チャネル名に英語以外の言語を利用可能、シンタックスハイライティングなど、非常に多くの機能を備えているのも特徴だ。MattermostはGo言語で実装されており、データベースにはMySQL(および互換データベースであるMariaDB)もしくはPostgreSQLが利用できる。10.0.5以上が必要となる。7の場合、現時点ではこれらは公式パッケージとしては用意されていないが、MariaDBの公式パッケージを利用すれば容易に入手が可能だ。7へのインストールについて紹介する。これ以外の管球へのインストールについては、Rocket.Chatと同様、Mattermostの公式ドキュメントを参照して欲しい。MariaDBの最新版を利用するためにMariaDBの公式リポジトリを利用できるよう、/etc/yum.repos.d/mariadb.repoという設定ファイルを作成する。/etc/yum.repos.d/mariadb.repo設定ファイルの中身は次のようになる。http://yum.mariadb.org/10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1次に、yumコマンドでMariaDBの最新安定版をインストールする。CentOSの公式パッケージでMariaDBをインストールしている場合はいったんMariaDBを停止させておく必要がある。mariadb続いて、適当なディレクトリに以下のような「create_db.sql」ファイルを作成する。create_db.sqlこのファイルには、データベースを作成するための次のようなSQLを記述する。「mmuser_password」の部分は適当なパスワードに置き換えて欲しい。PRIVILEGESファイルを作成したら、mysqlコマンドを使ってこのSQLを実行し、データベースおよびユーザーを作成する。create_db.sql続いて、Mattermost本体のインストールを行う。Mattermost最新版の配布アーカイブ入手URLはダウンロードページに掲載されているので、このURLをコピーし、インストールするサーバーにダウンロードする。https://releases.mattermost.com/3.3.0/mattermost-team-3.3.0-linux-amd64.tar.gzダウンロードしたパッケージを展開すると「mattermost」というディレクトリが作成されるので、これを適当なディレクトリに移動する。今回は/opt/ディレクトリ以下に移動した。/opt/続いて、データ保存先ディレクトリ(/opt/mattermost/data)の作成と、設定ファイル(/opt/mattermost/config/config.json)の編集を行う。/opt/mattermost/data/opt/mattermost/config/config.json内には多くの設定内容が記されているが、ここではデータベース設定のみを環境に応じて修正しておく。下記の「SqlSettings」部分がデータベース設定となっているので、「DriverName」が「mysql」になっていることを確認し、「DataSource」を「”mmuser:<mmuserのパスワード>@localhost:3306/mattermost?charset=utf8mb4,utf8′′」と設定する。データベースとしてlocalhost以外を使用する場合は「localhost」の部分を変更すれば良い。"LogSettings"また、今回はMattermostを「mattermost」というユーザーで実行するので、useraddコマンドでこのユーザーを作成し、各種ファイル/ディレクトリのパーミッションを変更しておく。/opt/mattermost以上でインストール作業は完了だ。続いてSystemdでMattermostサービスを管理するための設定ファイル(/etc/systemd/system/mattermost.service)を用意する。/etc/systemd/system/mattermost.serviceファイルの中身は下記のようになる。mariadb.service[Service]WorkingDirectory=/opt/mattermost/binUser=mattermostExecStart=/opt/mattermost/bin/platformPIDFile=/var/spool/mattermost/pid/master.pidStandardOutput=syslogStandardError=syslogSyslogIdentifier=mattermost[Install]WantedBy=multi-user.target最後にsystemctlコマンドで設定の反映とmattermostサービスの実行を行う。status」コマンドで正しくサービスが稼動しているかどうかも確認しておこう。:最後に、今回使用する8065番ポートにアクセスできるようファイアウォールの設定も行っておく。8065/tcpMattermostのユーザー登録およびシステム管理Mattermostの起動後、「http://<Mattermostが稼動しているサーバーのホスト名もしくはIPアドレス>:8065/」というURLにアクセスすると、アカウント作成画面が表示される。Account」をクリックすると管理者ユーザーが作成される(図11)。続いてチームの選択画面が表示されるが、初期状態ではチームが作成されていないため、なにも候補は表示されない(図12)。Console」をクリックする。Mattermostのチーム選択画面チームの作成画面では、チーム名およびチームのURLを入力する(図13、14)。チーム名にはアルファベットだけでなく任意の文字が利用可能だが、チームのURLにはアルファベット小文字および数字、奪取のみが利用可能となっている。一部の単語は予約されていて使えない(この設定は管理画面から変更可能)。Chromeで設定を行ったところ問題なく設定が行えた。Mattermostの初回ログイン時には簡単なチュートリアルが表示される(図15)。Mattermostへの初回ログイン時には簡単なチュートリアルが表示されるまた、チャット画面はこちらもSlackと同様、画面下にテキストボックスが表示される形になっている。プライベートグループやダイレクトメッセージの作成も可能だ(図16)。画面左側のユーザー名横にある「⋮」をクリックすると、各種メニューが表示される。Settings」画面が表示される。ここではアカウント名やメールアドレスの設定、セキュリティ設定、通知設定のほか、表示をカスタマイズすることも可能だ(図17)。ユーザー名横にある「⋮」をクリックすると、各種メニューが表示されるまた、「Display」内の「Language」で「日本語(Beta)」を選択することで、ユーザーインターフェイスを日本語化できる(図18)。Settings」画面で「Display」をクリックすると言語設定を行える日本語ユーザーインターフェイスはまだベータ段階とのことだが多くの部分が日本語化されており、十分に実用的という雰囲気だ(図19)。Console(システムコンソール)」をクリックすると管理画面(システムコンソール)が表示される(図20)。ここではユーザーやチームに関する制限を設定したり、各種通知機能や統合機能などの設定、カスタマイズなどが行えるようになっている。各種設定を行うシステムコンソールなお、MattermostではルートURL(http://<ホスト名>:8065/)にアクセスしても新規ユーザー登録画面へのリンクは用意されておらず、メニューの「新しいメンバーを招待」からユーザーを個別に招待するか、「チーム招待リンクを入手」で表示される招待用URLを使用する必要がある(図21)。利用も可能さて、今回紹介したRocket.ChatとMattermostだが、どちらも現段階で十分実用的と感じた。Rocket.Chatは初期設定で日本語ユーザーインターフェイスが利用できるが、Mattermostの日本語ユーザーインターフェイスもベータ版とはいえ必要十分なものになっている。どちらもSlackからユーザーやチャット履歴、設定などをインポートする機能も備えている。そのため、すでにSlackを利用している場合でも比較的容易に移行できるだろう。Rocket.ChatもMattermostのどちらもユーザーインターフェイスが十分に洗練されているため、開発者以外のユーザーでも使いやすい。開発者だけでなく、一般的な会社内のコミュニケーションや、それ以外のグループなどの連絡ツールとしても活用できそうだ。