SlackEGを導入・運用していて気づいたこと (2020冬)


この記事は [Slack Advent Calender 2020](https://qiita.com/advent-calendar/2020/slack) 18日目の記事です。

# はじめに

2018年頃から社内情シスで全社向けの Slack の導入、運用管理を担当しています。
本記事は、情シス運用者目線で気づいたことについての共有記事です。
去年は [こちら](https://qiita.com/hstn/items/ac6a8ec228c08ee8721d) の記事を書きました。

なお、今年は10月以降育休を取得して現場を離れているため、もしかしてこの記事執筆時点で古くなってる情報が含まれるかもしれません。もし誤ってる情報ございましたらご指摘いただけますと幸いです。 m(_ _)m

# SlackEG利用時の注意点

全社で Slack を使う場合、社員規模や社内プロジェクトの数等によっては EnterpriseGridプラン（EG） が必要になると思います。そもそも一つのワークスペースで異なる組織、プロジェクト全部相乗りさせるのは、情報セキュリティの観点からも、 Slack のベストプラクティスからも行うべきではありません（弊社！）。

ただし、 SlackEG は、これまでの Free、Standard、Plus で行われる「一つのワークスペースでの契約」に対して、「一つの組織での契約」になります。ここで運用に大きな変化が生じることもありますが、同時に以下のような注意点があることにも気づきました。



## エクスポート、インポートがサポートされない

 → エクスポートはサポートされました！ :clap:
引き続き、インポートはサポートされていない（怪しい）ようです。
[Slack のインポート/エクスポートの手段
](https://slack.com/intl/ja-jp/help/articles/204897248)

``` 
注意 :Enterprise Grid オーガナイゼーションへのインポートには対応していませんが、
代わりに、ワークスペースにデータをインポートし、OrG にそのワークスペースを移行することができます。
```

なお、EG内WSにあるインポート/エクスポート画面にいくと、インポートについては「ヘルプに問い合わせください」というメッセージが書いてあります。問い合わせてみたところ「おすすめしない」ということでした。 :sweat_smile: 

---

運用時に一番ネックになったのが、このコーポレートエクスポートが「サポートされなくなる」ことでした。
※当初（2020年5月ごろ）はまだ **EGプランでのコーポレートエクスポート** がサポートされていませんでした。
EGでは、監査等々の目的で後追いでログを確認したい場合は、 DiscoveryAPI での eDsicovery/DLP が推奨されています。
[Slack の Discovery API ガイド](https://slack.com/intl/ja-jp/help/articles/360002079527)

この機能を使えば e-Disocvery にも対応できますが、如何せん利用には多少のハードルがあります。
これまでのコーポレートエクスポートと同じ手軽さでエクスポートをしたいという要望を上げていたところ、ついにサポートされるようになりました。 :clap:
[ワークスペースのデータをエクスポートする](https://slack.com/intl/ja-jp/help/articles/201658943)


## グループDMから作成されたプライベートチャンネルはOrGレベルオブジェクトになる

SlackはEGプランになると、一つの契約で複数WSが使えるようになります。
その際、WS内のチャンネルは「WSレベルのオブジェクト」になる一方、DM、グループDMはWSに依存しなくなり、「OrGレベルオブジェクト」に変換されます。

![slack_1WS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51774/5b551e94-ee97-3de0-f4a3-51e40ca12151.png)
![slack_EG.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51774/cd89d264-5ad6-bd06-416c-859c245a2dfc.png)

ユーザ目線では大した違いはない（どのWSを開いていてもDM/グループDMは見えていて便利）のですが、こういうちょっとした違いがあります。

---

当初、コーポレートエクスポートがサポートされていなかったため DiscoveryAPI を使って独自にインポートを行うスクリプトを作成して、使用していました。
このとき、チャンネルとDMで取得の仕方がちょっと変わったりするところに注意点が必要、、ということがありました。※現在では使われなくなりました。



## OrG レベルで使用する App の注意点

### インストール手順が煩雑

SlackEGでは、 AdminAPI、AuditLogAPI や DiscoveryAPI 等が利用可能になります。
App にこれらの Scope を付与する場合は、 App を作成後ヘルプリクエストが必要です（面倒！でもすぐやってくれる）。その後、所定の手順で OrG へ App をインストールする必要がありますが、これがまたけっこう面倒です。
そもそも手順が整備されていない感満載なので、改善要望リクエストを出しています。 

また、例えば [admin.users.list](https://api.slack.com/methods/admin.users.list) の API method のページに、 `To configure and install an app supporting Admin API endpoints on your Enterprise Grid organization:` の手順が記載されていますが、これは（2020年6月ごろ時点で）最新の手順ではありません。
OrG への App のインストールについて Slack ヘルプに相談すると、この手順とは別に最新の手順があるからこっちを参照してねっていうPDFが送られてくるので、そちらを見ましょう。

### IPアドレス制限がかけられない

また、OrG レベルで利用する App には、現在の仕様上 **IPアドレス制限がかけられません** 。
これはじつはちょっとやっかいで、

* 通常のAppにはIPアドレス制限をかけられる
* OrGレベルになると、逆にかけられなくなる

という困った状態になっており、かつ OrG レベルで利用する App や Scope はなるべくかけておきたいので、こちらも改善要望中です。


## ユーザIDが新しく付与される（2つになる）

もともと Plus 以下の WS で作成された ユーザID（ローカルID） がある場合、その WS を EG に Migration すると、新しい EG でのユーザID（グローバルID） が振られます。
一方で、 EG が作成されたあとに EG に招待されたユーザは、ID（グローバルID）がひとつだけになります。結論的に、ユーザによってIDが1つだったり2つだったりの状態になります。
もし WS を管理する API等 でユーザIDを使ってる場合は、ちょっと注意が必要です。

また、[users.info](https://api.slack.com/methods/users.info) 等でユーザIDを取得する際に、どちらのIDを取得するかは、使用するAppの `User ID Translation` の設定で変更できます。
[Building apps in Enterprise Grid -> User IDs](https://api.slack.com/enterprise/grid#user_ids)

上記以外にもOrGレベルでのAPI利用については、 [Building apps in Enterprise Grid](https://api.slack.com/enterprise/grid) を参照するのがおすすめです。
 
# 以下、EGとは直接関係ない話

今年 Slack を運用していて気づいた点です。

## プライベートチャンネル作成権限の話

プライベートチャンネルを作成する際、
① 最初からプライベートチャンネルでチャンネルを作る
② パブリックチャンネルを作成し、プライベート化を行う
③ グループDMをプライベートチャンネル化する
の3パターンで作成ができます。

①と②の違いについて、以前 [こちら](https://qiita.com/hstn/items/009bc06c97841cbc7828) にも記載しました。エンドユーザ的には違いはありませんが、API等での扱いが変わります。

Slack では、「プライベートチャンネルの作成権限」を限定することができます。
運用ルール次第では、一般ユーザのプライベートチャンネル作成は禁止してたりもするかもしれません。
もし、「プライベートチャンネル作成を一般ユーザにも許可」したい場合は、許可することができますが、 **ここで許可できるのは①だけで、②と③は引き続き管理者しかできない** ようです。


## App の IncomingWebhook において、プライベートチャンネルへの投稿設定がコラボレータから確認できない

旧来存在したカスタムインテグレーションでの IncomingWebhook は非推奨で、新しく SlackApp での IncomingWebhook の利用が推奨されています。
[Moving on from custom integrations](https://api.slack.com/legacy/custom-integrations)

チームで SlackApp を使う場合は、コラボレータの設定をしましょう。
一人で App を作っていて、なんらかの事故でその一人のアカウントが無効化された場合、 App は即座に無効化され復旧できなくなります。これマジで注意したほうがいいです。社内利用者にも啓蒙しましょう。
[Build together with App Collaborators](https://medium.com/slack-developer-blog/build-together-with-app-collaborators-8162e31800f1)

ここで、 SlackApp の IncomingWebhook を使い、プライベートチャンネルへの投稿設定を作成すると、 **投稿先のプライベートチャンネルが、コラボレータから確認できない** ようです。※プライベートチャンネル、としか表示されない

これは、コラボレータが対象のプライベートチャンネルに参加していてもわからないので、かなり不便なので改善リクエスト中です。

## Slack には年齢制限がある

実は Slack は16歳未満は利用が禁じられています。
[​ユ⁠ー⁠ザ⁠ー⁠向⁠け⁠サ⁠ー⁠ビ⁠ス⁠利⁠用⁠規⁠約​](https://slack.com/intl/ja-jp/terms-of-service/user)

```
適用法によって禁じられていない限り、本サービスは、16 歳未満のユーザーを対象外としているため、
利用するには 16 歳以上である必要があります。
```
ビジネス用途で利用していればあまり気にすることないかなと思いますが、私は家庭内チャットにも Slack を使ってるため、将来子供に使わせる年齢になったときに注意がいるかも。別に大丈夫だとは思ういますが :sweat_smile:

# 結び

というわけで、今年（一身上の都合により上半期だけですが）Slack運用してて気づいた点について記載してみました。
MS teams の台頭や訴訟、からの salesforce の買収があったりと、プロダクトとして大きな変化を迎えている状況にあると思いますが、まだまだしばらく Slack の運用は続きそう。
今後もアップデート情報追いながら、社内の Slack ユーザに便利に使ってもらうために運用を続ける予定です :wave: