ポートフォリオへ戻る
GASデモ①: フォーム → スプレッドシート → Slack/LINE通知
サンプル制作(自主制作・架空案件)
GASデモ①: フォーム → スプレッドシート → Slack/LINE通知
業務フロー自動化
問い合わせ・申込フォームの回答を自動でスプレッドシートに記録し、担当者へSlack・LINEで即時通知する仕組みです。 Google Apps Script(GAS)のみで完結し、追加サーバーや有料サービスは不要です。 このページではコード全文・処理フロー図・動作確認手順をすべて公開しています。
処理フロー
フォーム送信から通知・ログ記録までの流れです。SlackとLINEはそれぞれ独立して動作するため、 片方の設定に不備があってももう片方の通知は正常に届きます。
横にスクロールしてご覧いただけます(全5ステップ)
できること一覧
- フォーム送信を検知し、送信直後に自動実行
- 回答内容をスプレッドシートへ自動追記
- Slackへ整形済みメッセージを通知(Incoming Webhook)
- LINEへ整形済みメッセージを通知(Messaging API)
- 必須項目の入力チェック(未入力は通知せずエラーログへ)
- Slack/LINEの片方が失敗してももう片方の通知は継続
- 通知ログ・エラーログをスプレッドシート上に自動記録
- 秘密情報(Webhook URL・トークン)はコードに書かず分離管理
コード抜粋(全文はご相談時にお渡しします)
実行環境の制約上、この場でのGAS実行画面・実行結果のスクリーンショットは提示していません。 代わりにコード全文の公開と、下記「動作確認手順」で誰でも同じ結果を再現できる形にしています。
function onFormSubmit(e) {
var config = getConfig_();
try {
var answers = extractAnswers_(e);
var missingFields = findMissingRequiredFields_(answers, config.requiredFieldNames);
if (missingFields.length > 0) {
logError_('必須項目が未入力: ' + missingFields.join(', '), answers);
return;
}
var message = buildMessage_(answers);
var results = {
slack: config.enableSlack
? safeNotify_('Slack', function () { notifySlack_(config, message); })
: 'skip',
line: config.enableLine
? safeNotify_('LINE', function () { notifyLine_(config, message); })
: 'skip'
};
logNotifyResult_(answers, results);
} catch (err) {
logError_('予期しないエラー: ' + err.message, (e && e.namedValues) || {});
}
}
function notifySlack_(config, message) {
if (!config.slackWebhookUrl) {
throw new Error('SLACK_WEBHOOK_URLが未設定です(スクリプト プロパティを確認)');
}
var response = UrlFetchApp.fetch(config.slackWebhookUrl, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ text: message }),
muteHttpExceptions: true
});
if (response.getResponseCode() >= 300) {
throw new Error('Slack API応答エラー: ' + response.getResponseCode() + ' ' + response.getContentText());
}
}
function getConfig_() {
var props = PropertiesService.getScriptProperties();
return {
enableSlack: (props.getProperty('ENABLE_SLACK') || 'true') === 'true',
slackWebhookUrl: props.getProperty('SLACK_WEBHOOK_URL') || '',
enableLine: (props.getProperty('ENABLE_LINE') || 'false') === 'true',
lineChannelAccessToken: props.getProperty('LINE_CHANNEL_ACCESS_TOKEN') || '',
lineTargetId: props.getProperty('LINE_TARGET_ID') || ''
// ...必須項目・ログシート名も同様にプロパティから読み込む
};
}
導入の流れ(非技術者向け・5〜10分)
実際の納品時は、スクリーンショットなしでも迷わず進められる粒度の手順書を別途お渡しします。ここでは流れの概要のみ記載します。
- Googleフォームを作成 ── 質問項目(お名前・連絡先・お問い合わせ内容など)を設定するだけ
- 回答用スプレッドシートをリンク ── フォーム側の標準機能で自動作成
- コードを貼り付け ── スプレッドシートの「拡張機能→Apps Script」にコピー&ペースト
- Slack/LINEの通知先を設定 ── Webhook URLやトークンを「スクリプト プロパティ」に登録(コードは編集不要)
- テスト実行して完了 ── 用意したテスト関数を1回実行し、通知とログを確認するだけ
動作確認手順(どなたでも再現できます)
- コードをコピーしてご自身のスプレッドシートのApps Scriptに貼り付ける
- Slack Webhook URL(または LINE のトークン)をスクリプト プロパティに設定する
- 用意されているテスト関数
testWithSampleDataを実行する - Slack/LINEに「テスト太郎」名義の通知が届くことを確認する
- スプレッドシートに「通知ログ」シートが自動作成され、1行記録されることを確認する
保守・継続対応について
- 通知先の追加・変更(Chatwork/Discord/メール等)
- フォーム項目の追加に合わせた必須チェックの調整
- 月次の通知集計・エラー監視への拡張
- 導入後の軽微な修正・保守契約での継続対応