Mattermostではチームに参加すると全員がデフォルトのTownSquareというチャンネルに参加します。これはSlackでいうところのgeneralに相当します。このTownSquareはSlackのgeneral同様に削除も脱退もできません。

なぜこんな仕様になっているかは、まあ、なんとなく想像がついたりつかなかったりするのですが、まあ、そういう仕様なんです。納得しましょう。で、今回はこのMattermostのデフォルトチャンネルのTownSquareから自分を削除(脱退)状態にしたかったのでやってみました。

動機


自分は自分が興味のない情報が目に入ってくるのがもともと好きではなく、特にあまりメンタル的によろしくない状況にあるとこれが顕著になります。このチャンネルはチーム内外を含めたオープンなチャット的な利用方法をされており、いわゆる雑談的チャンネルの扱いでした。それが故に、興味のない話題や既に読んだ話題が流れてくることが多々あり(私のメンタル状況によっては)非常に苦痛でした。チャンネルをミュートすれば済む話ではなくて、もう完全に視界に入らないようにしたかった。

環境


Mattermost 5.4.0でやってます。

注意


データベースのレコードを物理的に削除します。動作に問題はなさそうということは確認していますが、本当に問題ないかは断言できません。また、Mattermostの動作から予想するに、townsquareに他のユーザが全く存在しない状態でやると問題が発生しそうな気がします。なのでtownsquareに他のユーザがいる状態でやったほうがいいと思います。

やり方


データベースの接続方法は私の過去の記事とかに書いたりしてるので適当にその辺を参考にしてください。

ユーザIDの確認


まず、自分のidを確認します。emailあたりで絞り込むのがいいと思います。

1
2
select * from users
where email = 'yourmail@example.com';

対象のユーザidを控えます。ここでは仮に7o36louiq7idpxxnjqp8um7oppoとします。

チームIDの確認


次に、townsquareは全チームに存在するので、脱退したいtownsquareがどのチームのものか確認します。

1
select * from teams;

チームのidを控えます。ここでは仮に1ctyktd67t0i71es4poshnssfr とします。

チャンネルIDの確認


最後にチャンネルidを確認します。先ほどのチームidとチャンネル名town-squareで検索します。

1
2
3
select * from channels 
where name = 'town-square'
and teamid = '1ctyktd67t0i71es4poshnssfr';

チャンネルのidを控えます。ここでは仮にgofy43a557g2pxgqq8htdcyu0rとします。

削除


いよいよ削除します。まず、対象のデータを確認してみましょう。とりあえずchannelmembersというそれっぽいテーブルがあります。先ほどのチャンネルidとユーザidを使用してレコードを確認してみます。

1
2
3
select * from channelmembers
where channelid = 'gofy43a557g2pxgqq8htdcyu0r'
and userid = '7o36louiq7idpxxnjqp8um7oppo';

で、まあ、レコードはこんな感じです。

1
2
3
 channelid                  |           userid           | roles |  ... | schemeuser | schemeadmin
----------------------------+----------------------------+-------+- ... +------------+-------------
gofy43a557g2pxgqq8htdcyu0r | 7o36louiq7idpxxnjqp8um7oppo| | ... | t | t

このテーブルでアタリですね。schemeadminはおそらくチャンネルの管理者を指していると思われます。このチャンネルでは私のみtになっていましたが、そのまま削除しました。怖い方は誰か別の人のレコードをtに変更してから削除すればよいと思います。

後は削除するだけです。

1
2
3
4
5
delete from channelmembers
where channelid = 'gofy43a557g2pxgqq8htdcyu0r'
and userid = '7o36louiq7idpxxnjqp8um7oppo';

DELETE 1

確認


Mattermostの公開チャンネルの一覧からチャンネルが消えていればOKです。
確認したところあとからもう一度参加は可能でしたので、消しても問題ないと思います。

感想


以前から感じていましたが、Mattermostはテーブル名・設計共にわかりやすいのでデータベースをいじってゴニョゴニョというのがやりやすいです。これは本当に良いですね。