Google Apps Scriptで始める情報収集の自動化入門
情報収集に時間をかけすぎていませんか?特にGoogle Alertsのように、毎日大量に通知が届く場合、それを手動で整理するのは非常に労力がかかります。そこで、Google Apps Script(以下、GAS)を使った自動化によって、Google Alertsの通知メールを自動的にスプレッドシートに整理し、情報収集の効率を大幅に改善する方法を紹介します。
![](https://assets.st-note.com/img/1726489668-62JeONUiTqkdGQmpsWlMPw7X.png?width=1200)
このガイドでは、GASを初めて触る人でもわかりやすいように、ステップバイステップで説明していきます。
1. GASの準備
Google Apps Scriptとは?
GASはGoogleが提供するスクリプト言語で、Googleのサービス(Gmail、スプレッドシート、ドライブなど)を連携・自動化するのに使います。ブラウザ上でコードを書くことができ、特別な開発環境をインストールする必要はありません。
スクリプトエディタを開く方法
まず、Google スプレッドシートを開きます。次に、拡張機能メニューからApps Scriptを選択し、スクリプトエディタを開きましょう。
![](https://assets.st-note.com/img/1726489979-4mT1qMpH3J2tSCEwW5Xi0nh9.png)
新しいプロジェクトを作成したら、次に進みます。
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の通知が処理されます。
トリガーの設定方法:
スクリプトエディタで時計アイコン(トリガー)をクリック。
新しいトリガーを追加し、例えば「毎日」実行するように設定します。
また、処理済みのメールは「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; // スレッドがない場合は終了
}
・・・
ここから先は
¥ 1,000
この記事が参加している募集
この記事が気に入ったらチップで応援してみませんか?