すぐはじめられるSlackチャンネル・メンショングループ招待の自動化 の続編です
はじめに
こちらは slack Advent Calendar 2025 6日目の記事です 🥳
- 募集中!
- すぐはじめられるSlackチャンネル・メンショングループ招待の自動化 by
waricoma - 【Slack×n8n】テキスト通知はもう古い?Block KitをAIに書かせて「リッチな対話型Bot」を爆速で作る 🎨🤖
by YushiYamamoto - 募集中!
- 募集中!
- こちらのブログ 🙌
*兼
*...1つの記事を2つのカレンダーに登録できる! by torifukukaiou さん
こちらは VisasQ Inc. Advent Calendar 2025 2日目の記事です 🥳
- 1クリックで知識をストック!Gemini API × Obsidianで実現する自分だけの単語帳
by kei3524848 さん - すぐはじめられるSlackチャンネル・メンショングループ招待の自動化
by waricoma - コンセント配線で9万円を無駄にしかけた話 by
waricoma - 募集中!
- DevinでJiraのチケットを起票する
by gaplant_tr5 さん - こちらのブログ 🙌
トップバッター 〜 から本日までの皆さまのブログもぜひご覧いただけますと幸いです 💪
対象
- 自動で招待する先の設定をコードでなくエンジニアではない方でも GUI で編集していただきたい方
- Slack Web API をカジュアルに使えない状態 など
- すぐはじめられるSlackチャンネル・メンショングループ招待の自動化 における対象と同様となっております
メンバーの属性に応じて動的に招待先を切り分ける Slack Workflow の作り方
図にすると以下のような構成で実現できます ![]()
具体的なコード
今回はシンプルに、社員かどうかの判定のみを行うシートを用意した例を紹介いたします。
| 参加 log シート | 社員メルアド一覧シート |
|---|---|
![]() |
![]() |
参加 log シートについての補足
-
- 例としてこのような全員が共通して参加するチャンネルへの Join をトリガーにした Slack Workflow を用意し…

-
- その度に 参加 log シート へ参加日時と新規メンバーのメールアドレスが追記されるようなものを予め準備した内容となっております
参加 log シート への追記を検知して一覧上での有無を判断するコード
// スプレッドシートが編集された時に実行されるインストール可能なトリガー
function onEdit(e) {
// "log"シート以外の場合は処理を終了
if (e.source.getActiveSheet().getName() !== "log") return;
// "社員メルアド一覧"シートのA列からメールアドレス一覧を取得
const ss = SpreadsheetApp.getActive();
const executorSheet = ss.getSheetByName("社員メルアド一覧");
const executorSheetLastRow = executorSheet.getLastRow();
// A列のデータを取得(1行目はヘッダーなのでスキップ)
const allowedExecutors = [];
if (executorSheetLastRow > 1) { // ヘッダー以外のデータがある場合
const emailRange = executorSheet.getRange(2, 1, executorSheetLastRow - 1, 1);
const emailValues = emailRange.getValues();
// 空でないメールアドレスを配列に追加
for (let i = 0; i < emailValues.length; i++) {
const email = emailValues[i][0];
if (email && String(email).trim() !== '') {
allowedExecutors.push(String(email).trim());
}
}
}
// 新しい行が追加されたかチェック(最終行に追加される)
const sheet = e.source.getActiveSheet();
const logSheetLastRow = sheet.getLastRow();
// 新しい行の各カラムの値を取得
const slackUserEmail = sheet.getRange(logSheetLastRow, 1).getValue();
// 新メンバーのメールアドレスが 社員メルアド一覧 に含まれているか確認
if (allowedExecutors.includes(slackUserEmail)) {
// 含まれている場合はここが動く
}
}
※ onEdit のトリガーは、以下のように「編集時」に実行されるよう設定されている前提です
設定用のコード例
/**
* トリガーを設定するセットアップ関数
* この関数は一度だけ実行してトリガーを設定してください
*/
function createTrigger() {
// 既存のトリガーを削除
const triggers = ScriptApp.getProjectTriggers();
triggers.forEach(trigger => ScriptApp.deleteTrigger(trigger));
// 新しいトリガーを作成
ScriptApp.newTrigger("onEdit")
.forSpreadsheet(SpreadsheetApp.getActive())
.onEdit()
.create();
}
実際に招待する部分のコード
// POSTリクエスト用のペイロードを準備
const payload = {
email: slackUserEmail,
};
// POSTリクエストのオプション設定
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};
// WF_URL_FOR_REGULAR_EMPLOYEE の部分は前回の記事で curl で呼び出していた URL と同じものです ※ベタ書きではなくプロパティとして設定しそれを呼び出してます
const WF_URL = PropertiesService.getScriptProperties().getProperty("WF_URL_FOR_REGULAR_EMPLOYEE");
try {
// POSTリクエストを送信
UrlFetchApp.fetch(WF_URL, options);
} catch (error) {
console.error("Webhookの送信に失敗しました(正社員もしくは契約社員):", error);
// tips: 管理者用に別途エラーメッセージを送信する何等かの手段を用意しておくとすぐサポートできるのでオススメ
// sendMessageToAdmin(`システムのエラーにより ${slackUserEmail} さんの正社員もしくは契約社員として参加するべきチャンネルへの招待に失敗しました。`);
}
以上のコードを、前述の 含まれている場合はここが動く の部分へ職場毎に柔軟にカスタマイズして追記すれば完成です! 🎉
さいごに
今回は、社内で実際に活用している仕組みを簡略化して紹介してみました!
当初はノーコードツールや Slack Web API の Token が直ぐ手に入らない状況の中での割と苦肉の策でしたが、実際に運用してみたところエンジニアではない方にとって編集しやすい Google Sheets や Slack Workflow のステップ編集などのリッチな GUI の恩恵を受けながら共同管理できるようにできたので良かったです!
どなたかの参考になれば幸いです!!
ここまでご覧くださりありがとうございました!!!


