マジセミドライブ

ウェビナー関連のニュースや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でも、同様の自動化は可能なので、
みなさま、
なるべく楽をしてまいりましょう👍

【お知らせ】AI関連 記事リストポータル

こちらのページでは、
【ChatGPTプラグイン探訪】および【AIツール実験室】の記事一覧を参照できます。

→AIツール関連 記事リストポータル

AI関連記事リストポータルのイメージ

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

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

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

マジセミのイメージロゴ

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

プラットフォーム 説明 URL
マジセミ マジセミで実施されるさまざまなセミナーの開催情報を確認できます。
「IT関連セミナー」「製造業関連セミナー」など、ご自身のビジネスを強化できるセミナーを検索できます。
→majisemi.com
マジセミサービス 「セミナーを開催したい方」向けの情報を確認できます。
トライアルからの利用が可能です。
→majisemi.com →service
YouTubeマジセミ動画①
IT製造業DX
「マジセミ」で開催している年間1000回のウェビナーの中から、「IT業界と製造業DX」の最新トレンドをサマリー動画でお届けします。 →youtube.com
→@majisemi
YouTubeマジセミ動画②
ITセキュリティ
ITセキュリティの最新トレンドに関するものを集めてサマリー動画でお届けしています。 →youtube.com
→@majisemisecurity
マジセミドライブ 「AIツール実験室」などの、IT関連コンテンツを紹介しています。 →majisemi.com
→topics
マジセミ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

おすすめの記事

【ChatGPT探訪】「 無限議論 」〜最強スタンド考察〜🤔

ChatGPT探訪

2024.05.07

【ChatGPT探訪】「 無限議論 」〜最強スタンド考察〜🤔

マジセミSNSに投稿した 【担当者A】の「 無限議論 」〜最強スタンド考察〜💬 を記事化したものです。 ChatGPTに課金していないみなさんにも、 AI同士の議論をお楽しみいただけます👍 ※原稿テキストを放り込むだけで、 ジョジョ風イラストを作成してしまう生成AIがすごくないですか?

【トレンド解説】超入門「 スマートファクトリー 」🏭

トレンド解説

2024.04.15

【トレンド解説】超入門「 スマートファクトリー 」🏭

「 スマートファクトリー 」への理解を深めるための解説として、初心者向けにわかりやすくまとめた記事です。「新しい工場の概念」「デジタルツインの活用」「IoT技術による最適化」など、現代の製造業に必要な知識を効果的に学べます。 スマートファクトリー の導入によるメリットを具体的に解説しています。

【トレンド解説】米国における「 生成AI活用 」最新動向📈

トレンド解説

2024.05.07

【トレンド解説】米国における「 生成AI活用 」最新動向📈

「米国における 生成AI活用 最新動向」について解説しています。生成AIは日本企業にも多くの可能性をもたらし、「デスクワークの効率化」や「業務の自動化推進」に貢献しています。生成AIを理解し、活用することが、グローバルな競争力を高める鍵となります。