オープンソースのSlack風チャットツール「Mattermost」を実際に使ってみた

ソフトバンクも出資しているSlackは「Eメールキラー」として有名なチャットツールですが、「Slackクローン」と言っていいほどSlackにそっくりなオープンソースのチャットツールとして「Mattermost」が存在します。Mattermostだと自分でサーバーを立てられるということで、実際に自分でサーバーを立ててMattermostを使ってみました。
Mattermost Private Cloud Messaging
https://about.mattermost.com/
今回はGoogle Compute Engineでインスタンスを立て、そこにMattermostサーバーを置きます。導入手順が長いので、先に使用感を軽くまとめておきます。
「Mattermost」の画面はこんな感じ。チャットはマークダウン記法で装飾できます。インストール時は英語ですが、日本語化することができます。左上のハンバーガーメニューから「Account Settings」をクリックして……

左のメニューから「日本語」を選んで「Save」をクリックすればOK。

スマートフォン用のアプリからも接続できます。別途設定が必要ですが、プッシュ通知にも対応しています。

話題ごとにチャンネルが分かれており、複数の話を同時に進めることができます。下の画像の左側では「Off-Topic」「Town Square」「今日のランチ」の3つのチャンネルが確認できます。右側はチャットが流れていく場所で、今は「今日のランチ」チャンネルの内容が表示されています。赤枠部分はヘッダーと呼ばれる場所で、チャンネル名とともに常に表示されます。ここもマークダウン記法に対応しているため、このようにリンクを張ることも可能です。

さて、実際にサーバーを用意していきます。今回はGoogleクラウドプラットフォーム上に用意したインスタンスを使います。Googleクラウドプラットフォームに初めてアクセスするところからインスタンスを作成する部分までは「無料でGoogleのクラウド上にマインクラフトのサーバーを立てて複数人でマルチプレイする方法」を参照してください。名前とゾーン、マシンタイプを決めます。今回は名前を「mattermost」、ゾーンを「asia-northeast1-c」、マシンタイプを「small」にしました。

そのまま下へスクロールし、「作成」をクリック。

「インスタンス一覧」画面から「SSH」をクリックします。

SSHで接続できたらMattermostのマニュアルに従ってインストールしていきます。まずはパッケージを更新します。
sudo apt-get update sudo apt-get upgrade
と順に入力します。


途中で「Do you want to continue?」と聞かれたら「y」と入力してエンターキーを押します。

MySQLのリポジトリパッケージをダウンロードします。
wget https://dev.mysql.com/get/mysql-apt-config_0.8.6-1_all.deb
と入力してエンターキーを押します。

sudo dpkg -i mysql-apt-config*
と入力してリポジトリをインストールします。MySQLのリポジトリの設定が出ますが、このままで良さそうだったのでカーソルキーで一番下の「OK」を選んでエンターキーを押します。

続いて
sudo apt-get update
と入力してパッケージリストを更新します。
さらに
sudo apt-get install mysql-server -y
と入力してエンターキーを押し、MySQLサーバーをインストールします。

途中でルートパスワードを決定するように促されるので、任意のパスワードを決めて入力します。次のステップで使用するのでメモしておきます。

もう一度入力するよう促されるので、先ほどと同じパスワードを入力してエンターキーを押します。

続いてMySQL上でデータベースの設定を行います。
mysql -u root -p
と入力してエンターキーを押し、続いて先ほど決めたルートユーザーのパスワードを入力します。

画面左端の表示が「mysql>」となっていればログインは成功しています。mattermostがデータベースにアクセスするのに使用するユーザーを作成します。
create user 'mmuser'@'%' identified by '********';
と入力してエンターキーを押します。「********」の部分は自分で生成したパスワード文字列に置き換えてください。

続いてmattermostが使用するデータベースを作成します。
create database mattermost;
さらに、先ほど作成したユーザーに「mattermost」データベースの権限を与えます。
grant all privileges on mattermost.* to 'mmuser'@'%';
最後に
exit
と入力してMySQLからログアウトします。

これでMySQLの設定は完了です。次にmattermostのサーバーをインストールしていきます。
wget https://releases.mattermost.com/4.4.3/mattermost-4.4.3-linux-amd64.tar.gz
と入力してmattermostのサーバーをダウンロードします。記事作成時点で最新バージョンは「4.4.3」ですが、今後更新があった場合は2カ所ある「4.4.3」の部分が変更されるはずなので、mattermostの最新バージョンを確認できるページを見て適宜置き換えて下さい。

ダウンロードできたら解凍します。
tar -xvzf mattermost*.gz
と入力してエンターキーを押します。

解凍したmattermostをoptフォルダに移動し、その下にdataフォルダを作成します。Mattermostに投稿されたファイルや画像は全てこのdataフォルダに入ります。
sudo mv mattermost /opt sudo mkdir /opt/mattermost/data
システムにmattermostユーザーとそのユーザーグループを作成し、mattermostフォルダの権限を与えます。
sudo useradd --system --user-group mattermost sudo chown -R mattermost:mattermost /opt/mattermost sudo chmod -R g+w /opt/mattermost

何でもいいのでテキストエディタで「/opt/mattermost/config/config.json」を開き、MySQLへのアクセスを設定していきます。今回はvimを使います。
sudo vi /opt/mattermost/config/config.json

「mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?~~」と書かれた部分を探します。

「i」キーを押してインサートモードにして、「mostest」の部分を先ほどMySQLにログインして作成したユーザー「mmuser」のパスワードに置き換えます。次に、「dockerhost」の部分をMySQLサーバーのアドレスに置き換えます。さらに「mattermost_test」の部分から最後の「_test」を削除します。編集が終わったらEscキーを押してインサートモードから抜け、「Shiftキー+Z」を二回押してvimから抜けます。

「/opt/mattermost/bin」に移動し、「mattermost」ユーザーとしてMattermostサーバーを実行します。
cd /opt/mattermost/bin sudo -u mattermost ./platform

「Server is listening on [::]:8065」と表示されれば起動完了。

最後にsystemdの設定をします。
sudo touch /lib/systemd/system/mattermost.service sudo vi /lib/systemd/system/mattermost.service
と入力し、vimでmattermost.serviceを開きます。

「i」を押してインサートモードにし、下の[Unit]~.targetまでをコピーして貼り付け、Escキーを押してインサートモードを終了した後「Shiftキー+Z」を2回押してvimを閉じます。公式ページのマニュアルからコピーした場合、2箇所ある「postgresql」の部分を「mysql」に書き換えるのを忘れないようにして下さい。
[Unit] Description=Mattermost After=network.target After=mysql.service Requires=mysql.service [Service] Type=simple ExecStart=/opt/mattermost/bin/platform Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost User=mattermost Group=mattermost LimitNOFILE=49152 [Install] WantedBy=multi-user.target

systemdに先ほど作成した新しいユニットをロードしてもらい、ステータスをチェックします。
sudo systemctl daemon-reload sudo systemctl status mattermost.service
出力が以下の通りであればOK。
● mattermost.service - Mattermost Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled) Active: inactive (dead)

sudo systemctl start mattermost.service
と入力してサービスを起動します。
curl http://localhost:8065
と入力してみて「!DOCTYPE~」のようなhtml文が出力されればOK。

sudo systemctl enable mattermost.service
と入力し、インスタンスが立ち上がると同時にMattermostサーバーが起動するように設定します。

次にファイアウォールの設定を行います。外部からMattermostサーバーへアクセスするためにはTCPの8065番ポートを開ける必要があります。まずはインスタンス一覧からインスタンス名「mattermost」をクリック。

途中にある「ネットワークタグ」の設定で「mattermost-server」と記入します。

一番下までスクロールし、「保存」をクリック。

左上のハンバーガーメニューから「VPCネットワーク」を選び、「ファイアウォールルール」をクリックします。

上の「ファイアウォールルールを作成」をクリックします。

名前は「mattermost」など分かりやすいものにしておきます。

下へスクロールし、「ターゲットタグ」に「mattermost-server」、「ソースIPの範囲」に「0.0.0.0/0」、「プロトコルとポート」に「tcp:8065」と入力し、「保存」をクリックします。

ブラウザを立ち上げ、インスタンスの外部IPアドレスを入力して後ろに「:8065」と付けてアクセスします。

メールアドレス、ユーザーネーム、パスワードを決めて「Create Account」をクリックします。

「Go to System Console」をクリックします。

左のメニューから「Configuration」を選び、「Site URL:」に「http://インスタンスの外部IPアドレス:8065/」と入力します。

下にスクロールし、「Save」をクリック。

もう一度「http://インスタンスの外部IPアドレス:8065/」へ移動し、今度は「Create a new team」をクリックします。

チームの名前を決めます。今回は「gigazine」としました。入力したら「Next>」をクリックします。

チームのページへアクセスするためのURLを決めます。ここではチーム名と同じ「gigazine」を選ぶことにしました。入力したら「Finish」をクリック。

これで全ての設定が完了です。今はブラウザでアクセスしていましたが、次は専用のソフトウェアでアクセスしてみます。

AndroidやiOSほか、各種端末用のソフトウェアが用意されています。今回はWindows PCの下にある「DOWNLOAD 64-bit」をクリックします。

ダウンロードした実行ファイルをダブルクリックしてMattermostを起動します。

サーバーの名前とURLを入力し、「Save」をクリック。

IDとパスワードを入力し、「Sign in」をクリックすれば……

アクセス完了です。チュートリアルが始まりますが、ここでは「Skip tutorial」をクリックします。

他の人を同じサーバーに招待するときは左上のハンバーガーメニューから「Get Team Invite Link」をクリックします。

「Copy Link」をクリックしてリンクをコピーし、招待したい人へ送ればOK。

このリンク先へアクセスすると、新しくアカウントを作成することができます。メールアドレス、ユーザーネーム、パスワードを決めて「Create Account」をクリック。

すぐに新しいアカウントで参加できます。このまま新しいチャンネルを作成してみます。左の「PUBLIC CHANNELS」の横にある「+」ボタンをクリックします。

「New Channnel」という画面が出るので「チャンネル名」「チャンネルの目的」「ヘッダー」を入力し、「Create New Channel」をクリック。ヘッダーにはマークダウン記法が使用可能です。

チャンネル名が日本語だったからか、別途チャンネルのURLを決めるよう指示されました。ここでは「lunch」と入力し、「Create Channnel」をクリックします。

新しくチャンネルが作成できました。ヘッダーがちゃんとリンクになっていることが確認できます。

別の人がこの「今日のランチ」チャンネルに参加する場合は、左のメニューの「PUBLIC CHANNELS」の下にある「More...」という部分をクリックして……

「今日のランチ」の「Join」をクリックすればOK。

参加したチャンネルは左のチャンネル一覧に表示され、誰かの投稿があった場合に通知を受け取ることができます。このように、たくさんのチャンネルを使って複数の話題を同時に進行できるのがチャットツールの優れている点です。

順調に導入完了……と思いきや、ここで問題が発覚しました。検索欄に文章の全文を入力すればヒットしてくれますが……

下の画像のように、文章を途中で切ってしまうと引っかからなくなってしまいました。

最後に「*」を付けることで前方一致検索はできました。

しかし、最初に「*」を付けても後方一致検索になりません。

ググってみると「MattermostのMySQLで日本語の全文検索に対応する方法」という、まさに求めていた情報があるサイトが出てきました。このサイトを参考にさくっと修正していきます。
sudo vi /etc/my.cnf
と入力し、my.cnfを開きます。

環境にもよりますが、おそらく新しいファイルが作成されているので「i」キーでインサートモードにし、下のコードをコピーして貼り付けます。
[mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 innodb_large_prefix = ON innodb_file_format = Barracuda innodb_file_format_max = Barracuda
貼り付けたらEscキーでインサートモードを抜け、「Shiftキー+Z」を二回押してvimを閉じます。

設定を反映させるためにMySQLを再起動します。
sudo systemctl restart mysql
続いて再起動が完了したかを確かめます。
sudo systemctl status mysql
下の画像のように、途中に緑色の文字で「active(running)」と表示されればOK。

続いてMySQLにログインします。
mysql mattermost -u mmuser -p
と入力し、続いてMattermostからMySQLにアクセスするのに使用しているユーザーのパスワードを入力します。

表示が「mysql>」となったら
ALTER TABLE Posts DROP INDEX idx_posts_message_txt;
と入力。

続いて以下の文も入力します。
ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram reindex';

これで完了です。実際に試してみると、きちんと部分一致検索を行うことができました。

・関連記事
無料でGoogleのクラウド上にマインクラフトのサーバーを立てて複数人でマルチプレイする方法 - GIGAZINE
スプラトゥーン2などでフレンドと通話できる「Nintendo Switch Online」アプリのボイスチャットは開きっぱなしじゃないと通話が終了する - GIGAZINE
メッセージの改ざんやなりすましを防ぐ無料チャットアプリ「Keybase」 - GIGAZINE
Googleが「Made for iPhone」ならぬ「Made for Google」プログラムをスタート予定 - GIGAZINE
GoogleがAppleに検索のため3年で3倍増の年間3000億円超えを支払っているのにウィンウィンの理由は? - GIGAZINE
・関連コンテンツ
in レビュー, ソフトウェア, Posted by log1d_ts
You can read the machine translated English article I actually tried using the open source S….