Google Apps Scriptで始める情報収集の自動化入門

セール中

〜9月30日 22:00

情報収集に時間をかけすぎていませんか?特にGoogle Alertsのように、毎日大量に通知が届く場合、それを手動で整理するのは非常に労力がかかります。そこで、Google Apps Script(以下、GAS)を使った自動化によって、Google Alertsの通知メールを自動的にスプレッドシートに整理し、情報収集の効率を大幅に改善する方法を紹介します。

完成形のイメージ

このガイドでは、GASを初めて触る人でもわかりやすいように、ステップバイステップで説明していきます。



1. GASの準備

Google Apps Scriptとは?

GASはGoogleが提供するスクリプト言語で、Googleのサービス(Gmail、スプレッドシート、ドライブなど)を連携・自動化するのに使います。ブラウザ上でコードを書くことができ、特別な開発環境をインストールする必要はありません。

スクリプトエディタを開く方法

まず、Google スプレッドシートを開きます。次に、拡張機能メニューからApps Scriptを選択し、スクリプトエディタを開きましょう。

スクリプトエディタを開く方法

新しいプロジェクトを作成したら、次に進みます。


2. メールの自動取得と処理

ここでは、Gmail APIを使ってGoogle Alertsの通知メールを自動で取得し、処理する方法を説明します。まず、Google Alertsからのメールをフィルタリングして取得する必要があります。

var today = new Date(); // 今日の日付を取得
var yesterday = new Date(today.getTime() - (24 * 60 * 60 * 1000)); // 1日前の日付を取得
var yesterdayStr = Utilities.formatDate(yesterday, Session.getScriptTimeZone(), 'yyyy/MM/dd'); // 日付を文字列に変換

var query = 'from:googlealerts-noreply@google.com after:' + yesterdayStr; // 1日前以降のGoogle Alertsのメールを検索
var threads = GmailApp.search(query); // 検索条件に合致するメールスレッドを取得

Logger.log("Found " + threads.length + " threads."); // 見つかったメールスレッドの数をログに出力

このコードでは、Gmailの検索機能を使って、Google Alertsから送られてくるメールを1日前の日付以降でフィルタリングしています。このようにして必要なメールを自動的に取得します。


3. 件名からキーワードを抽出する

次に、メールの件名を使って通知のキーワードを抽出します。Google Alertsの通知メールは、「Google アラート - キーワード」という形式の件名を持っているため、この部分を処理してキーワードを取得します。

var message = threads[i].getMessages()[0]; // スレッドの中から最初のメッセージを取得
var subject = message.getSubject(); // 件名を取得
var keyword = subject.replace(/^Google アラート - /, "").replace(/^Google Alert - /, "").trim(); // 「Google アラート - 」を除去してキーワードを抽出
Logger.log("Extracted keyword: " + keyword); // 抽出したキーワードをログに出力

このコードでは、`replace`メソッドを使って「Google アラート - 」という固定部分を削除し、残りの部分をキーワードとして抽出しています。


4. メール本文からURLを抽出する

メール本文に含まれているリンク(URL)を正規表現を使って抽出します。Google Alertsの通知メールには、リンクが埋め込まれており、それをスプレッドシートに保存する必要があります。

var body = message.getBody(); // メール本文を取得
var regex = /https:\/\/(?:[^"]+ffu=)(https:\/\/[^&]+)/g; // 正規表現でリンクを抽出
var match;
while (match = regex.exec(body)) {
  var url = match[1]; // URLを取得
  Logger.log("Extracted URL: " + url); // 抽出したURLをログに出力
}

ここでは、正規表現を使ってリンクを抽出しています。メール本文に複数のリンクが含まれることがあるので、すべてのリンクをループ処理で取得します。


5. スプレッドシートへのデータ追加

取得したキーワードやリンクをスプレッドシートに追加するには、まずそのキーワードごとにシートを作成します。新しいシートが存在しない場合は作成し、データを追記します。

var keywordSheet = sheet.getSheetByName(keyword); // キーワード名のシートを取得
if (!keywordSheet) {
  keywordSheet = sheet.insertSheet(keyword); // シートが存在しない場合は新しいシートを作成
  keywordSheet.appendRow(["タイトル", "URL", "追加日"]); // タイトル、URL、追加日の列を設定
}

スプレッドシートにデータを追記する際、既に存在するURLを重複しないように確認するロジックを追加することも重要です。


6. 自動実行と管理

定期的にスクリプトを実行するために、Apps Scriptのトリガー機能を使います。これにより、毎日自動で新しいGoogle Alertsの通知が処理されます。

トリガーの設定方法:

  1. スクリプトエディタで時計アイコン(トリガー)をクリック。

  2. 新しいトリガーを追加し、例えば「毎日」実行するように設定します。

また、処理済みのメールは「Processed」というラベルを付け、アーカイブすることで、未処理のメールとの区別が可能です。

threads[i].moveToArchive(); // メールをアーカイブに移動
var label = GmailApp.getUserLabelByName("Processed") || GmailApp.createLabel("Processed"); // "Processed" ラベルを作成または取得
threads[i].addLabel(label); // 処理済みラベルを付与

まとめ

今回の解説では、Google Apps Scriptを使ってGoogle Alertsの通知メールを自動で整理する方法を学びました。このスクリプトにより、日々の情報収集が劇的に効率化され、手作業による管理が不要になります。

本記事で紹介したスクリプトでは、通知メールから記事のタイトル、URL、追加日を自動で抽出し、スプレッドシートに記録する機能を実装しました。ただし、このコードは基本的なものなので、一部のケースでは改善の余地があります。例えば、文字化けが発生する場合や、ページのタイトルが正しく取得できない場合があるため、データ処理やエラーハンドリングを追加することで、さらに使い勝手が向上します。

このスクリプトをベースに、自分の情報収集ワークフローに合わせたカスタマイズを行えば、さらに高度な自動化が可能です。また、Google Apps Scriptを使えば、他のGoogleサービスと連携して、さらなる効率化や業務改善に役立てることができます。まずはこの基本スクリプトを試してみて、自分のニーズに合わせて改良してみましょう。


コード全体

記事を購入していただくとすべてのコードが見れるようになります。

function appendGoogleAlertToSheet() {
  var debug = true; // デバッグモード
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var today = new Date(); // 現在の日付を取得
  var yesterday = new Date(today.getTime() - (24 * 60 * 60 * 1000)); // 1日前の日付を取得
  var yesterdayStr = Utilities.formatDate(yesterday, Session.getScriptTimeZone(), 'yyyy/MM/dd'); // 1日前の日付を文字列で取得

  var query = 'from:googlealerts-noreply@google.com after:' + yesterdayStr; // 1日前の日付以降のGoogle Alertsメールを検索
  var threads = GmailApp.search(query); // 指定された範囲のスレッドをすべて取得

  if (debug) Logger.log("Found " + threads.length + " threads."); // スレッド数をログ出力

  if (threads.length === 0) {
    if (debug) Logger.log("Google Alertsからのスレッドが見つかりませんでした。");
    return; // スレッドがない場合は終了
  }

・・・

ここから先は

6,027字

セール中
¥1,000
¥ 500

9月16日 22:00 〜 9月30日 22:00

この記事が気に入ったらサポートをしてみませんか?