Mattermostはオープンソースのメッセージングプラットフォームです。
当アプリではプラグインを用いて、基本機能やUIを拡張する事が出来ます。
本記事のゴールは、公式のdemo-pluginをビルドしてプラグインを作成し、mattermostに読み込ませることです。
今回使うのは以下のgitリポジトリです。
https://github.com/mattermost/mattermost-plugin-demo
こちらはmattermostが提供しているフロントサイドのデモプラグインで、
プラグインを使って拡張できるUIを分かりやすく教えてくれるものです。
git clone https://github.com/mattermost/mattermost-plugin-demo
上記のコマンドでリポジトリをクローンします
Makefileでコマンドが設定されており、gitディレクトリで以下のコマンドを打つだけで、Lintを通した後にビルドが走り、プラグインのファイルを生成してくれます。
make
このままコマンドを打ってもlintで以下のエラーが起こります。
Running golangci-lint
golangci-lint run ./...
WARN [config_reader] The configuration option `linters.govet.check-shadowing` is deprecated. Please enable `shadow` instead, if you are not using `enable-all`.
server/http_hooks.go:144:14: `Cancelled` is a misspelling of `Canceled` (misspell)
if !request.Cancelled {
^
server/http_hooks.go:171:13: `Cancelled` is a misspelling of `Canceled` (misspell)
if request.Cancelled {
^
server/http_hooks.go:185:14: `Cancelled` is a misspelling of `Canceled` (misspell)
if !request.Cancelled {
^
server/command_hooks.go:228:30: printf: non-constant format string in call to fmt.Sprintf (govet)
Text: fmt.Sprintf("Unknown command: " + args.Command),
^
server/command_hooks.go:280:29: printf: non-constant format string in call to fmt.Sprintf (govet)
Text: fmt.Sprintf("Unknown command action: " + args.Command),
^
server/command_hooks.go:381:30: printf: non-constant format string in call to fmt.Sprintf (govet)
Text: fmt.Sprintf("Unknown command: " + command),
^
make: *** [Makefile:161: check-style] エラー 1
WARNの解決:
linters.govet.check-shadowing` is deprecated.より
check-shadowingは非推奨になっていると言われている為、
プロジェクトルートにある .golangci.yml ファイルを開き、以下のように編集してください
misspellの解決:
cancelledはUS表記ではcanceledとあらわす為lintでエラーが起こっています。
場当たり的ですがlintの設定を変更して対応していきます。
linters-settings:
gofmt:
simplify: true
goimports:
local-prefixes: github.com/mattermost/mattermost-plugin-demo
govet:
> # check-shadowing: true
enable-all: true
disable:
- fieldalignment
> # misspell:
> # locale: US
revive:
rules:
- name: unused-parameter
disabled: true
govetの解決:
non-constant format string in call to fmt.Sprintf (govet)
⇒printfでは「変換指定子(%s等)」を使用して文字列を生成するので、printfを使っているのに変換指定子を使っていないのはおかしいのでlintエラーになります。
以下のように修正しました。
func (p *Plugin) executeAutocompleteTest(args *model.CommandArgs) *model.CommandResponse {
return &model.CommandResponse{
ResponseType: model.CommandResponseTypeEphemeral,
✕Text: fmt.Sprintf("Executed command: " + args.Command),
>Text: "Executed command: " + args.Command,
}
}
以上の修正が終われば、makeファイルでビルドが通ると思います。
./dist配下に「com.mattermost.demo-plugin-0.10.0.tar.gz」ファイルが出来るので、こちらをmattermostを開くコンピュータにダウンロードしてください。
その後、mattermostアプリのシステムコンソールから、Pluginの設定に遷移し、
ChooseFileから先ほどダウンロードしたプラグインファイルをアップロードします。
Installed Pluginsにプラグインが追加されたことを確認し、enaledを押下して有効化します。
以上になります。
今回はdemo-pluginをビルドして、mattermostに読み込ませるまでを試してみました。
追加できるUIに関してはこのプラグインに集約されていそうなので、
プラグインを作る際はこちらをベースに編集する形で作るのが良いと思いました。