「入社日にPCがない」をなくす!Google FormsとSlack/Teamsで実現する「入退社フロー」自動化の仕組み
「入社日にPCが届いていない」「アカウントがまだ発行されていない」「退職者のアカウントがずっと残っている」――。これらは、多くの企業で総務や情シス部門が抱える共通の悩みではないでしょうか。
入退社時の手続きは多岐にわたり、関係部署も複数にわたるため、手作業での連絡や確認にはどうしてもヒューマンエラーがつきものです。特に、連絡漏れや情報伝達の遅れは、新しいメンバーの会社への印象を悪くしたり、セキュリティリスクにつながったりと、組織にとって大きな損失になりかねません。
本記事では、このような課題を解決するため、Google Forms、Google Apps Script、そしてTeams/Slackを連携させた「入退社フローの自動化」について、具体的な手順とサンプルコードを交えながら解説します。プログラミング初級者の方でも実践できるよう、丁寧に説明しますのでご安心ください。
なぜ入退社フローの自動化が必要なのか?
手作業による入退社フローには、以下のような問題点が潜んでいます。
- 連絡漏れ・遅延: 各部署への連絡がメールや口頭になりがちで、抜け漏れが発生しやすい。
- 情報の一元管理不足: 必要な情報が複数の場所に散らばり、確認に時間がかかる。
- ヒューマンエラー: 手入力によるミスや、確認不足によるトラブルが発生しやすい。
- 担当者依存: 特定の担当者に業務が集中し、属人化しやすい。
- 従業員体験の低下: 入社初日に必要なものが揃っていないと、新入社員のモチベーションに影響。
これらの問題を解決し、効率的でミスのないスムーズな入退社を実現するために、自動化は非常に有効な手段です。
自動化の全体像と今回利用するツール
今回構築する自動化フローは、以下のシンプルな構成です。
- 人事・総務部門がGoogle Formsで入退社情報を入力
- フォーム送信をトリガーにGoogle Apps Scriptが自動実行
- Google Apps ScriptがSlack/Teamsに必要情報を自動通知
利用するツールは以下の通りです。
- Google Forms: 入退社情報の入力インターフェース
- Google Apps Script (GAS): フォームのデータを受け取り、Slack/Teamsへ連携するロジック
- Slack / Microsoft Teams: 関係部署への通知先
実践!Google FormsとSlack/Teams連携で入退社フローを自動化する手順
Step 1: Google Formsで入退社情報入力フォームを作成する
まずは、入退社に関する情報を入力するためのGoogle Formsを作成します。必要な項目を自由に設定してください。
- 氏名
- 所属部署
- 入社日 / 退職日
- PC手配の要否
- アカウント発行の要否(メール、グループウェアなど)
- その他特記事項
フォーム作成後、回答を保存するためのスプレッドシートが自動生成されることを確認してください。
ポイント: 必須項目を設定し、入力漏れを防ぎましょう。また、プルダウンやラジオボタンを活用すると、入力ミスを減らせます。
Step 2: Slack / Microsoft Teams の Webhook URL を取得する
Google Apps ScriptからSlackやTeamsにメッセージを送信するために、Incoming Webhook URLが必要です。それぞれの取得方法を簡単に説明します。
Slackの場合
- Slackアプリディレクトリで「Incoming WebHooks」を検索し、インストールします。
- 通知を送信したいチャンネルを選択し、「Incoming WebHooks インテグレーションの追加」をクリック。
- 表示されたWebhook URLをコピーしておきます。
Microsoft Teamsの場合
- 通知を送信したいチームのチャンネルで「…」をクリックし、「コネクタ」を選択します。
- 「Incoming Webhook」を検索し、「追加」をクリックします。
- コネクタ名を入力し、アイコンを設定後、「作成」をクリック。
- 表示されたWebhook URLをコピーしておきます。
このURLは、後ほどGoogle Apps Scriptで使用します。
Step 3: Google Apps Script (GAS) で自動通知スクリプトを実装する
いよいよ核となる自動化スクリプトを作成します。Google Formsに紐付けられたスプレッドシートから、スクリプトエディタを開きます。
- Google Formsの「回答」タブから、スプレッドシートアイコンをクリックし、回答が保存されているスプレッドシートを開きます。
- スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。
- 開いたスクリプトエディタに以下のコードを記述します。
const SLACK_WEBHOOK_URL = "ここにSlackまたはTeamsのWebhook URLを貼り付けます"; // ★Step 2で取得したURL
function onFormSubmit(e) {
// フォームの回答データを取得
const formResponses = e.namedValues;
// フォームの項目名と値を取得
const timestamp = formResponses["タイムスタンプ"] ? formResponses["タイムスタンプ"][0] : "N/A";
const name = formResponses["氏名"] ? formResponses["氏名"][0] : "N/A";
const department = formResponses["所属部署"] ? formResponses["所属部署"][0] : "N/A";
const startDate = formResponses["入社日"] ? formResponses["入社日"][0] : "N/A";
const endDate = formResponses["退職日"] ? formResponses["退職日"][0] : "N/A";
const pcRequired = formResponses["PC手配の要否"] ? formResponses["PC手配の要否"][0] : "N/A";
const accountRequired = formResponses["アカウント発行の要否"] ? formResponses["アカウント発行の要否"][0] : "N/A";
const remarks = formResponses["その他特記事項"] ? formResponses["その他特記事項"][0] : "なし";
// Slack/Teamsに送信するメッセージを整形
let message = "";
let color = "#36a64f"; // 緑色 (入社)
let title = "【入社者情報】";
if (endDate !== "N/A") { // 退職日の入力があれば退職者と判断
title = "【退職者情報】";
color = "#ff0000"; // 赤色 (退職)
message += `*退職日:* ${endDate}\n`;
} else {
message += `*入社日:* ${startDate}\n`;
}
message += `*氏名:* ${name}\n`;
message += `*所属部署:* ${department}\n`;
message += `*PC手配:* ${pcRequired}\n`;
message += `*アカウント発行:* ${accountRequired}\n`;
message += `*特記事項:* ${remarks}\n`;
message += `--- (フォーム回答時刻: ${timestamp}) ---`;
// Slack/Teamsに送信するペイロードを作成
const payload = {
attachments: [
{
color: color,
title: title,
fields: [
{
title: "詳細",
value: message,
short: false
}
]
}
]
};
// Teamsの場合は、Slack互換のメッセージ形式でも受け取れるため、同様のペイロードでOK
// ただし、Teamsでよりリッチなカード形式にしたい場合は、Adaptive Cardなどの形式に調整が必要
// 今回は簡易的にSlack形式で送信
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload),
muteHttpExceptions: true // エラー時もスクリプトを停止しない
};
try {
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
Logger.log("Slack/Teamsへの通知が完了しました。");
} catch (e) {
Logger.log(`Slack/Teamsへの通知に失敗しました: ${e.message}`);
}
}
コードの解説:
SLACK_WEBHOOK_URL: Step 2で取得したWebhook URLを貼り付けてください。onFormSubmit(e): Google Formsの回答が送信されたときに自動的に実行される関数です。eオブジェクトにはフォームの回答データが含まれています。e.namedValues: フォームの質問項目名(例: “氏名”)をキーとして、回答内容を取得できます。- メッセージ整形: 取得した回答内容を基に、Slack/Teamsで見やすいようにメッセージを整形しています。入社日と退職日のどちらが入力されているかで、メッセージのタイトルと色を変更するようにしています。
UrlFetchApp.fetch(): 指定したURL(Webhook URL)に対してHTTP POSTリクエストを送信し、メッセージをSlack/Teamsに送ります。
Step 4: Google Apps Scriptのトリガーを設定する
スクリプトがフォーム送信時に自動で動くように、トリガーを設定します。
- Apps Scriptエディタの左側にある時計アイコン(トリガー)をクリックします。
- 右下の「トリガーを追加」ボタンをクリックします。
- 以下の設定を行います。
- 実行する関数を選択:
onFormSubmit - イベントのソースを選択:
スプレッドシートから - イベントの種類を選択:
フォーム送信時
- 実行する関数を選択:
- 「保存」をクリックします。初回実行時にはGoogleアカウントの承認を求められる場合がありますので、手順に従って承認してください。
これで設定は完了です。Google Formsからテスト送信を行い、Slack/Teamsに通知が届くか確認してみましょう。
この自動化のメリットとさらなる展開
このシンプルな自動化を導入することで、以下のようなメリットが得られます。
- 連絡漏れの撲滅: 全ての情報が自動で関係部署に通知されるため、連絡漏れや遅延がなくなります。
- 情報伝達のスピードアップ: フォーム送信と同時に情報が共有されるため、手続きの開始が早まります。
- 総務・情シスの負担軽減: 手作業での連絡や確認作業が大幅に削減されます。
- 従業員体験の向上: 新入社員は入社初日からスムーズに業務を開始でき、退職者も円満に次のステップへ進めます。
- 履歴の一元管理: 全てのフォーム回答がスプレッドシートに記録されるため、履歴管理も容易になります。
さらに、この仕組みをベースに以下のような拡張も可能です。
- タスク管理ツールとの連携: TrelloやJiraなどと連携し、PC手配やアカウント発行のタスクを自動で作成する。
- Google Calendarへの自動登録: 入社日や退職日を自動でカレンダーに登録する。
- データベース連携: 人事システムや資産管理システムに情報を自動登録する。
- 承認フローの追加: 特定の条件で承認が必要な場合に、承認者へ通知し、承認後に次のステップに進める。
まとめ
今回は、「入社日にPCが届いていない!」といった連絡漏れを防ぐための「入退社フローのTeams/Slack自動化」について解説しました。
Google FormsとGoogle Apps Script、そしてSlack/Teamsを組み合わせることで、プログラミング経験が浅い方でも、実用的な業務自動化を比較的簡単に実現できます。この仕組みは、入退社フローに限らず、備品申請、各種申請承認、日報提出など、様々な社内業務に応用可能です。
ぜひ本記事を参考に、あなたの職場の業務改善に役立ててみてください。小さな自動化から始めて、日々の業務をよりスムーズに、より効率的にしていきましょう。


コメント