🤖

【自動化】誰でも簡単!ChatGPTにGASを書いてもらおう。スプシ更新をSlackに通知する。

2024/07/30に公開

ChatGPTに協力してもらってGASを書いてみましょう。

今回は、「スプレッドシートが更新されたらその内容をSlackに通知する」というGASを書きます。

1. GASコードを生成

ChatGPTを開き、次のようなプロンプトをChatGPTに送信します。

スプレッドシートの行が更新されたらSlackに通知するGASを書いてください。ただし回答, 対応結果, 備考欄が更新された際は通知する必要はありません。スプレッドシートの列構成は | # | 内容 | リンク等 | 記入日 | 記入者 | 回答 | 対応結果 | 備考 | となっています。Slackの通知には番号, 内容, 記入者 を含めてください。通知文に元のスプレッドシートの導線を記載するようにしてください。 "シートを見る"というテキストにURLを貼るようにしてください。ヘッダー行の更新と番号の更新も通知しないようにしてください。

すると、次のようなコードが返ってきました。

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;
  const row = range.getRow();
  const col = range.getColumn();

  // ヘッダー行 (1行目) と番号列 (1列目) 及び回答 (6列目), 対応結果 (7列目), 備考 (8列目) の列を無視
  if (row === 1 || col === 1 || col === 6 || col === 7 || col === 8) {
    return;
  }
  
  // 変更された行の情報を取得
  const rowData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  // スプレッドシートのURL
  const sheetUrl = e.source.getUrl();
  
  // Slackに送信するメッセージを作成
  const message = `行が更新されました: \n番号: ${rowData[0]}\n内容: ${rowData[1]}\n記入者: ${rowData[4]}\n\n<${sheetUrl}|シートを見る>`;

  // SlackのWebhook URL (適切なURLを設定してください)
  const webhookUrl = "YOUR_SLACK_WEBHOOK_URL";

  // Slackにメッセージを送信する関数を呼び出す
  sendToSlack(message, webhookUrl);
}

// Slackにメッセージを送信する関数
function sendToSlack(message, webhookUrl) {
  const payload = JSON.stringify({ text: message });

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: payload
  };

  UrlFetchApp.fetch(webhookUrl, options);
}

また、 上記スクリプトのYOUR_SLACK_WEBHOOK_URLの部分を、実際のSlack Webhook URLに置き換えてください。 という指示も一緒に教えてくれました。

2. SlackのWebhookを代入

ChatGPTが教えてくれた通り、SlackのWebhookを上記スクリプトに入れます。

まずSlack APIのYour Appsページを開きます。


SlackのYour Appsページ(非ログイン状態)

該当Slackワークスペースで使っているアカウントでログインし、 [Create New App] します。

Features > App Home > Your App's Presence in Slackでアプリ名を付けます(この名前がついていない場合、"このアプリはこのワークスペースにボットをインストールする許可を要求していますが、現在、ボットを使用するための設定がされていません。この問題を解決するためには開発者にお問い合わせください。" というエラーが出ます)。


アプリ名を付ける欄

次にFeatures > Incoming Webhooksで [Add New Webhook to Workspace] し、通知先とするChannelを選択します。

するとWebhookが出来上がりです。あとはこれをコピーして、上記スクリプトに貼り付けます。


出来上がったWebhook

3. GASに転記

該当のスプレッドシートにて、拡張機能 > Apps Scriptを選択します。

あとはコード欄に先程のスクリプトをコピー&ペースト。

トリガー欄(タブの上から4つ目の時計アイコン)にも設定を行うようChatGPTから指示があることがあるので、それにも従います。


トリガーについてのChatGPTからの指示

テスト

スプレッドシートを更新してみましょう。今回のプロンプトでは番号, 内容, 記入者, シートへのURLを出力するようにしていました。

実際のSlack通知(テスト結果)

ちゃんと表示されていました。
無事に通知を自動化することが出来ましたので、これで完成です

感想

実際には1回のプロンプトで完成できたわけではなく、テストする, 改良をオーダーするなどの作業を行い、20分程度で望ましい通知を実現することができました。

自分はコードは全く書けません。GASも自分にとっては、知ってるけれど検索してコピペできるコードが転がっていたら使う という程度でした。大抵はZapierなどワークフローツールで知識不足を補っていましたが、それもコストがかかるので限界があります。

しかし今では、ChatGPTの協力で数分でコードを書くことができ、テストしては改良をオーダーを何度も反復して望ましいコードを得ることも出来るようになりました。しかも、Zapierのようなノーコードツールを使って実装するよりもずっと早く出来たことは驚きです。

Appendix

実際のやり取り(ChatGPT):https://chatgpt.com/share/874b87be-75ab-4265-9d4b-bf534a1b7e46

Discussion