
この記事は情シスSlack #1 Advent Calendar 2025の3日目の記事です。
こんにちは!出前館 情報システム部IT戦略グループの西川(たつみん)です。
IT戦略グループは、業務で利用するさまざまなSaaSの導入・浸透を推進し、生産性の高い環境を提供することに注力しています。
私は主にOktaを中心としたID基盤の整備・運用、およびOkta Workflowsを活用した業務自動化を担当しており、運用効率化と社内システムの連携強化に日々取り組んでいます。
はじめに
出前館ではさまざまなSaaSを利用しています。IT戦略グループは多くのSaaS管理を行っており、ユーザー(社員)向けにアナウンスをする機会もあります。このような時に専用のSlackユーザーグループがあると便利です。しかし、Slackユーザーグループを手動でメンテナンスするのは手間がかかります。
そこで、Okta Workflowsを活用し、SaaS利用者をまとめたSlackユーザーグループの作成とメンテナンスを自動化しました。
実装アプローチ
出前館ではSSO設定を行っているSaaSはOkta上のグループ機能を利用してユーザーをまとめて管理しています。このOktaグループをもとに、Slackユーザーグループを作成するAPI usergroups.create やメンバーを更新するAPI usergroups.users.update を実行することで目的を実現することができます。
ここで注意が必要なのは、メンバーを更新するAPIではSlackユーザーを差分だけでなく既存メンバーも含めた全メンバーを指定する点です。
この仕様により、Okta Workflowsでの実装時に課題が生じました。
例えば、Oktaグループへのメンバー追加をトリガーにしてすぐに処理を実行すると、短期間でOkta Workflowsの処理が複数回実行されます。処理が並走することで、一つの処理に非常に時間がかかることがあります。
そこで、Okta Workflowsのテーブル機能を活用して解決しました。まず、イベントをトリガーとするflow(Okta Workflowsでの処理単位)を作成し、Oktaグループのメンバー変更をテーブルに記録しました。次に、15分ごとに起動するflowを作成し、テーブルを確認して対象がある場合のみ処理を行う実装にしました。
15分という値は、バーストの抑止とSlackユーザーグループの最新化のタイミングのバランスを考慮して設定しています。
これにより、バーストを抑止し、適切なタイミングで処理を実行できるようになりました。
以下は処理フローの概要図です。

テーブルの構成
Okta To Slack User Group Sync Queue
以下の例のような状態管理のためテーブルです。
| oktaGroupName | oktaGroupId | queuedAt | processed |
|---|---|---|---|
| xxxx User | 00gxxxxxxxx | 2025-11-01T15:00:11+00:00 | true |
| yyyy User | 00gyyyyyyyy | 2025-12-01T09:17:42+00:00 | false |
Okta Group ID to Slack User Group ID
以下の例のようなOktaグループIDとSlackユーザーグループIDを対応させるためのテーブルです。
| oktaGroupName | oktaGroupId | slackUserGroupName | slackUserGroupId |
|---|---|---|---|
| xxxx User | 00gxxxxxxxx | xxxx User | S09aaaaaa |
| xxxx User | 00gyyyyyyyy | xxxx User | S09bbbbbb |
Slack APIの準備
Slack APIを利用するために、Slackアプリを作成しました。 Slack APIのページから新規アプリを作成し、以下の権限(OAuth Scopes:Bot token)を付与しました。
usergroups:write
アプリをワークスペースにインストールし、発行されたOAuth Tokenを取得して、Okta WorkflowsのSlack APIコネクタに設定しました。
Okta Event Hooksの設定
Okta側の設定として、Event Hooksという機能を活用することで複数のOktaグループを指定し、メンバーが変化した場合にWebhookエンドポイントにリクエストを送る設定ができます。Okta Workflowsではこのリクエストを受け取るところからスタートする構成としました。
Okta Workflowsの概要
作成したOkta Workflowsについてざっくりと説明します。大まかなOkta Workflowsでの処理の流れは以下のとおりです。
flow1:イベント受信からテーブル記録まで
- Event Hooksから送られるWebhookイベントを受け取り、Oktaグループの名称とIDを取得する
- テーブル「Okta To Slack User Group Sync Queue」を検索し、IDが一致し、フラグ(false)のデータがすでにある場合は時刻を更新する。条件に一致しない場合は名称、ID、時刻とフラグ(false)を新規行として追加する
flow2:15分ごとに起動し、テーブルから処理対象を検索
- 15分ごとにテーブル「Okta To Slack User Group Sync Queue」を検索し、フラグ(false)がある場合はflow3へレコードを渡す
flow3:flow2から受け取ったレコード1件に対する処理を実施
- テーブル「Okta Group ID to Slack User Group ID」を確認し、SlackユーザーグループIDを確認する
- 存在しない場合は usergroups.create を実行しSlackユーザーグループを作成し、テーブルに記録する
- flow4を呼び出し、でOktaグループのメンバーを一覧を取得する
- flow4は汎用的に利用できるユーティリティ関数として既に構築されていたため、今回は新規構築せず既存のものを活用しています。
- flow5を呼び出し、OktaユーザーからSlack IDを取得する
- Slack IDリストを整形し、Slack グループIDとともにBodyを作成し、usergroups.users.update を実行する
- テーブル「Okta To Slack User Group Sync Queue」のフラグをtrueに更新
考慮ポイント
上記の概要では記載していない内容ですが、Slackユーザーグループの仕様について、いくつかの考慮ポイントがあります。
出前館ではSlack Enterpriseを活用し、複数のワークスペース構成としています。Slackユーザーグループは特定のワークスペースに紐づくため、作成するワークスペースに存在するユーザーのみを対象とする必要がありました。またSlackのゲストユーザーもSlackユーザーグループに追加することができないため、対象の選別を行う処理も実施しています。
まとめ
今回、Okta WorkflowsとSlack APIを活用し、SaaS利用者をまとめたSlackユーザーグループの作成・メンテナンスを自動化しました。
この自動化により現在では最大メンバー数200名を超えるグループを含む5個のSlackユーザーグループの手動でのメンテナンス作業から解放され、SaaS管理者が特定のSaaS利用者に向けたアナウンスをより効率的に実施できるようになりました。
実装時には、Okta Workflowsの処理が短期間で複数回実行される課題がありました。しかし、テーブル機能を活用してバーストを抑止し、15分ごとに処理をトリガーする仕組みを導入することで解決できました。
また、本記事の執筆を通じて、flow5の代替としてテーブルを活用すれば処理を軽減できる可能性に気づきました。定期的なアウトプットは、やはり良いものですね!
今後も業務効率化のために、Okta Workflowsを活用した自動化に取り組んでいきます。
出前館には解決すべき課題が多くあります。一緒に解決していくメンバーを募集しています!