Slackチャンネル招待ツールを開発しました
SmartNews のコーポレートエンジニアリングチームが、Slack の仕様制約を克服し、誰でもパブリックチャンネルへのゲスト招待を可能にする G Suite 連携ツールを開発・公開した。
キーポイント
Slack 招待の運用課題と解決策
管理者権限付与や固定チャンネル化という従来の運用の不便さを解消するため、誰でもパブリックチャンネルにゲストを招待できる専用ツールを開発した。
G Suite を活用した低コスト実装
サーバー構築コストをかけず、Google フォームと Apps Script を組み合わせることで、ログ管理や入力ミスの防止を実現した簡易な UI を構築した。
自動化スクリプトによるデータ同期
Slack API を活用し、生きているパブリックチャンネルと社内向けマルチチャンネルゲストのリストを自動的に抽出・更新するスクリプトを実装している。
コーポレートエンジニアリングの採用情報
会社をより良くしていく仲間を募集中であり、カジュアル面談も用意されている。
他ポジションと応募方法の案内
コーポレートエンジニアリング以外にも多数のポジションがあり、詳細は公式採用ページで確認できる。
影響分析・編集コメントを表示
影響分析
この記事は、大規模な AI 技術革新ではないものの、企業内インフラ運用における「既存ツールの組み合わせによる解決策」の典型的かつ優れた事例を示しています。特に、Slack の仕様制約という具体的な課題に対し、高価な開発を避けて G Suite エコシステムで即座に実装した手法は、多くのエンジニアにとって参考になる実践的な知見です。
編集コメント
AI や LLM のような最新技術のニュースではありませんが、エンジニアリングチームが既存リソースを賢く活用して社内課題を解決した実務的な知見として非常に価値があります。
みなさまこんにちは、コーポレートエンジニアリングチームの和田です。
私たちコーポレートエンジニアリングチームは、社内ネットワークの管理やシステムの導入など日々社内インフラの管理を行っておりますが、日頃業務を行う上でちょっとした不便さの解消や効率をアップするようなツールの作成も業務の1つです。
今回はその中で最近作ったツールをご紹介したいと思います。
Slackのマルチチャンネルゲストをパブリックチャンネルに自由に招待できない問題
ご覧いただいている皆様の中にも、企業でSlackを利用している方はたくさんいらっしゃると思います。 Slackを運用していく中で、パブリックチャンネルにゲストを招待する際の運用は、皆様どうされてますでしょうか?
(執筆時点では)Slackの仕様上、管理者以上の権限がないとゲストをパブリックチャンネルには招待できません。したがって、
管理者権限を多くのメンバーに付ける
そもそもマルチチャンネルゲストの参加チャンネルは固定にする
等、会社の状況やルールによって、様々な方法で運用されていると思います。
当社では、パブリックチャンネルであれば誰でも自由に入れるようにしたいが、管理者を増やしすぎるのも避けたいため、都度管理者に依頼して招待してもらう、という運用を行ってきました。 しかし依頼する側も遠慮してしまったり、面倒だったりするという問題がありました。
そこで今回、パブリックチャンネルであれば、誰でもゲストを招待できるツールを作りました。
誰でもチャンネルにゲストを招待できるツール
まずツールの機能ですが、誰でも自由にとは言いつつもちゃんとログも残したいので、以下のような要件としました。
いつ誰がどこのチャンネルに誰を招待したかログを取る
招待できるチャンネルは、パブリックチャンネルだけとする
招待できる対象はマルチチャンネルゲスト、それも当社のメールアドレスを持つアカウントだけ
手入力だと入力の揺らぎが出てしまうので、なるべく選択式にしてエラー処理を省く
そしてなるべくコストをかけたなくないので、今回はサーバを用意して全部最初から作るということはやめて、普段利用しているG Suiteを使うようにしました。 その結果、以下のような相関図になりました。
そして、実際に完成したのが、以下のフォームです。
招待したいチャンネルとマルチチャンネルゲストを選び送信ボタンを押すだけ、というシンプルな作りです。 ちなみにこのフォームは、Googleアカウントを収集するモードにしていますので、誰が操作したかをログに残せるようにしています。
このフォームにある2つのリストボックスですが、日々作られるチャンネルや登録されるゲストを手動で加えていくのは現実的ではありません。そこで、チャンネルとゲストをSlackのAPIを通じて選択肢に追加していくスクリプトを作って自動化しています。
リストボックスに選択肢を追加するスクリプト(抜粋)
// channelリストの作成 // channellistには、SlackAPIを通じて取ってきたChannelリストが格納されている for (i = 0; i < channellist.channels.length; i++) { // 生きているパブリックチャンネルのみ抽出 if (channellist.channels[i].is_channel == true && channellist.channels[i].is_archived == false && channellist.channels[i].is_private == false) { // 選択肢にSlack APIで取ってきたリストを追加していく choices.push(items[0].asListItem().createChoice(channellist.channels[i].name)); } } items[0].asListItem().setTitle("Public Channel").setChoices(choices); // multi guest list の作成 // mguestlistには、SlackAPIを通じて取ってきたアカウントリストが格納されている var email; for (var i = 0; i < mguestlist.members.length; i++) { // 生きているマルチチャンネルゲストのみ抽出 if (mguestlist.members[i].deleted == false && mguestlist.members[i].is_restricted == true && mguestlist.members[i].is_ultra_restricted == false) { email = mguestlist.members[i].profile.email; // SmartNewsのメールアドレスを持つゲストだけ選択肢とする if (email.indexOf("@smartnews.com") != -1) { choices.push(items[1].asListItem().createChoice(email)); } } } items[1].asListItem().setTitle("Multi-Channel Guest").setChoices(choices);
また、チャンネルとゲストを選択して送信ボタンを押すと、チャンネルにゲストが自動的に招待されますが、このとき招待と合わせて対象のチャンネルにも誰が誰を招待したかわかるメッセージもポストするようしました。
今回はGoogleフォームを使うことで手軽に作ることができましたが、逆にGoogleフォームの制約のため、いくつかの機能を断念しました。
送信ボタン押下後に、確認画面を出したかった
こういった登録系の画面では、「このチャンネルにこのゲストを追加します。いいですか?」というような確認画面を出したいところですが、これはGoogleフォームの制限で、送信ボタンを押したあとのメッセージを動的に変えて出すことができません。
複数のチャンネルや複数メンバーの複数登録がしたかった
Googleフォームで用意されている選択式のパーツには、複数選択出来るものがありません。チャンネルやゲストの指定を、選択式ではなく自由入力にすれば可能になりますが、その分入力ミス等の処理を考えると、シンプルな今回の形に落ち着きました。
このあたりを実現するには、UIから開発する必要が出てくるので、今後運用していく中でニーズが高まれば、検討したいと思います。
このツールを使うことで、誰でもチャンネルに招待できるようになり、業務効率や情報の公開性を向上することができたかと思います。 これからも、社内が便利になったり業務効率が上がるような仕組みを、模索し続けていきます。
コーポレートエンジニアリングでは、一緒に会社をより良くしていく仲間を募集中です。 興味を持たれた方は、ぜひご応募ください! https://smartnews.workable.com/j/2AE725C07D
なおコーポレートエンジニアリング以外にも、多数のポジションで皆様の応募をお待ちしております。 また、もっと気軽に会社のことを聞いてみたいという方には、カジュアルな面談という形もご用意しておりますので、ご興味持たれた方はぜひ一度ご連絡ください。 https://smartnews.workable.com/



原文を表示
みなさまこんにちは、コーポレートエンジニアリングチームの和田です。
私たちコーポレートエンジニアリングチームは、社内ネットワークの管理やシステムの導入など日々社内インフラの管理を行っておりますが、日頃業務を行う上でちょっとした不便さの解消や効率をアップするようなツールの作成も業務の1つです。
今回はその中で最近作ったツールをご紹介したいと思います。
Slackのマルチチャンネルゲストをパブリックチャンネルに自由に招待できない問題
ご覧いただいている皆様の中にも、企業でSlackを利用している方はたくさんいらっしゃると思います。 Slackを運用していく中で、パブリックチャンネルにゲストを招待する際の運用は、皆様どうされてますでしょうか?
(執筆時点では)Slackの仕様上、管理者以上の権限がないとゲストをパブリックチャンネルには招待できません。したがって、
管理者権限を多くのメンバーに付ける
そもそもマルチチャンネルゲストの参加チャンネルは固定にする
等、会社の状況やルールによって、様々な方法で運用されていると思います。
当社では、パブリックチャンネルであれば誰でも自由に入れるようにしたいが、管理者を増やしすぎるのも避けたいため、都度管理者に依頼して招待してもらう、という運用を行ってきました。 しかし依頼する側も遠慮してしまったり、面倒だったりするという問題がありました。
そこで今回、パブリックチャンネルであれば、誰でもゲストを招待できるツールを作りました。
誰でもチャンネルにゲストを招待できるツール
まずツールの機能ですが、誰でも自由にとは言いつつもちゃんとログも残したいので、以下のような要件としました。
いつ誰がどこのチャンネルに誰を招待したかログを取る
招待できるチャンネルは、パブリックチャンネルだけとする
招待できる対象はマルチチャンネルゲスト、それも当社のメールアドレスを持つアカウントだけ
手入力だと入力の揺らぎが出てしまうので、なるべく選択式にしてエラー処理を省く
そしてなるべくコストをかけたなくないので、今回はサーバを用意して全部最初から作るということはやめて、普段利用しているG Suiteを使うようにしました。 その結果、以下のような相関図になりました。
そして、実際に完成したのが、以下のフォームです。
招待したいチャンネルとマルチチャンネルゲストを選び送信ボタンを押すだけ、というシンプルな作りです。 ちなみにこのフォームは、Googleアカウントを収集するモードにしていますので、誰が操作したかをログに残せるようにしています。
このフォームにある2つのリストボックスですが、日々作られるチャンネルや登録されるゲストを手動で加えていくのは現実的ではありません。そこで、チャンネルとゲストをSlackのAPIを通じて選択肢に追加していくスクリプトを作って自動化しています。
リストボックスに選択肢を追加するスクリプト(抜粋)
// channelリストの作成 // channellistには、SlackAPIを通じて取ってきたChannelリストが格納されている for (i = 0; i < channellist.channels.length; i++) { // 生きているパブリックチャンネルのみ抽出 if (channellist.channels[i].is_channel == true && channellist.channels[i].is_archived == false && channellist.channels[i].is_private == false) { // 選択肢にSlack APIで取ってきたリストを追加していく choices.push(items[0].asListItem().createChoice(channellist.channels[i].name)); } } items[0].asListItem().setTitle("Public Channel").setChoices(choices); // multi guest list の作成 // mguestlistには、SlackAPIを通じて取ってきたアカウントリストが格納されている var email; for (var i = 0; i < mguestlist.members.length; i++) { // 生きているマルチチャンネルゲストのみ抽出 if (mguestlist.members[i].deleted == false && mguestlist.members[i].is_restricted == true && mguestlist.members[i].is_ultra_restricted == false) { email = mguestlist.members[i].profile.email; // SmartNewsのメールアドレスを持つゲストだけ選択肢とする if (email.indexOf("@smartnews.com") != -1) { choices.push(items[1].asListItem().createChoice(email)); } } } items[1].asListItem().setTitle("Multi-Channel Guest").setChoices(choices);
また、チャンネルとゲストを選択して送信ボタンを押すと、チャンネルにゲストが自動的に招待されますが、このとき招待と合わせて対象のチャンネルにも誰が誰を招待したかわかるメッセージもポストするようしました。
今回はGoogleフォームを使うことで手軽に作ることができましたが、逆にGoogleフォームの制約のため、いくつかの機能を断念しました。
送信ボタン押下後に、確認画面を出したかった
こういった登録系の画面では、「このチャンネルにこのゲストを追加します。いいですか?」というような確認画面を出したいところですが、これはGoogleフォームの制限で、送信ボタンを押したあとのメッセージを動的に変えて出すことができません。
複数のチャンネルや複数メンバーの複数登録がしたかった
Googleフォームで用意されている選択式のパーツには、複数選択出来るものがありません。チャンネルやゲストの指定を、選択式ではなく自由入力にすれば可能になりますが、その分入力ミス等の処理を考えると、シンプルな今回の形に落ち着きました。
このあたりを実現するには、UIから開発する必要が出てくるので、今後運用していく中でニーズが高まれば、検討したいと思います。
このツールを使うことで、誰でもチャンネルに招待できるようになり、業務効率や情報の公開性を向上することができたかと思います。 これからも、社内が便利になったり業務効率が上がるような仕組みを、模索し続けていきます。
コーポレートエンジニアリングでは、一緒に会社をより良くしていく仲間を募集中です。 興味を持たれた方は、ぜひご応募ください! https://smartnews.workable.com/j/2AE725C07D
なおコーポレートエンジニアリング以外にも、多数のポジションで皆様の応募をお待ちしております。 また、もっと気軽に会社のことを聞いてみたいという方には、カジュアルな面談という形もご用意しておりますので、ご興味持たれた方はぜひ一度ご連絡ください。 https://smartnews.workable.com/



関連記事
Transformersでのモデル学習状況をSlackに通知する
Hugging Face Transformersライブラリを使用したモデル学習中に、学習状況をSlackに自動通知する方法についての記事です。
Jamboardを導入しました
Googleの電子ホワイトボード「Jamboard」が日本で購入可能になり、コーポレートエンジニアリング部門が導入を発表しました。
iOSアプリの週次リリースを支える技術
SmartNewsアプリの急成長とチーム拡大の中で、iOSチームが週次リリースを実現する技術的取り組みについて紹介。
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み