マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

AIツール実験室

2023.12.20

【AIツール実験室】Gmail効率化ツール「 Gmailリスト出力 くん?」

【AIツール実験室】Gmail効率化ツール「 Gmailリスト出力 くん?」

はじめに

ごあいさつ

日本全国の「Gmailが溜まっちゃって大変すぎる」というみなさま、
おつかれさまです。

【おすすめYouTube動画】ChatGPTにプレイさせる「Detroit: Become Human」

■名作アドベンチャーゲーム「Detroit: Become Human」とは
・インタラクティブドラマ+アドベンチャーゲーム
・2018年 PlayStation4でリリース
・他プラットフォームにも展開
・舞台設定=2038年のデトロイト
・「高度に発展した人工知能を持つアンドロイド」が「人間」と共存している世界
・プレイヤーの選択が物語の結末に直接影響
・複数のエンディングが存在
・高度なグラフィックス
・リアルなキャラクターモデリング
・現代社会における「技術の進歩」と「倫理的な問題」を考えさせられる作品

■動画概要
・全17本
・およそ14時間ほどの大ボリューム

■選択肢をChatGPTが決定
ChatGPT(チャッくん)にそれまでのストーリーなどを入力して、
選択肢が出てきたら、
ChatGPT(チャッくん)の選択結果を採用して進める
という動画です。

■見どころ
・「AI」(チャッくん)が「高度AIを搭載したアンドロイドたちの物語」をプレイ
・ChatGPTが、そんな回答をするとは事件
・平和主義なチャッくん
・でも、やるときにはやるチャッくん
・緊迫シーンでドキドキするチャッくん
・トークン制限の影響により、言動がおかしくなってしまうチャッくん
・「AI」と「人間」の違いって何なのですかね?

■原作を1回プレイしてから見ていただきたい動画
「Detroit: Become Human」は、普通にとても面白いゲームです。
1回ゲーム版をプレイしてエンディングを迎えた後に、
この動画を見ると、余計におもしろくなります。

■見届けてあげてください
この動画シリーズは、毎週一番楽しみにしていたものでした。
動画のみでも、もちろん面白いので、
年末年始のお休みにでも、
「ChatGPT(チャッくん)が選択した物語の結末」を見届けていただきたい、
マジセミ担当者Aでございます。

■YouTubeプレイリスト

→YouTube →エピゲームズ【AI実況】 →AIにプレイさせるDetroit: Become Human

今回の作戦

今回は、
Googleスプレッドシート上で「GAS」(Google Apps Script)関数として動作する、
Gmail効率化ツール「Gmailリスト出力くん?」
を作成してみました。

コード部分はコピペするだけで(おそらく)いけるので、
特に「関数とかいじったことがない人向け」の「お試しチュートリアル」として、
「お試し機能実装」を体験していただけるとよろしいかと思います?

ご注意点

※本記事は、担当者Aの主観により作成されていますので、なにとぞ、そういうことでよろしくお願いします。
※こちらで提供されているコードを利用した結果、「何か大変なこと」になったとしても、一切の責任を負いません。
※「因果応報自業自得自己責任」の「崇高なる精神」でお楽しみください。

ことのあらまし

とある闇の会議にて

舎弟A:「やっぱり、山ほどやってくる請求書の処理は大変ですか?」
とあるアニキ:「そうですね。数も多いので、1個ずつ開いて処理するのは、大変ですね〜。」
舎弟A:「Googleスプレッドシートにリスト表示とか、できるんじゃないですかね?」

できました!

ChatGPT4と打ち合わせしつつ、
動作チェックをしつつ、
小粋なトークを交わしつつ、
動作チェックをした結果・・・

Gmail効率化ツール「Gmailリスト出力くん?」
が、とりあえず完成しました。

「Gmailリスト出力くん?」を動かす方法

①Googleスプレッドシートを新規作成します

シートタイトルを「Gmailリスト出力くん?」などにします。

②「Apps Script」をクリックします

上部メニュー →拡張機能 →Apps Script をクリックします。

③コードエディタが開きます

プロジェクトタイトルを「Gmailリスト出力くん?」などにします。

④コードをコピペします

コード

// スプレッドシートが開かれたときに自動で実行される関数
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // スプレッドシートのメニューバーに新しいメニューを追加
  ui.createMenu("★効率化ツール★")
    .addItem("Gmailリスト出力くん?","importEmailsToSheet")
    .addToUi();
}


// Gmailのメールをスプレッドシートにインポートする関数
function importEmailsToSheet() {
  var folderName = "Gmailリスト出力くん?";
  var sheet = SpreadsheetApp.getActiveSheet();
  // 現在のシートのテキストをクリアする
  clearSheetText(sheet);
  // シートの最初の行にヘッダーを追加
  sheet.appendRow(["日付", "曜日", "時刻", "送信者名称", "送信者メルアド", "メールタイトル", "メール本文",
                  "添付ファイル01", "添付ファイル02", "添付ファイル03", "添付ファイル04", "添付ファイル05",
                  "添付ファイル06", "添付ファイル07", "添付ファイル08", "添付ファイル09", "添付ファイル10"]);


  // 指定した名前のフォルダを取得または作成
  var folder = getOrCreateFolder(folderName);
  // フォルダ内のファイルをすべて削除
  clearFolder(folder);


  // Gmailの受信箱内のすべてのスレッドを取得
  var threads = GmailApp.getInboxThreads();
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var date = message.getDate();
      // 曜日を取得(日曜日が0、月曜日が1...)
      var dayOfWeek = ["日", "月", "火", "水", "木", "金", "土"][date.getDay()];
      // 送信者の名前とメールアドレスを取得
      var senderName = message.getFrom().replace(/ <.*/, "");
      var senderEmail = message.getFrom().replace(/.*</, "").replace(/>/, "");
      // メールの件名を取得
      var subject = message.getSubject();
      var body = message.getPlainBody();
      var attachments = message.getAttachments();
      // 添付ファイルのリンクを生成
      var attachmentLinks = attachments.map(function(attachment) {
        var file = folder.createFile(attachment);
        var url = file.getUrl();
        return '=HYPERLINK("' + url + '", "' + attachment.getName() + '")';
      });


      // 添付ファイルのリンクを10個の列に分割して配列に格納
      var attachmentColumns = new Array(10).fill("");
      for (var k = 0; k < attachmentLinks.length && k < 10; k++) {
        attachmentColumns[k] = attachmentLinks[k];
      }


      // メールの日付と時刻をフォーマット
      var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy/MM/dd");
      var formattedTime = Utilities.formatDate(date, Session.getScriptTimeZone(), "HH:mm:ss");


      // シートにメールの情報を行として追加
      sheet.appendRow([formattedDate, dayOfWeek, formattedTime, senderName, senderEmail, subject, body].concat(attachmentColumns));
    }
  }
}


// 指定したシートのテキストをクリアする関数
function clearSheetText(sheet)
{
  var range = sheet.getDataRange();
  // セルの内容のみをクリアし、書式はそのまま残す
  range.clearContent();
}


// 指定した名前のフォルダを取得または新しく作成する関数
function getOrCreateFolder(folderName) {
  var folders = DriveApp.getFoldersByName(folderName);
  // フォルダが既に存在する場合はそのフォルダを、存在しない場合は新たにフォルダを作成
  return folders.hasNext() ? folders.next() : DriveApp.createFolder(folderName);
}


// 指定したフォルダ内のすべてのファイルを削除する関数
function clearFolder(folder) {
  var files = folder.getFiles();
  // フォルダ内のすべてのファイルをゴミ箱に移動
  while (files.hasNext()) {
    files.next().setTrashed(true);
  }
}

コピペした様子

⑤「保存ボタン」をクリックします

⑥スプレッドシートをリロード(ページ再読み込み)します

コードエディタではなく、
スプレッドシートのタブのほうで、
リロード(ページ再読み込み)します。

ちょっと待つと、
上部メニューの一番右に「★効率化ツール★」が表示されます。

⑦「Gmailリスト出力くん?」を実行します(1回目)

上部メニュー →★効率化ツール★ →Gmailリスト出力くん? をクリックします。

⑧認証処理をします

初回実行だけ、認証処理が入ります。
「崇高なる精神」にて、「OK」および「許可」します。

⑨「Gmailリスト出力くん?」を実行します(2回目)

初回の認証処理で中断されたので、
再度、
上部メニュー →★効率化ツール★ →Gmailリスト出力くん? をクリックします。

⑩Gmailがリスト表示されます

しばし時間がかかりますが、
リスト表示されるはずです。

表示されましたか?

⑪見た目を整えておきます

最初の1回だけ、表示を綺麗にしておけば、
フォーマットは維持されます。

「Gmailリスト出力くん?」機能説明

メール情報取得機能

Gmailの「受信トレイ」に入っているメール情報をリスト出力します。

メール基本情報表示機能

・日付
・曜日
・時刻
・送信者名称
・送信者メルアド
・メールタイトル
・メール本文

添付ファイル表示機能

各メールに添付されているファイルが「10件まで」表示されます。

添付ファイルのリンクをクリックすると、
内容が別タブで表示されます。

※「PDF表示」および「画像表示」については確認しました。

「ReReReReReメール」分割機能

返信に次ぐ返信で、とんでもなく長い「ReReReReReメール」というものがあります。
そのようなメールに含まれるメールを1件ずつ分割して、
1行ごとに表示してくれます。

意図してなかった機能

特に意図した機能ではなかったので、
発見した時には驚きました。
どういう仕組みなのかは分かりませんが、
もしかすると、便利かもしれませんね。

添付ファイルのワークフォルダ保存機能

Googleドライブのルート(一番上の階層)に、
「Gmailリスト出力くん?」というワークフォルダを作成します。

このフォルダの中に、すべての添付ファイルが一次保存されます。

フォルダごと削除してしまっても大丈夫です。

クリア後のエンドコンテンツ

複数のアカウントを切り替えて使っている場合などで、
うまく動かない場合があるかもしれません。

生成AIにコードを突っ込んでみることで、
「各種エンドコンテンツ」をお楽しみいただけます。
・なかなか進まないトラブルシューティング
・果てなきコード改造
・終わりなき機能追加 など

終わりの会

「GAS」(Google Apps Script)を使えば、
生成AIとAPIで繋げてAI能力を使った自動化など、
さまざまな効率化機能の実装が可能になるはずです。

コードの構文などが分からなくても、
「生成AIとの膝を突き合わせたお話し合い」で、
コードができてしまいます。

おびただしくめんどいルーチン作業などがある場合、
1回自動化関数を作成すると、
「驚きの楽ちん作業」になれるかもしれません。

Excelでも、同様の自動化は可能なので、
みなさま、
なるべく楽をしてまいりましょう?

【お知らせ】「マジセミ」のご紹介

「マジセミ」では、日々、多くのIT関連セミナーを開催しています。

多くのセミナーの中から「ご自身のスキルやビジネスを強化できるセミナー」を見つけて、
ぜひ1度、ご参加ください。

マジセミのイメージロゴ

マジセミ関連プラットフォーム

プラットフォーム 説明 URL
マジセミ マジセミで実施されるさまざまなセミナーの開催情報を確認できます。
「IT関連セミナー」「製造業関連セミナー」など、ご自身のビジネスを強化できるセミナーを検索できます。
→majisemi.com
マジセミサービス 「セミナーを開催したい方」向けの情報を確認できます。
トライアルからの利用が可能です。
→majisemi.com
→service
マジセミドライブ IT関連コンテンツを紹介しています。 →majisemi.com
→topics
YouTubeマジセミ動画①
情シス向けIT・DX
「情シス向け」の最新トレンド情報をお届けします。 →youtube.com
→@majisemi
YouTubeマジセミ動画②
情報セキュリティ
「情報セキュリティ」の最新トレンド情報をお届けします。 →youtube.com
→@majisemisecurity
YouTubeマジセミ動画③
企業向けAI活用
「AI活用」の最新トレンド情報をお届けします。 →youtube.com
→@majisemiai
YouTubeマジセミ動画④
製造業向け先端技術・DX
「製造業向け」の最新トレンド情報をお届けします。 →youtube.com
→@majisemimanufacturing
YouTubeマジセミ動画⑤
人事・バックオフィス部門向け
「人事」「バックオフィス」部門向けの最新トレンド情報をお届けします。 →youtube.com
→@majisemibackoffice
マジセミFacebook 毎日「マジセミ関連情報」や「IT関連ニュース」などを紹介しています。 →facebook.com
→OSSNews
マジセミX(Twitter) マジセミFacebookと同様に投稿しています。 →twitter.com
→Majisemi_it
マジセミInstagram マジセミFacebookと同様に投稿しています。 →instagram.com
→majisemi_it/
マジセミThreads マジセミFacebookと同様に投稿しています。 →threads.net
→@majisemi_it
マジセミBluesky マジセミFacebookと同様に投稿しています。 →majisemi.bsky.social

おすすめの記事

【デジタル寺田の3分用語解説】 「 心理的安全性 」が無い職場とは??

デジタル寺田の3分用語解説

2025.03.17

【デジタル寺田の3分用語解説】 「 心理的安全性 」が無い職場とは??

「 心理的安全性 」が低い職場とはどのような環境なのか、具体的な特徴を解説します。「質問しづらい雰囲気」「失敗を報告できない隠蔽体質」「発言をためらう風土」など、心理的安全性の欠如がもたらす影響を詳しく紹介し、安全な職場づくりの重要性も解説します。

【デジタル寺田の3分用語解説】 「 動画SEO 」とは?▶️

デジタル寺田の3分用語解説

2025.04.21

【デジタル寺田の3分用語解説】 「 動画SEO 」とは?▶️

BtoBマーケティングで注目される「 動画SEO 」について、「視聴維持率やユーザーリアクションを高めるポイント」「YouTube動画検索で上位表示を狙うための動画SEOの基本テクニック」「高品質コンテンツ制作」「先行者優位で第一想起を獲得する戦略」を紹介します。

【デジタル寺田の3分用語解説】 「 AIエージェント 」は、人間の管理職の代わりになるか??

デジタル寺田の3分用語解説

2025.03.11

【デジタル寺田の3分用語解説】 「 AIエージェント 」は、人間の管理職の代わりになるか??

「 AIエージェント 」は営業マネージャーの業務をどこまで代行できるのか?「データ分析」「フィードバック」「自動日程調整」の可能性を探り、未来の管理職のあり方を考察します。AIが進化する中で、人間の役割はどう変わるのか詳しく解説します。