技術サークルの内部SNSにSlack風のSNSはいかが？（Mattermost）

:::note info
こちらは[四工大アドベントカレンダー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/yonko_univ)の10日目の記事です。
:::

## はじめに

突然ですが、あなたが所属する組織では内部SNSに何を使っていますか？
大学生だと、それこそ

- Slack無料版
- Disocrd
- LINE

だったり、会社だと

- Slack
- Teams
- Chatwork
- LINE Works
- IP Messenger

などを利用しているのではないでしょうか。
お金があったり、MS製品に縛られていない企業ではSlackがよく使われていると思います。私の所属する企業群でもそうですし、IT系の会社に務めている方や情報系の学生にはかなりなじみがあると思います。

### Slackは使いやすいが導入は渋い

そのSlackですが、無料版だと3ヶ月前までのデータまでしか見れないという制約がついています。それこそハッカソンやイベントなど一時的なものであれば、あまり困らないかも知れませんが、技術コミュニティーやサークルの運営に使うにはかなり厳しい制限になります。
有料版に換えたいところですが、最安でも1ヶ月1人あたり925円と、学生団体が導入するにはかなりのハードルがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/a5a81472-4654-2ec9-1db6-b9c716669217.png)

### 代替案

最近では無料でもしっかり履歴が消えないし、ボイスチャットもしやすいDiscordが技術コミュニティではよく使われる傾向にありますが、サークルなどの組織の場合、Discordなどの基本が全チャンネルオープンなタイプのSNSは使いにくいものがあります。
自分の所属する芝浦工業大学の「デジクリ」でも同様の議論となり、最終的に`Mattermost`というSlackライクなOSSのSNSを導入しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/ce40c50d-a552-b6da-74ea-a7ae83be27e8.png)

## Mattermostの機能概要

アプリの外観はこんな感じです。まあほぼSlackです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/5f0aff13-89c2-58b9-0f97-c2af66780ed6.png)


### 投稿周り

ほぼ概ねSlackです。Slackと違う部分はMattermostではMarkdown記法を用いて書くことができることと、スレッドをチャンネルにも送信することができないことが主な違いになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/6e0759dd-75a2-8d27-d3e1-8f7021aa7492.png)

スタンプなどはSlackと同様に追加ができ、かなりの数増やすことができます（デジクリでは自由に追加できたので部内ミームのスタンプが多く登場しました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/06d6bd42-9133-d9b8-c3c4-88c7869a75ab.png)

メンションなどもSlackと同様に使えます。

投稿後編集できる・削除できるなどもWebコンソールから管理者権限にて全体の権限や個別に割り当てることも可能なのでSlack同様に柔軟に運用できます。

画像などももちろん普通に投稿が可能です。またMarkdown記法に対応していることで予想がついているかも知れませんが、文中に画像を挟むことも可能です。



### チャンネルの作成と参加

Slackと同様にプライベートチャンネルとパブリックチャンネルが作れ、パブリックチャンネルはDiscordと違い全員強制参加などではありません。自分で探して参加、もしくは人から追加されて参加する形になっています。
初期の全員参加のパブリックチャンネルは`town-square`というSlackでいう`general`チャンネルと`random`チャンネルがあります。ここら辺の初期参加チャンネルはMattermostの構成の際に、設定ファイルで指定できます（Webコンソールでできると嬉しいですが、ここはちょっと難点ですね）

また、Slack同様にチャンネルを自分独自にフォルダ分けすることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/b78f75c3-fa50-1d95-a6c7-1a84cd3d2ff2.png)

もちろんDMもSlack同様に1対1や任意の複数人と可能です。

### アプリ

こういったSNSアプリの場合、Webアプリだけでなくネイティブアプリの存在も重要になってきます。
MattermostではSlackと同様に、WindowsやMac向けにElectronベースのアプリ（Web版とUIは同じ）とスマホ向けのネイティブアプリを提供しています。
こういったアプリがしっかりと整備されていることもMattermostを選ぶ大きな理由になりました。

:::note info
ちなみにWindowsユーザーはMattermostはWingetでも入れれるので楽ですね。
:::

### 通話(Calls)

一応ハドルのような通話機能もあります。自分はあまり使ったこと無いので良くわかりませんが。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/2d388526-ce7d-08cc-65c4-7e3249d2a31f.png)

### 拡張機能(プラグイン)

先ほどのCallsも実はプラグインです。
その他にもチャンネルごとにボードが作れ進捗管理などができるBoardsやSurvey機能、GitHubとの連携など色々とあり、公式からストアも提供されています。流石にここはSlackから数などでは劣るところですが、必要最低限のものは確保できるでしょう。

## Mattermostと連携する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/20df702c-0dd4-52ca-52cc-1de200a7aef6.png)

Slackと同様にWebhookやスラッシュコマンド、Botなど連携機能を作るのも充実しています。また、ここらへんの扱いはMattermostがある程度Geek向けに提供していることもあり、Slackよりも手軽に触れるようになっています。
試しに一番簡単な内向きのウェブフックを試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/0d4f6d23-a1b2-5656-e759-323636901aa1.png)

必要な情報を入れるとWebhookURLが発行されるのでこちらに対してPOSTリクエストを送ります。
どのように送るかは[このMattermostのページ](https://developers.mattermost.com/integrate/webhooks/incoming/?utm_source=mattermost&utm_medium=in-product&utm_content=confirm_integration&uid=t54t9a5i5tddjd4iteprf95zmo&sid=s6uzmu3wsjbetng6pjt4rzbzac)に書いてあるのでこちらを参考にします。

私はこういったAPIはPostmanで動かすので今回もそうします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/90bee875-92a8-ba6e-5ef9-b9fb23996eb5.png)

しっかりと投稿できていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/1cf8bb01-34af-df4f-070a-da2368f61780.png)

## Mattermostを立ててみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/269eebb4-15d9-5c0b-068a-be3a0f751d38.png)

Mattermostの公式ページを見ると、1 vCPUと2GB RAMで1000ユーザーくらいは行けるようですね。軽い。DBにはPostgresが必要です。

UbuntuやRedHatに直接インストールすることも可能ですが、今回は一番楽なDockerを使用してみます。

ここからMattermostをDockerでデプロイしたいところですが、私の気力がここらへんで尽きてしまったのでまあ興味のある方は[ここ](https://docs.mattermost.com/install/install-docker.html#deploy-mattermost-on-docker-for-production-use)を見て自分で立ててみましょう。

## まとめ

MattermostはSlackを使いたいけど金がない！でもメッセージは消えてほしくない！セルフホスティングできる技術がある！ちょっとサーバーが落ちても許してくれる組織に向いていると思います。

## おまけ

アドベントカレンダーに投稿するのは難しいね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87699/a1b7b7db-8eb1-d1c4-0751-ef35493bcba5.png)