見出し画像

#158 Gmailの通知から「スキ」された回数を自動集計する仕組みを作ろう!🤖📊

せっかくいただいた「スキ」、一つひとつが本当に嬉しいものですよね。✨

でも、フォロワーさんが増えてくると嬉しい悲鳴が……。😱

「通知メールが止まらない!📩」
「誰がいつも読んでくれているのか追いきれない!💦」と、

ファンの方との交流が“作業”になってしまっていませんか?🤔

実は私も、大切な「常連さん」を見失いそうになり、もどかしい思いをしてきた一人です。😢

そこで今回は、溜まっていく通知を整理し、「直近60日間で誰が何回スキをくれたか」を一目で把握する仕組みを作りました。📊

これを活用すれば、あなたの発信を支えてくれるファンをしっかり可視化できます。👀💖

その具体的な手法を、皆さんに共有しますね!📢


▼手順詳細を録画しました!



ステップ1:スプレッドシートの準備

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

  2. シート名を「集計結果」に変更します(画面左下のタブをダブルクリックして書き換えます)。

  3. 1行目のA1セルに「名前」、B1セルに「スキ数」と入力しておくと見やすくなります(プログラムが自動生成もしてくれますが、先に入れておくと安心です)。


ステップ2:プログラム(GAS)の貼り付け

  1. メニューの「拡張機能」>「Apps Script」をクリックします。

  2. エディタが開いたら、最初から入力されている function myFunction() {...} をすべて消去し、空の状態にします。

  3. 以下のコードをコピーして、エディタに貼り付けてください。

  4. 上部の「保存(フロッピーディスクのアイコン)」をクリックし、プロジェクト名を適当に「スキ集計」などと付けて保存します。

/**
 * 【設定】スプレッドシートを開いたときにメニューを自動追加
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('GAS実行メニュー')
      .addItem('スキ通知を集計する', 'aggregateSuki')
      .addToUi();
}

/**
 * 【メイン】Gmailから「スキ」通知を集計し、スプレッドシートに書き出す
 */
function aggregateSuki() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetName = '集計結果';
  let sheet = ss.getSheetByName(sheetName);
  
  // 1. シートの準備(なければ作成)
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    sheet.getRange(1, 1, 1, 2).setValues([["名前", "スキ数"]]);
    sheet.getRange(1, 1, 1, 2).setBackground("#f3f3f3").setFontWeight("bold");
  }

  // 2. 前回の集計結果をクリア(2行目以降)
  const lastRow = sheet.getLastRow();
  if (lastRow > 1) {
    sheet.getRange(2, 1, lastRow - 1, 2).clear();
  }

  // 3. 検索条件の設定(今日から60日前まで)
  const now = new Date();
  const sixtyDaysAgo = new Date(now.getTime() - (60 * 24 * 60 * 60 * 1000));
  const afterDateStr = Utilities.formatDate(sixtyDaysAgo, "JST", "yyyy/MM/dd");
  
  // 修正箇所:「スキされました!」より前を抽出対象にするための検索クエリ
  const query = `label:inbox subject:"スキされました!" after:${afterDateStr}`;
  
  // 4. Gmailからデータを抽出
  const threads = GmailApp.search(query);
  const counts = {};

  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(msg => {
      const date = msg.getDate();
      
      if (date >= sixtyDaysAgo && !msg.isInTrash()) {
        const subject = msg.getSubject();
        
        // 修正箇所:「スキされました!」より前の文字列を変数として取得
        const match = subject.match(/(.*)スキされました!/);
        
        if (match && match[1]) {
          // 余計な空白を取り除き、末尾の「さんに」が残っていればそれも削除して集計
          const name = match[1].trim().replace(/さんに$/, ""); 
          counts[name] = (counts[name] || 0) + 1;
        }
      }
    });
  });

  // 5. データを集計・並べ替え(多い順)
  const resultData = Object.keys(counts).map(name => [name, counts[name]]);
  resultData.sort((a, b) => b[1] - a[1]);

  // 6. スプレッドシートへ書き出し
  if (resultData.length > 0) {
    sheet.getRange(2, 1, resultData.length, 2).setValues(resultData);
    Browser.msgBox("直近60日分の「スキ」を集計しました!");
  } else {
    Browser.msgBox("該当するメールが見つかりませんでした。");
  }
}

ステップ3:初回実行と「承認」

Googleのプログラムを初めて動かすときは、自分のGmailにアクセスする許可を出す必要があります。

  1. スプレッドシートの画面を一度リロード(再読み込み)してください。

  2. メニューバーの右側に「GAS実行メニュー」という項目が出現します。

  3. GAS実行メニュー」>「スキ通知を集計する」をクリックします。

  4. 「承認が必要です」というポップアップが出るので「権限を確認」を押します。

  5. 自分のGoogleアカウントを選択します。

  6. 「このアプリは Google で確認されていません」という警告が出ますが、「詳細」をクリックし、一番下の「スキ集計(安全ではないページ)に移動」をクリックしてください。

    1. ※自分で書いたコードなので安全です。

  7. 「許可」をクリックします。


ステップ4:集計の確認

  • 承認が終わるとプログラムが走り始めます。

  • しばらく待つと「集計が完了しました!」と表示され、スプレッドシートに名前とスキの数が自動で書き込まれます。

  • 今後は、スプレッドシートを開いて「GAS実行メニュー」からいつでも最新の状況に更新できます。


▼公式LINEを開設しました!
限定企画や特典情報をどこよりも早くお届けします。
【登録はこちらから】


#noteの書き方 #noteのつづけ方 #コンテンツマーケティング #GoogleAppsScript #業務効率化 #スプレッドシート #GAS #自動化 #ファンマーケティング #データ分析

いいなと思ったら応援しよう!

まめ@やさしい発信設計の専門家 📝 チップの利用方針について 受け取ったチップは全てnote内で使用しています。 これは、チップをnote内で循環させ、noteのさらなる発展に貢献するためです。 具体的には、受け取ったチップで他のクリエイターにチップをあげたり、有料記事を購入したりしています。