見出し画像

第5週 課題の学び:業務効率化ツール作成|認定証発行

AIを使って業務効率化するプロジェクト始動!
このkeitaroさん率いる「けいたろう軍団」のプロジェクトでは
毎週 課題提出&フィードバックを繰り返し「2ヶ月後にAIを使って業務効率化できるようになること」を目指しています。



【挑戦】
認定証発行をGASで自動化!
コードと運用フローを大公開

前回の「挑戦編」で一括で作った認定証を、フォルダで管理して自動で発行(メール送付)までできたらいいのに!と思って取り組んでみました!
今回は、実際に構築したコード例やシート設定を具体的に紹介します。

1. 必要なもの

  1. Google ドライブ

    • 画像保管用のフォルダを準備(例:フォルダ名「認定証」)

  2. スプレッドシート

    • 受講者リストなどのカラムを用意(前回一括作成で作ったリストに情報を追加して作成)


2. スプレッドシートのヘッダ例

下記のような見出しを想定します。シート名は「リスト」です。
A列は通番、B列は任意の番号を設定してください。

列:ヘッダ
A:NO.
B:認定番号
C:氏名
D:コース名
E:認定日
F:メールアドレス
G:認定証ファイルURL
H:認定証画像
I:送信結果

また、別のシートに「設定」というシートを作成し、B1セルにGoogleドライブの画像ファイルを格納したフォルダURLを記載します。


3.コード例

GAS(Google Apps Script)は、いつも通りAIに書いてもらいます。今回は以下のプロンプトで、作成しました。

"Googleスプレッドシートのリストシートを参照して、Googleドライブの画像ファイルをメールで自動送信するスクリプトを作成してください。スプレッドシートのリストシートには、A列にナンバー、B列に認定番号、C列に氏名、D列にコース、E列に認定日、F列にメールアドレスが記載されています。現在、認定証のファイル名は[No.].jpgの形式です。このリストをもとに、メールアドレス宛に該当者のお名前を記載したコース名、お名前、認定日を記載したメールを、ファイルを添付して送信したいです。ファイルはスプレッドシートに記載したGoogleドライブのフォルダを参照して。また、ファイル名はA列のナンバーを現在のファイル名として、[認定番号_氏名.jpg]に変更したい。G列にそのファイルのリンク、H列に「=IMAGE("ID")」で画像が表示されるようにして。そしてF列のメールアドレス宛にそれぞれ内容をその人に合わせて作成して画像ファイルを添付し送信。実行が完了したらI列に「送信完了」と追加してください。送信エラーが出た場合もI列にエラー内容を記載して。また、実行ボタンも追加して欲しいです。"

実際に組んでみたコードがこちらです。

// スクリプトエディタに以下のコードを貼り付けてください

// スプレッドシートを開いた際に実行される関数
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('カスタムメニュー') // メニュー名を設定
.addItem('認定証メール送信', 'runProcessCertificateEmails') // メニュー項目と実行する関数を設定
.addToUi();
}

// メニューから実行する関数
function runProcessCertificateEmails() {
processCertificateEmails();
}
function processCertificateEmails() {

// スプレッドシートとシートの情報を取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = ss.getSheetByName("リスト");
const settingSheet = ss.getSheetByName("設定");

// 設定シートからフォルダURLを取得
const folderUrl = settingSheet.getRange("B1").getValue();
if (!folderUrl) {
Logger.log("エラー:設定シートのB1セルにフォルダURLが設定されていません。");
return;
}

// フォルダURLからフォルダオブジェクトを取得
try {
var folderId = folderUrl.match(/[-\w]{25,}/);
var folder = DriveApp.getFolderById(folderId);
} catch (e) {
Logger.log(`エラー: 指定されたフォルダURLが不正です。${e}`);
return;
}

// リストシートのデータを取得(A列からH列)
const data = listSheet.getDataRange().getValues();

// ヘッダー行をスキップfor (let i = 1; i < data.length; i++) {
const row = data[i];
const no = row[0];
const certificateNumber = row[1];
const name = row[2];
const course = row[3];
const certificationDate = row[4];
const email = row[5];

// 現在のファイル名と新しいファイル名を生成 const oldFileName = `${no}.jpg`; const newFileName = `${certificateNumber}_${name}.jpg`;  try {   // Google Driveから指定フォルダ内のファイルを取得   const files = folder.getFilesByName(oldFileName);   if (files.hasNext()) {     const file = files.next();      // ファイル名を変更     file.setName(newFileName);     Logger.log(`ファイル名を変更しました: ${oldFileName} -> ${newFileName}`);      // ファイルのダウンロードURLを生成     const fileId = file.getId();     const fileURL = `https://drive.google.com/uc?id=${fileId}`;     listSheet.getRange(i + 1, 7).setValue(fileURL);      // スプレッドシートのH列にIMAGE関数を設定して画像を表示     listSheet.getRange(i + 1, 8).setFormula(`=IMAGE("${fileURL}")`);      const blob = file.getAs(MimeType.JPEG); // Blobを取得      // 認定日をシンプルに日付のみに整形     const formattedDate = Utilities.formatDate(certificationDate, Session.getScriptTimeZone(), 'yyyy年MM月dd日');      // メール本文の作成     const body = `       ${name}様        <br><br>       貴殿は、当スクールが実施する${course}コースの<br>       全課程を修了したことをここに認定いたします。<br>       <br>       認定日:${formattedDate}       <br><br>       認定証を添付いたします。     `;      // メール送信オプションの設定     const mailOptions = {       to: email,       subject: "認定証のご送付",       htmlBody: body,       attachments: [blob] // Blobを添付     };      // メール送信     MailApp.sendEmail(mailOptions);     listSheet.getRange(i + 1, 9).setValue("送信完了");     Logger.log(`メールを送信しました: ${email}`);    } else {     listSheet.getRange(i + 1, 9).setValue("ファイルが見つかりませんでした: " + oldFileName);     Logger.log(`ファイルが見つかりませんでした: ${oldFileName}`);   } } catch (e) {   listSheet.getRange(i + 1, 9).setValue(`送信エラー: ${e}`);   Logger.log(`エラーが発生しました: ${email} - ${e}`); }
}
Logger.log("メール送信処理が完了しました。");
}
Use code with caution.
JavaScript

4. スクリプトの実行方法

上記のコードをGoogleスプレッドシートのスクリプトエディタに貼り付けます。

スプレッドシートをリロードすると、「カスタムメニュー」というメニューが追加されます。

「カスタムメニュー」>「認定証メール送信」をクリックするとスクリプトが実行されます。

5.スプレッドシートでの画像表示

H列に画像を表示:=IMAGE(G列のID) を入力することで、G列に記載されたURLの画像が表示されます。
スプレッドシート内で画像が表示されるの、かなり使いやすいです!画像挿入しているわけではないので行ごと並び替えもできるし、Xlookupなどで別のところに抽出もできるんですよ!これ地味にすごく便利・・・!
いろんなケースでやってみてください✨


5.実際に運用してみた感想

  1. 「リスト」シートに受講者の情報を入力するだけで、認定証のファイル名変更、メール送信、送信結果の記録まで自動化できました。

  2. 画像ファイルへのURLをスプレッドシートに記載して確認できるので、どの画像を送ったか後から確認することも容易になりました。

  3. メール本文を毎回記述する必要がなくなり、作業時間が大幅に削減されました。

最初は「画像を添付してメール自動送信なんて難しそう」と思っていましたが、AIにプロンプトでお願いすると、意外と簡単に作成できました。もしうまく動かない場合も、エラーログをみたり、AIに修正してもらったりすれば、解決できると思います!

まとめ

・GASを活用して、Googleドライブの画像ファイルを添付したメールを自動で送信。
・スプレッドシートの情報を元に、ファイル名変更、メール送信、送信結果記録までを自動化。
・メール本文の記述や、ファイル名の一括変更、送信結果の記録などを自動化することで、大幅な時間短縮を実現。

ぜひみなさんも、業務の“ちょっと面倒”をGASとスプレッドシートで自動化してみてください。きっと「これ自動化できるかも?」という目が養われて、他の業務にも波及していくはずです!


おわりに

今回の記事では、GASを使って認定証発行を自動化する方法を紹介しました。ぜひこの記事を参考に、日々の業務を自動化してみてください。

最後まで読んでいただき、ありがとうございました!

いいなと思ったら応援しよう!

この記事が参加している募集