ChatGPTの使い所・プログラミング

去年から話題になっているChatGPTですが、

一番の使い所はプログラミングだと考えています。

今日は、GASを書いていてコードがわからなかった

ときにChatGPTを使って解決したので

共有したいと思います。

 

※ChatGPTで試行錯誤

 

Gmail一斉送信にCCを追加したい

以前、Spreadsheetに記載されている宛名に一斉にGmailを

送るGASを紹介しました。

スプレッドシートに記載されたメールアドレスにGmailから同じ文面を一斉送信する方法【GAS】

 

このとき、宛名は一つだけだったので、

「CCのアドレスと名前を追加して、なおかつ文章にもCCのお名前を追加したい」

と思いました。

■Spreadsheet(宛先)

■Google Document(メール文章)

 

まずは、SpreadsheetにCCのメールアドレスとお名前を追加するところから。

これはChatGPTに聞かなくてもわかりました。ここからデータをとってくるので。

 

次に、CCを指定して送る場合のコードがわからなかったので、

ChatGPTに、

「GAS」「CC」「宛先を指定」「Gメール」などのキーワードを入れた上で

聞いてみました。

 

すると、Gmailを送るときに定められるオプションの中に、

ccを指定すれば良いことがわかりました。

これを真似て、オプションを指定しているGASを修正(あらかじめ「ccMail」という変数も準備しています)。

let options = { //sendEmailのオプションに差出人のメールアドレス、差出人の名前を設定
"from" : From,
"name" : Send,
"cc" : ccMail,

};

次に、CCのお名前をメール文章に追加したいので、

呼び出しているGoogle DocumentにCCのお名前を追加しました。

{Ccのお名前}の中に、あらかじめ指定した変数を表示したい。

そこで、

{Toのお名前}を変数に置き換えるコードは既に書いてあるので、

これをそのまま利用しようと思い、続けて{Ccのお名前}も同じように書きました。

var body=Doc.replace(/{Toのお名前}/,toName);

var body=Doc.replace(/{Ccのお名前}/,ccName);

しかし、これで実行するとToの宛先が入力の表示そのままになってしまいました。

 

むむっ

と思ってしばらく考えましたが

「2行目でbodyの内容全体が置き換えられてしまったのか」と気づきました。

 

あらためてreplace関数を書くと上書きしてしまう。

であるならばどうにかして複数の変数に置き換える

方法を考えなければなりません。

 

そこで、replace関数を使うことはわかっていたので

「GASのreplace関数で、複数の言葉を置き換えるメソッドを教えて」

とChatGPTに聞いてみました。

回答が出てきましたが、「あらかじめ配列に含まれる言葉を正規表現を用いて

すべて一つの言葉に置き換える」プログラムで私が求めるものではありませんでした。

 

うむむむむ・・と悩み、

「以前、連続して何かを指定するときはなんとかチェーンっていって繋げられたような・・」

という記憶が蘇り、「連続」というキーワードが思いつきました。

そこで、質問を変え、

GASのreplace関数で、複数の言葉を連続して置き換えるメソッドを教えて

と聞いてみたところ、

と、「.(ドット)」でつなげばreplace関数で複数の言葉を置き換えられるという

私が求めているコードが見つかりました!

(置き換える言葉が2つだけなので今回はChatGPTが勧める配列方法は割愛しました)

 

というわけで、以下のように書き換えたところ、

うまくいきました。

/var body=Doc.replace(/{Toのお名前}/,toName).replace(/{Ccのお名前}/,ccName);

あとで調べたところ、こういう連続して一度に実行するプログラミングを

「メソッドチェーン」というらしいです。

うろ覚えでしたが、「連続」というキーワードを覚えていてよかったと。

 

今回、作ったGメール(CCも指定できる)一斉送信

のプログラムの全体も残しますので、よかったら参考にしてください。

/function sendEmail() {
var ss=SpreadsheetApp.getActiveSheet();//アクティブなシートを取得する
var row=ss.getDataRange().getLastRow();//シート上のデータが存在する範囲の最終行を取得する
var docMail=DocumentApp.openById("●●(指定のDocument IDを入力)");//DocumentのIDを指定して、
ドキュメントを開く
var Doc=docMail.getBody().getText();//ドキュメントのBody(内容)を取得の上、文字列を取得する
 
var subj="●●メールのタイトルを指定してください"; //メールのタイトル
var From="●●(差出人のメールアドレスを指定してください)"; //差出人のメールアドレス
var Send="●●(差出人の名前を指定してください)"; //差出人の名前
for(var i=2;i<=row;i++){ //最終行になるまで、下記を繰り返す
  var toName=ss.getRange(i,1).getValue();//Toの氏名を変数ToName変数に格納
  var toMail=ss.getRange(i,2).getValue();//送り先のメールアドレスを変数toMailに格納
  var ccName=ss.getRange(i,3).getValue();//Ccの氏名を変数ToName変数に格納
  var ccMail=ss.getRange(i,4).getValue();//ccのメールアドレスを変数ccMailに格納
  
  

  var body=Doc.replace(/{Toのお名前}/,toName).replace(/{Ccのお名前}/,ccName);//ドキュメントの宛名を、
ToNameとCcNameに置き換えた上で本文をbody変数に格納


  let options = { //sendEmailのオプションに差出人のメールアドレス、差出人の名前を設定
    "from" : From,
    "name" : Send,
    "cc" : ccMail,
   
  };
  GmailApp.sendEmail( //宛先、題名、内容、オプションを指定してメールを送付する
    toMail,
    subj,
    body,
    options,
   );
}
}/

 

プログラミング+ChatGPTの所感

あらためて、ChatGPTが出てきたことによって

プログラミングを書くことが効率的にできるようになった

と感じています。

 

試しに、Googleで

「GAS 連続 replace関数 複数 置き換え・・・」

といった検索ワードで検索しても

ドンピシャで出てくるものがなく。

 

ただ、ChatGPTを使う場合も

エラーの原因がなんとなくわかる、重要なキーワードを指定するといった

「あたりをつける」

スキルは必要なので、

「プログラミングを学ばなくてもコードが誰でも書ける」

とは全く言えないと感じました。

 

明らかに効率化できるようになったけど、

それはある程度の基礎がわかっている人前提かなと。

 

ですので、プログラミングに限らず

「基礎」は今後も学び続ける必要がありそうです。

 

まとめ

プログラミングにChatGPTを活用してみたので

その経緯をまとめてみました。

基礎は必要だけど、

その先の応用は非常にやりやすくなったと感じています。

試行錯誤が参考になれば幸いです。

 

編集後記

楽天ひかりの解約に悪戦苦闘。

ネットで申し込みしたのに、

電話がかかってくる(毎回本人確認あり)、

退去後の工事なので管理人さんに

連絡せねばならず(話があまり通じず)、

思いのほか時間がとられました・・・・。

 

最近のあたらしいこと

調光式のロールスクリーン

雷神堂 北鎌倉店

とっても可愛いおせんべいやさんを発見。鎌倉はこういう個人商店があって楽しいです。

« »