Mattermost 記事まとめ: https://blog.kaakaa.dev/tags/mattermost/
本記事について
今日から Mattermost の統合機能の開発方法について書いていきます。
Mattermost について
Mattermost は、米国の Mattermost Inc.が開発している Slack Alternative なチャットツールMattermostです。OSS として開発が進められており、誰でも開発に参加することができます。
Atlassian HipChat 亡き後、オンプレミスで運用できるビジネスチャット基盤として勢力を伸ばしており、昨年には投資額が $50M に達し、Y Combinator の Series B 史上最大の投資額を得るなど、その規模を拡大しています。 YC leads $50M Series B in Mattermost as open source Slack alternative - Mattermost - Open Source, On-Prem or Private Cloud Messaging
国内でも(自分の観測範囲だけでも)様々な企業・組織が採用しており、また、Mattermost Inc.と提携し、サービスを提供している企業もいくつもあります。
Mattermost はビジネスチャットの機能だけでも便利なのですが、さらに組織の要望に合わせたカスタマイズを行うことができます。このカスタマイズの方法は多岐に渡るのですが、まとまった情報が公式の英語ドキュメントしかなさそうなので情報源を増やすことを目的に記事を書いていこうと思います。各機能の解説というよりは、その機能を使ってどのようなことが出来るのかを実例と合わせて書いていきたいと思っています。
また、今回書いていく内容は、現在リリースされている Mattermost の最新版 v5.28 で動作確認を行っているものであり、異なるバージョンを使っている場合は公式ドキュメントを参照することをオススメします。
- https://docs.mattermost.com/guides/integration.html
- https://developers.mattermost.com/integrate/getting-started/
概要
1日目の記事は、Mattermost の統合機能の全体像を紹介します。
まず、Mattermost 本体の機能は上図青い四角の Mattermost Server と Mattermost Webapp から成り、Mattermost Server はデータの管理などのコアの機能を果たしており、Go 言語で書かれています。Mattermost Webapp はブラウザやデスクトップアプリの UI の部分であり、React/Redux で書かれています。
Mattermost Server と Mattermost Webapp の間は、初回こそ HTTP でやりとりされますが、その後の通信は基本的に WebSocket で行われています。
この Mattermost のコア機能に対して独自の処理を追加するための拡張ポイントとして、赤字で書かれた Mattermost の統合機能があります。
(1) Incoming WebHook (HTTP)
Incoming WebHook(内向きの WebHook)は、外部アプリケーションから Mattermost へ投稿をするためのエンドポイントを新たに作成する機能です。この新たに作成したエンドポイントに対して既定の JSON を HTTP POST することで、Mattermost 外のアプリケーションから投稿が作成できます。
Incoming Webhook については第 2,3 日目の記事で紹介します。
(2) Outgoing WebHook (HTTP)
Outgoing WebHook(外向きの WebHook)は、Mattermost 上でユーザーによって作成された投稿の情報を外部アプリケーションへ送信する機能です。Mattermost 上での会話に応じて処理を行いたい場合などに使用します。
Outgoing Webhook については第 4,5 日目の記事で紹介します。
(3) Slash Command (HTTP)
Slash Command は、(2) Outgoing WebHook と動作は似ていますが、ユーザーが/
で始まる特殊なコマンドを投稿することで動作させることができる機能です。ユーザーの任意のタイミングで処理を実行させることができるため、Outgoing WebHook よりも使い勝手が良いです。
Slash Command については、第 6, 7, 8 日目の記事で紹介します。
(4) REST API (HTTP)
REST API は、Mattermost 上で管理されているリソースを取得、作成、更新、削除する機能です。一般的な REST API です。HTTP によるリクエストだけでなく、Mattermost Server と Mattermost Webapp 間でやりとりされる WebSocket を購読することもできます。
REST API については、第 10,11 日目の記事で紹介します。
(5) Plugin (Server) (RPC)
Plugin(Server) は Mattermost Server の機能を拡張するための機能です。今まで紹介してきた機能は、基本的に HTTP を通じて Mattermost と外部アプリケーションのやりとりを行う機能でしたが、Plugin(Server)は、Mattermost と同一サーバー上で RPC を通じてやりとりを行う機能です。今まで紹介してきた機能より、より多様な Mattermost 上のイベントとやりとりを行うことができます。
Plugin (Server)については、第 18, 19 日目の記事で紹介します。
(6) Plugin (Webapp)
Plugin(Webapp)は、Mattermost Webapp の機能を拡張するための機能です。ブラウザなどのクライアントアプリ上の Mattermost 画面の見え方を変えることができます。また、Plugin(Server)は Mattermost Server 上の全ユーザー共通の情報を扱う機能でしたが、Plugin(Webapp)により、ユーザーごとに異なる見え方を提供したりできます。
Plugin (Webapp)については、第 20,21 日目の記事で紹介します。
Mattermost の統合機能は大きくわけで以上の5つになるかと思います。また、統合機能とは別に統合機能から作成する投稿の見た目を変えるMessage Attachments
やInteractiveMessage
などの機能もあるため、それらの機能についても触れていきます。