Mattermostでサイト更新

最近当社はMattermostでWebサイトの更新を行っています。

…といってもなんのこっちゃ?と思われるかもしれませんが。

Mattermostというのは、オープンソースのSlackクローンです。Slackは最近ビジネス用途のチャットサービスとして話題になっていますね。それを自社のサーバーで運用できるものです。

アズシエルでもSlack無料版を使ってみたんですが、イマイチみんなが使うわけではなかったですし、無料版では連携できる外部サービス数に制限があるとか、10,000件以上投稿すると過去投稿がゴッソリ見えなくなっちゃうらしいとか、じゃあ一生懸命使っても今度はお金かかるのかーと思うと、いまひとつ本気で使ってもどうなんだろう?と思っていたのです。もちろんみんなが便利に使うならお金をかける価値はあるのですけど、最初からそこまでいかないだろうし。

まあアズシエルの場合はサーバーの管理を自分たちでしているわけで、自前でGitLabというソースコード構成管理のサーバーもたててますし、そのGitLabと同じひと達が開発していて連携機能も豊富なMattermostも設置しちゃえ、ということになりまして。

MattermostはSlackと同じくビジネスチャットシステムなので、社内の連絡に使うだけでもメールよりお気軽お手軽だというのはあります。

例えば「お疲れ様です」なんて定型文から入らなくても良いですし (まあメールもいちいちそんな挨拶文が本当に必要なのかな?というのは微妙に疑問なんですが…)、他部署やお客様などアズシエル外のひとからのメールや迷惑メールをかきわけて社内連絡をさがすなんてことをしなくてもいいわけです。

社内文書にするほどでもないけど社内のメンバーで共有したいような内容を、とりえあずMattermostに入れておいて共有する、ということにも使えます。それメールでできるって?いやいやメールは社内外からいろんな情報が来すぎるので、自動フォルダ分けの整理をがんばらないとどこかへ行ってしまって見当たらなくなることもありますし。

バックエンドのデータベースをMySQLにして、ひとてま加えると日本語の全文検索ができるようになるのもいいです。Slackはちょっと日本語の検索が怪しいところもありますしね…。

特にMattermostがいいのは、Slackとほぼ完全互換なWebhook APIを持っていることです。なので、ネットにあまたあるSlackのノウハウで自社Mattermostにいろいろな外部連携システムを好きなだけぶら下げて使うことができるわけです。

そんなわけで、当社の一部のプロジェクトでは、当然Webサイトのコンテンツやプログラムのソースコードを自前のGitLabサーバーで構成管理しているのですが、そこにcommit & pushすると、まずそのプロジェクトのMattermostチームの専用チャンネルにcommitログが配信されるようにしてあります。

次に専用のチャンネルに「update」と入力すると、本番サーバーにGitLabのDeploy用ブランチの内容が本番環境に反映されるようにしてあります。

もちろん、Webhookは認証トークンによるセキュリティ確保だけでなく、MattermostサーバーのIPアドレスからのみ接続可能とし、経路もHTTPSで暗号化しています。

こうすることで、いちいち手動でファイルをSCPなどで1つずつアップロードするときのようにアップロードし忘れることがなくなりますし、 本番サーバーにSSHログインしてsvn fetchしてcheckoutして…みたいなコマンド操作するのも、Linuxサーバーの操作に慣れているひとなら何の問題もありませんが、すべてのひとがそうでもないので、操作ミスが発生しにくくなります。なにより、黒画面はちょっとこわいなーというひとでも問題ありません。

また、GitLabリポジトリの特定ブランチにpushすれば同じようにWebhookで本番サーバーに反映させる、といったこともできることはできるのですが、やはり手元の作業ファイルで問題ないことを確認した上で手動で本番環境に反映させたほうが安心なので。

もちろん、GitLabリポジトリの内容を本番反映するまでにビルドが必要になるプロジェクトではこの方法は使えません。GitLabのCI機能を試しているんですけど、まだちょっとうまく動いていないのですけれどね…。