📆

[Mattermost Integrations] Plugin基本編

2021/06/19に公開

Mattermost 記事まとめ: https://blog.kaakaa.dev/tags/mattermost/

本記事について

Mattermost の統合機能アドベントカレンダーの第 17 日目の記事です。

本記事では、Mattermost のプラグイン機能について紹介します。Mattermost Plugin は機能が多いため、本日は Mattermost の概要と使い方、Mattermost 公式チームが用意している Mattermost Plugin 開発のためのテンプレートプロジェクトの紹介までを行います。

Mattermost Plugin

Mattermost Plugin は、Mattermost の様々な箇所に存在する拡張ポイントを使ってより幅広く、コアに近い部分に処理を差し込むことができる機能です。今まで紹介してきた統合機能に比べて、下記2点で優れていると個人的に思っています。

  1. 投稿以外のユーザーの行動に対して独自の処理を追加することができる
  2. Mattermost と同じサーバー上で動かすことができ、プロセス管理も Mattermost に任せられる

1.の点については、今まで紹介してきた統合機能は、メッセージの投稿や Slash Command の実行など Mattermost 上で投稿操作が行われた際に独自の処理を実行することができるというものでした。しかし、Plugin 機能では、ユーザーによる投稿操作の他にもチャンネル/チームへの参加/脱退やチャンネル作成時など、Mattermost 上の様々な操作に反応して独自の処理を実行させることができます。また、投稿操作についても、投稿がデータベースに保存される前後で処理を実行することができるため、投稿が作成される前に Reject するようなこともできます。

2.の点については WebSocket API を使うことで実現できたかもしれませんが、WebSocket API を始め Mattermost の統合機能を使うには、Mattermost とは別に統合機能からのリクエストを受け取るサーバーアプリケーションを構築しておく必要がありました。しかし、Mattermost Plugin は、そのプロセス管理を Mattermost 自身が行うため、Mattermost 以外のサーバーを管理する必要はありません。これが2.の利点です。さらに、Mattermost Plugin では Plugin 用の Key-Value ストアも用意されているため、簡単なデータの保持であれば Mattermost に任せることができます。

Mattermost Plugin は、サーバー側で動作するServerサイドのプラグインとブラウザ上で動作するWebappサイドのプラグインがあります。一つの Plugin に両方の機能を持たせても良いですし、どちらか一方の機能だけの Plugin を実装することもできます。

Mattermost Plugin の使用

まず、Mattermost Plugin を使ってみるところから紹介します。

今回は、私も開発に参加している Mattermost 上で投票機能を作成することができるMatterpoll プラグインを手動でインストールしてみます。

https://github.com/matterpoll/matterpoll

matterpoll

設定

まず、Mattermost Plugin を使うには、システムコンソール > プラグイン管理 > プラグインを有効にする有効になっている必要があります。

config plugin

また、手動でプラグインのインストールを行う場合、システムコンソール > プラグイン管理 > プラグインをアップロードするファイルを選択するが有効になっている必要があります。もし、このボタンが無効化されている場合は、Mattermost が起動しているサーバーの Mattermost インストールディレクトリにあるconfig/config.jsonEnableUploadstrueにし、Mattermost を再起動する必要があります。

    ...
    "PluginSettings": {
        "Enable": true,
        "EnableUploads": true,
    ...

インストール

Plugin を使用する設定が完了したら、以下のページからcom.github.matterpoll.matterpoll-1.4.0.tar.gzをダウンロードして、システムコンソール > プラグイン管理 > プラグインをアップロードするからアップロードします。

https://github.com/matterpoll/matterpoll/releases/tag/v1.4.0

(Matterpoll v1.4.0 はMattermost v5.20以上を対象としているため、それより古いバージョンを使用している場合は、Matterpoll も古いバージョンのものをお使いください)

インストールが正常に終了すると、インストール済みプラグインのところに Matterpoll が表示されます。Matterpoll プラグインのところにある有効にするのリンクをクリックすることでプラグインを有効にできます。

install plugin

実行

Matterpoll プラグインが問題なく起動できれば、Matterpoll の機能が利用できるようになっています。Matterpoll は Slash Command で投票を作成するため、チャンネルに戻り /poll help と打つと、Matterpoll のヘルプメッセージが出てきます。

execute plugin

Mattermost Plugin の開発

先ほども見たように、Mattermost Plugin の本体は.tar.gzファイルになります。この.tar.gzファイルには、プラグインのマニフェストファイルや、Server サイド機能のバイナリ、Webapp サイドの.jsファイルなどが含まれています。

毎回一からこれらを用意するのは大変なため、Mattermost チームは Mattermost Plugin 開発用のテンプレートリポジトリを公開しています。

https://github.com/mattermost/mattermost-plugin-starter-template

このテンプレートリポジトリを使った Mattermost Plugin の開発方法は、以下の記事で既に紹介しているため、ここでの説明は割愛します。

Mattermost プラグイン用の GitHub リポジトリテンプレートを使ってみる - Qiita

Mattermost Demo Plugin

Mattermost Plugin では Mattermost の様々な箇所を拡張できますが、Plugin で拡張できる箇所を紹介する Demo 用のプラグインが公開されています。

https://github.com/mattermost/mattermost-plugin-demo

このプラグインをインストールすることで、全てではないですが Mattermost Plugin で拡張可能な箇所を確認できます。

さいごに

本日は、Mattermost Plugin の概要や使い方について紹介しました。
明日からは、Mattermost Plugin で実現できる機能について紹介していきます。

Discussion