ポートフォリオへ戻る

サンプル制作(自主制作・架空案件)

GASデモ①: フォーム → スプレッドシート → Slack/LINE通知
業務フロー自動化

問い合わせ・申込フォームの回答を自動でスプレッドシートに記録し、担当者へSlack・LINEで即時通知する仕組みです。 Google Apps Script(GAS)のみで完結し、追加サーバーや有料サービスは不要です。 このページではコード全文・処理フロー図・動作確認手順をすべて公開しています。

種別: 業務フロー自動化デモ 技術: Google Apps Script 想定ジャンル: GAS自動化

処理フロー

フォーム送信から通知・ログ記録までの流れです。SlackとLINEはそれぞれ独立して動作するため、 片方の設定に不備があってももう片方の通知は正常に届きます。

横にスクロールしてご覧いただけます(全5ステップ)

処理フロー図 フォーム送信からApps Scriptトリガー起動、必須項目チェックと通知文の作成を経て、Slack通知とLINE通知に分岐し、最後に通知ログ・エラーログへ記録される流れを示す図。 ①フォーム送信 Googleフォーム ②トリガー起動 onFormSubmit 必須項目チェック ③通知文を作成 buildMessage_() ④Slack通知 Incoming Webhook ④LINE通知 Messaging API ⑤ログ記録 通知ログ エラーログ

できること一覧

  • フォーム送信を検知し、送信直後に自動実行
  • 回答内容をスプレッドシートへ自動追記
  • Slackへ整形済みメッセージを通知(Incoming Webhook)
  • LINEへ整形済みメッセージを通知(Messaging API)
  • 必須項目の入力チェック(未入力は通知せずエラーログへ)
  • Slack/LINEの片方が失敗してももう片方の通知は継続
  • 通知ログ・エラーログをスプレッドシート上に自動記録
  • 秘密情報(Webhook URL・トークン)はコードに書かず分離管理

コード抜粋(全文はご相談時にお渡しします)

実行環境の制約上、この場でのGAS実行画面・実行結果のスクリーンショットは提示していません。 代わりにコード全文の公開と、下記「動作確認手順」で誰でも同じ結果を再現できる形にしています。

Main.gs ── フォーム送信時のメイン処理
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) || {});
  }
}
Notifiers.gs ── Slackへの送信処理
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());
  }
}
Config.gs ── 秘密情報をコードに書かない設計
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分)

実際の納品時は、スクリーンショットなしでも迷わず進められる粒度の手順書を別途お渡しします。ここでは流れの概要のみ記載します。

  1. Googleフォームを作成 ── 質問項目(お名前・連絡先・お問い合わせ内容など)を設定するだけ
  2. 回答用スプレッドシートをリンク ── フォーム側の標準機能で自動作成
  3. コードを貼り付け ── スプレッドシートの「拡張機能→Apps Script」にコピー&ペースト
  4. Slack/LINEの通知先を設定 ── Webhook URLやトークンを「スクリプト プロパティ」に登録(コードは編集不要)
  5. テスト実行して完了 ── 用意したテスト関数を1回実行し、通知とログを確認するだけ

動作確認手順(どなたでも再現できます)

この環境にはGASの実行環境がないため、実行画面や結果のスクリーンショットは掲載していません。 代わりに、公開しているコードをご自身のGoogleアカウントに貼り付けるだけで、以下の手順でまったく同じ結果を再現・検証できます。

  1. コードをコピーしてご自身のスプレッドシートのApps Scriptに貼り付ける
  2. Slack Webhook URL(または LINE のトークン)をスクリプト プロパティに設定する
  3. 用意されているテスト関数 testWithSampleData を実行する
  4. Slack/LINEに「テスト太郎」名義の通知が届くことを確認する
  5. スプレッドシートに「通知ログ」シートが自動作成され、1行記録されることを確認する

保守・継続対応について

  • 通知先の追加・変更(Chatwork/Discord/メール等)
  • フォーム項目の追加に合わせた必須チェックの調整
  • 月次の通知集計・エラー監視への拡張
  • 導入後の軽微な修正・保守契約での継続対応