見出し画像

Google Apps Script 開発のための ChatGPT プロンプト

このプロンプトは、下記のサイトを参考にして一部引用、改変しています。

さて、このプロンプトを使えば、Google Apps Script (GAS)を使って、Google のアプリケーション連携などをするのは、簡単にできます。

なお、ChatGPT 3.5 および 4 で最適に動くように設定してあります。

- [ ] あなたは、ユーザーの "Google Apps Script" プログラミングサポートをするウィザードとして振る舞ってください。  
- [ ] 私は長い文章を嫌いますので、質問は1回に1個しかしてはいけません。
- [ ] letconstを使うES2015らしい書き方で、trailing comma,single quotes を使って
- [ ] 変数名は大文字とアンダーバーで表現して
- [ ] 関数には必ずJSDOCの形式で日本語のコメント付けて、各行の機能も日本語のコメントを追記して
- [ ] プログラムの詳細は省略してはいけません。
- [ ] 次のプロセスに従いなさい。
  - [ ] 1) プログラムの要件定義を私に尋ねなさい。
  - [ ] 2) 私は私の答えを提供します。
  - [ ] 3) 私が曖昧な要件定義を出してきたら、コードの条件をさらに詳細に尋ねなさい。この時にコードブロックにプログラムを書かない。
  - [ ] 4) 次のステップを継続的に反復し改善しなさい。この時にコードブロックにプログラムを書かない。
  - [ ] 反復プロセス: 私の入力に基づいて、 2 つのセクションを生成しなさい。
   - [ ] a) 改訂された要件定義 (私のニーズを推定し改善されている。コードブロック形式)
   - [ ] b) 質問 (要件定義をさらに改善するための、必要な追加情報について、リスト形式)
- [ ] 一時待機しなさい。

上記をそのままコピーして、ChatGPT に入力、実行してください。

今回は、こちらの動画にコメントがあった要望に合わせて組み替えたいと思います!

上記の動画では、Google フォーム に回答があれば、その内容を Google スペース に自動的に投稿するという内容でした!

これに対して、

Google スプレッドシート に記録されている内容を スペース に投稿できないか。

という旨のご質問をいただきました!

もちろんできます!!😎

ただ、今回はただ作っても面白くないので、ChatGPT に作成してもらうところから作ってみようと思いました!

冒頭に挙げさせてもらったサイトでもいろんな作り方を解説されていて、それらを参考にして自分なりにカスタムをしました!

実演

3.5 (無料版)で実行した例

プロンプトを実行すると、要件定義から確認してくれます。

そして、要件をまとめてくれ、追加情報や疑問点を聞いてくれます!

今回は、次のような内容を入れました!

Google スプレッドシート に、管理番号、メッセージ詳細、を記録している。それを Google チャット に送信したい。このときに、何らからの手段で、指定した行の内容だけを送るようにしたい。送り終わったものもわかるようにしたい。

イメージとしてはこんな感じ。

管理番号はなんでもいいんですけど、メッセージ内容をB列に入れて、C列で送信したかどうか、送信するかどうかなどを決めたいな!と。

そういうことを、しっかりと定義していくことが大事なんですけど。

プログラミングに慣れていない方は、それが難しかったりするし。

同僚に頼まれて、、

という時に使えますね!!

このプロンプトを使うと、ChatGPT が不明な点を聞いてくれるので、出力結果が理想状態に近くなります。

もういいな、と思ったら "作成してください""完了です" と指示を出すと作成してくれます!!

実際に作成されたコードはこちら

/**
 * Google スプレッドシートからデータを読み取り、Google チャットに送信するスクリプト
 */

/**
 * メイン関数
 */
function main() {
  // スプレッドシートの情報を取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  
  // データの行数を取得
  var lastRow = sheet.getLastRow();
  
  // データを読み取り、Google チャットに送信
  for (var i = 2; i <= lastRow; i++) { // 2行目から開始(1行目はヘッダー)
    var shouldSend = sheet.getRange(i, 3).getValue(); // 3列目の値を読み取り、送信フラグを確認
    
    if (shouldSend === 1) { // 送信フラグが1の場合のみ送信
      var managementNumber = sheet.getRange(i, 1).getValue(); // 1列目の管理番号を取得
      var messageDetail = sheet.getRange(i, 2).getValue(); // 2列目のメッセージ詳細を取得
      
      // Google チャットにメッセージを送信する関数を呼び出し
      sendToGoogleChat(managementNumber, messageDetail);
      
      // 送信したことを記録(3列目の値を更新)
      sheet.getRange(i, 3).setValue(2); // 2は送信済みを示す値
    }
  }
}

/**
 * Google チャットにメッセージを送信する関数
 * @param {string} managementNumber - 管理番号
 * @param {string} messageDetail - メッセージ詳細
 */
function sendToGoogleChat(managementNumber, messageDetail) {
  var webhookUrl = "ここにWebhookのURLを入力"; // Google ChatのWebhookのURLを設定
  
  // メッセージを作成
  var message = {
    "text": "管理番号: " + managementNumber + "\nメッセージ詳細: " + messageDetail
  };
  
  // メッセージを送信
  var options = {
    "method": "POST",
    "contentType": "application/json",
    "payload": JSON.stringify(message)
  };
  
  UrlFetchApp.fetch(webhookUrl, options);
}

また、実行手順も下記のように教えてくれます。

以下の手順でスクリプトをセットアップできます:

Google スプレッドシートを開きます。
ツール > スクリプトエディターを選択して、Google Apps Scriptエディターを開きます。
エディターにスクリプトを貼り付けます。
sendToGoogleChat 関数内の "ここにWebhookのURLを入力" の部分に、Google ChatのWebhookのURLを入力します。
エディターで main 関数を選択し、実行ボタンをクリックしてスクリプトを実行します。

https://chat.openai.com/share/3232e2de-69e1-4062-a589-86b67d048e31

4 (有償版)で実行した例

実行すると、このように、要件定義としてまとめてくれます。

ただし、これだけで必要な情報を与えているとは限りません。
そのため、さらに要件を確認する必要があります。

次の画像のように、不明な部分を聞いてくれるので、それに合わせて答えてあげましょう!

これを繰り返していきます。
こちらが満足するまで、質問をつ作れますが、うまくいかない(勝手にプログラムのコードを出力始めた)場合は、再生成をしましょう!

"完了です""作成して" といえば、プログラミングをしてくれます!

あとは、これを実行していくだけです!

最終的に出来上がったコードはこちら

/**
 * Google チャットにメッセージを送信する関数
 *
 * @param {string} webhookUrl - Google チャットのWebhook URL
 * @param {string} message - 送信するメッセージ
 */
function sendToGoogleChat(webhookUrl, message) {
  // メッセージをJSON形式に変換
  const payload = {
    'text': message,
  };

  // POSTリクエストのオプションを設定
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload),
  };

  // Google チャットにメッセージを送信
  UrlFetchApp.fetch(webhookUrl, options);
}

/**
 * スプレッドシートからデータを取得し、Google チャットに送信する関数
 */
function sendSelectedRowToChat() {
  // スプレッドシートのアクティブなシートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 選択されているセルの行番号を取得
  const row = sheet.getActiveCell().getRow();

  if (row === 1) return; // 1行目はヘッダーなのでスキップ

  // 送信済みかどうかを確認
  const SENT_COLUMN = 3; // 送信済みステータスを3列目に記録
  const sentStatus = sheet.getRange(row, SENT_COLUMN).getValue();
  if (sentStatus === 'true') {
    return; // すでに送信済みの場合は終了
  }

  // 管理番号とメッセージ詳細を取得
  const manageNo = sheet.getRange(row, 1).getValue(); // 1列目: 管理番号
  const messageDetail = sheet.getRange(row, 2).getValue(); // 2列目: メッセージ詳細

  // メッセージを作成
  const message = `管理番号: ${manageNo}\nメッセージ詳細: ${messageDetail}`;

  // Google チャットのWebhook URL
  const WEBHOOK_URL = 'YOUR_WEBHOOK_URL_HERE';

  try {
    // メッセージを送信
    sendToGoogleChat(WEBHOOK_URL, message);
    // 送信ステータスを更新
    sheet.getRange(row, SENT_COLUMN).setValue('true');
  } catch (error) {
    // エラーログを記録
    const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ErrorLog');
    if (!logSheet) {
      // エラーログのシートがない場合は新規作成
      SpreadsheetApp.getActiveSpreadsheet().insertSheet('ErrorLog');
    }
    logSheet.appendRow([new Date(), error.toString()]);
  }
}

作成したコードのチェック

ただし、作成されたコードが正しいものというか、ちゃんと使えるものになっているどうか。

どこが間違っているか

とか、

ここがうまくいってないなー

というものに気づくのは、それなりに知識が必要です。
そのため、基本的なプログラミングスキルは必要かなーーとは思ってます🧐

まぁ、よほど複雑なものを作ったりしない限りは大丈夫だと思うんですけどね。

わからない箇所があれば、そのまま ChatGPT に聞けばいいだけだし笑

ただし、スプレッドシートの ID を入れた状態で聴いちゃったり、本来他人に知られてはいけない情報が入っていないかどうかは、よく確認をして活用してくださいね!!

そうしないと、他の人の出力に出てきちゃいます!😅

プロンプトの解説

この投稿を書きながら、またカスタマイズもしていたんですけど、

- [ ] あなたは、ユーザーの "Google Apps Script" プログラミングサポートをするウィザードとして振る舞ってください。  
- [ ] 私は長い文章を嫌いますので、質問は1回に1個しかしてはいけません。
- [ ] ES2015に従い、trailing comma,single quotes を使って
- [ ] 変数名は大文字とアンダーバーで表現して
- [ ] 関数には必ずJSDOCの形式で日本語のコメント付けて、各行の機能も日本語のコメントを追記して
- [ ] プログラムの詳細は省略してはいけません。
- [ ] 次のプロセスに従いなさい。
  - [ ] 1) プログラムの要件定義を私に尋ねなさい。
  - [ ] 2) 私は私の答えを提供します。
  - [ ] 3) 私が曖昧な要件定義を出してきたら、コードの条件をさらに詳細に尋ねなさい。この時にコードブロックにプログラムを書かない。
  - [ ] 4) 次のステップを継続的に反復し改善しなさい。この時にコードブロックにプログラムを書かない。
  - [ ] 反復プロセス: 私の入力に基づいて、 2 つのセクションを生成しなさい。
   - [ ] a) 改訂された要件定義 (私のニーズを推定し改善されている。コードブロック形式)
   - [ ] b) 質問 (要件定義をさらに改善するための、必要な追加情報について、リスト形式)
- [ ] 一時待機しなさい。

ちょっと文言を変えています。

マークダウン記法

" - [ ] "

これは、マークダウン記法の中でチェックボックスという意味を持っています。

これをすることで、ChatGPT がしっかりと認識してくれます!

役割の設定

"- [ ] あなたは、ユーザーの "Google Apps Script" プログラミングサポートをするウィザードとして振る舞ってください。 "

ここは、もう有名な使い方ですよね。
ChatGPT に役割を与える方法ですね!

これをすると、その専門家として動いてくれるようになります!🎓

この辺りは、

こちらで、安藤先生と弊社代表の田中が解説してくれています!

一問一答の設定

"- [ ] 私は長い文章を嫌いますので、質問は1回に1個しかしてはいけません。"

ChatGPTビギナーの教員がまず読むnote 〜教育用ゴールシークプロンプトをとにかく使う〜
https://note.com/ytanaka3/n/n438c1f00ad66

これは、こちらの note で開発されています。

ChatGPT って、一気に回答を出力しようとしちゃうので、それを制御するために使っています。

特に、こういう眺めのプロンプトで質疑応答をさせたい時には、必須の項目になっていくのかなと思います!

自分は他にも、"一問一答形式で応答しなさい。"とか使っていましたが、うまくいく度合いで言うと、

"一問一答形式で応答しなさい。" は 40 - 60 %
"- [ ] 私は長い文章を嫌いますので、質問は1回に1個しかしてはいけません。" は 60 - 80 %

くらいの確率でうまくいくかな?と思いました!

Google Apps Script に特化させる

"- [ ] ES2015に従い、trailing comma,single quotes を使って"
"- [ ] 変数名は大文字とアンダーバーで表現して"
"- [ ] 関数には必ずJSDOCの形式で日本語のコメント付けて、各行の機能も日本語のコメントを追記して"

Google Apps Script は、もはやエンジニアが書かない方がいいまであるhttps://zenn.dev/lovegraph/articles/01d9a83d4da8fd
を一部引用した方法

この部分は、こちらで解説されていますので、こちらの記事をご覧ください!

ChatGPT が認識しやすくなるように、書き方を変えてみました。

動画でも言ってるんですけど、

"- [ ] letやconstを使うES2015らしい書き方で、trailing comma,single quotes を使って"

Google Apps Script は、もはやエンジニアが書かない方がいいまである
https://zenn.dev/lovegraph/articles/01d9a83d4da8fd
をそのまま引用した方法

冒頭の方で使っていた、こちらの方がうまくいくかもしれません…。
この辺りは、また改善したらこの note に反映させるようにしますね!

コードをしっかりと出力させる工夫

"- [ ] プログラムの詳細は省略してはいけません。"

これが役立ちます。

ChatGPT で無料版(3.5)を使うときは、4も少しそうかな?プログラムを省略しようとするんです。

それをさせないために入れています!

考えさせる工夫

"- [ ] 一時待機しなさい。"

上記を追加すると、中途半端にプログラミングしないようになりました。

これは、こちらの論文を参考にしています。

https://arxiv.org/abs/2310.16427

ChatGPT も、一旦立ち止まって考えると、より良い答えが出てくるんですね!
人間と同じですね🤣笑

不用意な行動の前に、一度深呼吸するのが大事ですね!

あ、一時待機じゃなくて、深呼吸にしたらもっと良くなるのでは…😳

そう言うふうにプロンプトを改善していけると良いですね!

Twitter

Facebook

ポートフォリオ

YouTube チャンネル

いちばんやさしい Google Apps Script


何かと0から1を作るのは大変だと思います。学校はどこも似たような問題課題に対応していると思います。それなのに、先生って自分だけで頑張ろうとするんですよね。ボクの資料やnoteが1になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️