全てのSlack管理者に送るSpot Slack作成時のベストプラクティス

## はじめに

<img src="https://qiita-image-store.s3.amazonaws.com/0/103247/bfda250d-b867-279f-ce9c-6215e5884b04.png" width="200">

こちらは[Slack Advent Calendar 2016](http://qiita.com/advent-calendar/2016/slack)の09日目の記事になります。

昨日は [@bvlionさん](http://qiita.com/bvlion) の [我が家で運用されているSlack](http://qiita.com/bvlion/items/2dd5a4aff977930e8b81) でした！

本日はSpot(仕事以外のチーム開発やハッカソンなどの一時的なもの)でSlackを作成した際の、管理者の辛さを解決する個人的なベストプラクティスについて書いていきます！

## 目次

1. Slack管理者の辛さ
1. 招待の辛さを解決する
    2. 招待の辛さとは？
    3. 招待を自動化する
1. Channel乱立の辛さを解決する
    2. Channel乱立の辛さとは？
    3. `#general`をアナウンス用にする
    4. アナウンス用の設定
    4. [Tips] 出欠はReactionで！
1. botの導入は用法用量を守って
    2. botが不要なSpot Slack
    3. botが有効なSpot Slack
1. 最後に

## 1. Slack管理者の辛さ

エンジニアの集まりでは得てしてSlackを導入したい時があります。

* 開発合宿
* チーム開発
* ハッカソン
* 勉強会
* ただの仲良しの集まり
* etc...

意気揚々とSlackを導入したものの**大変なのはそのあと**です。

「Slackでやろうよ！」という決議を聞いたあなたは、
まず、招待のために**全員分のメールアドレスをLINE等を駆使してかき集め**ます。
やっとこさ全員が参加したあとは、デフォルトChannelの`#general`や`#random`だけでは足りず、雑談用の`#zatsudan`, コードを貼るの`#code`, 記事を貼る用の`#links`などチャンネルが乱立します。
もはやSpotの本来の目的をアナウンスはどこで行っていいのかわからなくなり、**全て雑談チャンネル**のようになってしまいます。
それでもなんとか運用を続けると、次にbotの導入が検討されます。
最初こそちやほやされた`hubot`や`botkit`で作られたbotは、
1ヶ月もすると誰も見向きもしなくなり、**忘れてうっかり入力したキーワードにだけ反応する**悲しい存在になってしまいます。
トドメを刺すのはSlackメンバーがふと投稿した**「これってLINEグループじゃダメなの？」**です。
最後に残るのは、メンバーのほとんどがオフラインのSlackと「Slackでやろうって言ってのはあなたたちじゃないか...」というあなたの憤りだけです。

もちろん全てのSpotのSlackがこうなるとは思いません。
健全に運用されてるSlackも数え切れないほどあると思いますし、上で挙げたのは極端な例です。

ですが、これまでSpotでSlackを何個か作ってきて少なからず上のような例になったことはあります。
もし、同じような体験をされた方がいらっしゃればこの記事が救いになればと思います。

## 2. 招待の辛さを解決する

### 2.1 招待の辛さとは？

まず最初の困難

> 招待のために全員分のメールアドレスをLINE等を駆使してかき集めます。

これを自動化して解決します。

招待の煩わしさはSlackの作成時だけではありません、追加でメンバーが増えるたびに一人づつアドレスを聞いて招待を送らなければなりません。
つまりメンバーの招待は管理者にとって**最初から最後までつきまとう問題です**。
これを解決するために、**Slack作成直後に招待フォームを作成**します。

ご存知の通りUGなどはこの形でのSlack参加が一般的です。
フォームを作成するメリットは、

* 一度作成してしまえばリンクさえ教えれば勝手に参加してくれる
* 管理者以外のメンバーもリンクを共有すればメンバーを招待できる

などがあります。

### 2.2 招待を自動化する

招待フォームの作成方法はいつくかありますが、可能であれば**最も手がかからない方法**で作成したいところです。
私は**Google Apps Script**を使っての作成をお勧めします。

GASのメリットは

* Googleアカウントさえあれば作成できる
* サーバーの用意が不要
* 一つ作れば他のフォームを作る時に使い回しができる

です。

何よりサーバーを用意せずコードだけ書けば作成できるので、煩わしさはほとんどありません。

作成方法についてはこちらの記事に非常に丁寧に説明されていますので参考になさってください。

http://qiita.com/atusi/items/c2669add8038c43efff3

これで招待の煩わしさから解放されました！！

![スクリーンショット 2016-12-09 23.13.19.png](https://qiita-image-store.s3.amazonaws.com/0/103247/acac4c05-5a2a-9f9a-3008-a8bb56de640a.png)


## 3. Channel乱立の辛さを解決する

### 3.1 Channel乱立の辛さとは？

次の困難はchannelが乱立して

> **全て雑談チャンネル**のようになってしまいます。

こちらです。

最初こそ部屋ごとの`topic`を決めて住み分けしますが、
結局一つの話題が波及してそのまま雑談になってしまうことが多くあり、
流れて欲しくない大切なアナウンスも

```
管理者 : @channel ○月○日 xx時 --駅 集合でお願いします！

メンバー1 : はーい^^/
メンバー2 : はーい^^/
メンバー3 : ○日は予定あります;;
メンバー1 : @メンバー3 なにするの？？
メンバー3 : メンバー4と出かけるんだー！
メンバー2 : えー！いいなー！
```

こうやって流れてしまいます。

### 3.2 `#general`をアナウンス用にする

Slackは作成時でデフォルトで `#general`, `#random`の2つのchannelがあります。

Slackのルールとして

|   general   |   Company-wide announcements and work-based matters  |
|----------|----------|
| random | Non-work banter and water cooler conversation |

つまり

* #general は **大切なこと**
* #random は 大切じゃないこと

を書き込む決まりになっています。

さらに、 `#general`は特別で唯一**抜けることができないChannel**になっています。
これを活用して`#general`をアナウンス用channelにしましょう！
正しく大切なことを伝えられるchannelさえあれば、あとはどれだけchannelが立っていても問題ありません。
`#general`に`@channel`のメンションを打てば**必ず全員の目に止まることになります**。

### 3.3 アナウンス用の設定

`#general`をアナウンス用のチャンネルにすることが決まれば、あとはたった一つの設定をするだけです。
それは、`#general`を**書き込み禁止にする**設定です。
手順は以下の通りです。

1. `Team Menu`を開く(Slackの画面の右上のチーム名をクリック)
1. `Team settings`をクリック.設定画面に遷移します.
1. `Permissions`タブを開く.
1. `Messaging`をクリック
1. `Who can post to your #general channel`から`Team Admins and Owners`か`Team Owners`のどちらかを選択

![スクリーンショット 2016-12-09 21.21.35.png](https://qiita-image-store.s3.amazonaws.com/0/103247/88306fad-fbbf-d5e4-9a38-e9704f6851ab.png)


以上で設定完了です！
これで`#general`は管理者のみ書き込み可能になりました！

もう大切な要件が雑談で流れたり、アナウンスを用のChannelを悩む必要はありません！
他のメンバーも流してしまう後ろめたさを感じず、別channelで大いに雑談することができます！

### 3.4 [Tips] 出欠は`Reaction`で！

余談ですが、`#general`を書き込み禁止にすることでひとつだけ困ることがあります。
それは、**出欠**をとる時です。
前述の通り書き込みができないので、**出欠の返答のしようがありません**。
別channelで回答など煩わしすぎて誰も答えてくれなさそうです。

そこで、出欠の際には`Reaction`で回答してもらいます！

![スクリーンショット 2016-12-09 23.04.01.png](https://qiita-image-store.s3.amazonaws.com/0/103247/5e309046-baf6-e4cc-d78f-b45aa163b15b.png)

`#general`は書き込みはできませんが、**`Reaction`はできます**のでこれで出欠問題も解決です！

## 4. botの導入は用法用量を守って

最後にbotの運用についてです！

こちらは**Spotの目的によって是非が分かれる**のですが、
基本的にSpotのSlackでは**botは不要**の場合が多いです。

botが有効な場合とそうでない場合について整理していきます。

### 4.1 botが不要なSpot Slack

前述の通りほとんどのSpot Slackの場合、**botは不要になる**ことが多いです。
何故なら**botにやらせることが特にない**からです。

業務Slackと違い、botにやってもらって助かることがほとんどないので
`Slack = bot`という固定観念からbotを作ると大抵使われなくなります。

### 4.2 botが有効なSpot Slack

逆にbotがworkする場合ですが、経験上ひとつだけでした。
それは、**チーム開発**用のSlackです。

チーム開発では業務に近く、`GitHub`や`CIとの連携`などBOTがworkする環境があります。

ですが、**`Integration`を導入する**だけで済む場合もありますので作る前に一度確認することをお勧めします。

例外的に、**そもそもBOTの勉強目的でBOTを作る**といった場合は使われることが目的ではないので作る価値があります。

## 最後に

以上がSpotSlackを作成する場合の個人的なベストプラクティスになります。

他にも様々な知見はあると思いますので、コメントなどでご指摘いただけると幸いです。

最後までご覧になっていただき、誠にありがとうございました。