GmailMessage.unstarでGmailのスターを解除し、データ分析を効率化
Gmailのスター機能は、重要なメールを簡単に見つけられる便利な機能ですが、大量のメールを分析する際には、スターの有無がノイズになることがあります。この記事では、GAS(Google Apps Script)のGmailMessage.unstar関数を使用してGmailのスターを解除し、データ分析を効率化する方法を解説します。
GmailMessage.unstarとは
GmailMessage.unstarは、GmailMessageオブジェクトのメソッドで、メッセージのスターを解除します。この関数を使用することで、特定の条件に合致するメールからスターを簡単に取り除くことができます。
データ分析における利用シチュエーション
データ分析において、Gmailの情報を利用する場合、スター付きのメールが特定のパターンを持つことがあります。例えば、特定のアラートメールにスターが付与されている場合などです。これらのスターを解除することで、より正確なデータ分析が可能になります。
具体的な業務課題
- 特定のアラートメール(例:システム障害、売上速報)にスターが付与されている。
- これらのスター付きメールを除外して、その他のメールの傾向を分析したい。
- スターの有無が分析結果に影響を与えないようにしたい。
実装方法
基本的な実装
まずは、GmailMessage.unstar関数の基本的な使い方を見てみましょう。
function unstarSpecificMessage(messageId) {
  // messageIdで指定されたGmailメッセージを取得
  var message = GmailApp.getMessageById(messageId);
  
  // スターを解除
  message.unstar();
  
  Logger.log('スターを解除しました: ' + message.getSubject());
}
特定条件のメールのスターを解除する
特定条件のメールのスターを解除する例です。例えば、件名に「[アラート]」が含まれるメールのスターを解除します。
function unstarAlertMessages() {
  // 検索条件
  var searchQuery = 'subject:[アラート] is:starred';
  
  // スレッドを取得
  var threads = GmailApp.search(searchQuery);
  
  // 各スレッドのメッセージに対して処理を行う
  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];
      message.unstar();
      Logger.log('スターを解除しました: ' + message.getSubject());
    }
  }
}
日付範囲を指定してスターを解除する
特定の日付範囲のメールのスターを解除する例です。
function unstarMessagesInDateRange(startDate, endDate) {
  // 日付を文字列に変換
  var startDateStr = startDate.getFullYear() + '/' + (startDate.getMonth() + 1) + '/' + startDate.getDate();
  var endDateStr = endDate.getFullYear() + '/' + (endDate.getMonth() + 1) + '/' + endDate.getDate();
  
  // 検索条件
  var searchQuery = 'after:' + startDateStr + ' before:' + endDateStr + ' is:starred';
  
  // スレッドを取得
  var threads = GmailApp.search(searchQuery);
  
  // 各スレッドのメッセージに対して処理を行う
  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];
      message.unstar();
      Logger.log('スターを解除しました: ' + message.getSubject());
    }
  }
}
スプレッドシートと連携してスターを解除する
スプレッドシートにメールアドレスをリスト化し、そのメールアドレスからのメールのスターを解除する例です。
function unstarMessagesFromSpreadsheet() {
  // スプレッドシートを開く
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  // メールアドレスのリストを取得(A列)
  var emailAddresses = sheet.getRange('A1:A').getValues().filter(String);
  
  // 各メールアドレスに対して処理を行う
  for (var i = 0; i < emailAddresses.length; i++) {
    var emailAddress = emailAddresses[i][0];
    
    // 検索条件
    var searchQuery = 'from:' + emailAddress + ' is:starred';
    
    // スレッドを取得
    var threads = GmailApp.search(searchQuery);
    
    // 各スレッドのメッセージに対して処理を行う
    for (var j = 0; j < threads.length; j++) {
      var messages = threads[j].getMessages();
      for (var k = 0; k < messages.length; k++) {
        var message = messages[k];
        message.unstar();
        Logger.log('スターを解除しました: ' + message.getSubject());
      }
    }
  }
}
よくある問題とトラブルシューティング
- 権限エラー: Gmail APIを使用するには、適切な権限が必要です。スクリプトエディタで権限を確認し、許可してください。
- 検索条件が正しくない: 検索条件が誤っていると、期待どおりのメールが取得できません。Gmailの検索演算子を確認し、正確な検索条件を設定してください。
- 大量のメール処理によるタイムアウト: 大量のメールを処理する場合、スクリプトがタイムアウトすることがあります。Utilities.sleep(milliseconds)を使用して処理を一時停止するか、ページネーションを実装して処理を分割してください。
カスタマイズ方法と応用例
- 定期的なスター解除: トリガーを設定して、定期的にスターを解除することができます。
- 特定のラベルが付いたメールのスター解除: 特定のラベルが付いたメールに対して、スターを解除することができます。
- スター解除のログ記録: スターを解除したメールの情報をスプレッドシートに記録することができます。
まとめ
GmailMessage.unstar関数を使用することで、Gmailのスターを効率的に解除し、データ分析の精度を向上させることができます。この記事で紹介したコード例を参考に、ぜひご自身の業務に合わせてカスタマイズしてみてください。
PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう