Gmail上でラベル分けされたScholarアラートから文献リストを生成するGoogle Apps Script(試作)
前提1:Google Scholarのアラート通知作成
前提2:GmailでGoogle ScholarのAlertを作者別に自動ラベル振り分けする
関連:論文調査における検索とRAG,翻訳の使い分け
概要
スプレッドシートに、Scholarアラートメールから抽出された論文情報を整理します
1行に1論文の英語タイトル/日本語翻訳/著者/発行年/OA判定/URL などが並びます
同じ論文が重複登録されないよう、DOIやarXiv IDで重複判定されます
alearts | SpreadSheet共有リンク(閲覧)
https://scrapbox.io/files/68f0be47298d397808ae0241.png
色の意味(手動)
黄色→関連
青色→興味
薄色→既読
できること
Scholarアラートを1クリックで構造化データ化
論文タイトルとURLの他、翻訳/著者/OA判定も自動取得
重複しないリストを維持
外部アプリ不要、Googleサービスに完結
限界
トリガーによる自動実行は未検証
htmlメール本文中に含まれない概要の後半部は抽出不可
背景
問題意識
Google Scholar のアラートは便利ですが、メールのままでは管理が難しく
各論文のリンクを一つずつ開かないと分からない
重複があり、どの文献がまだ読んでいないものかどうか分かりにくい
翻訳やOA(無料公開論文)判定を毎回調べるのが面倒
という問題があります
目的
Gmailのラベル管理+Apps Script+スプレッドシートを使って、アラートメールを自動的に解析し、研究リスト化・翻訳・OA判定までを行う仕組みを作ります
特別なサーバや外部アプリは不要で、Googleアカウントのみで動作します
手順
1. スプレッドシート作成
2. Gmailのラベル確認
3. AppsScriptプロジェクトの作成
4. スクリプトを貼り付け
5. プロパティ(設定)を登録
6. 動作確認
1. スプレッドシート作成
Google ドライブで「+新規」→「Google スプレッドシート」を作成します
上部のタイトルを「Scholar Alerts Catalog」などに変更します
シートのタブ名を alerts に変更します(下のタブをダブルクリック)
1行目(A1〜S1)に以下の列名を設定します。
csvファイル化してimportする方法が簡単です。
code:alerts.csv
captured_at,label,email_msg_id,title_en,title_ja,authors,year,venue,doi,arxiv_id,url_norm,oa,is_oa,oa_status,oa_url,snippet_en,snippet_ja,source,dup_key
ブラウザのURLから Spreadsheet ID を控えます
https://docs.google.com/spreadsheets/d/【ここがID】/edit...
2. Gmailのラベル確認
Scholarアラートが分類されていなければ、新しく作成します
Cf. GmailでGoogle ScholarのAlertを作者別に自動ラベル振り分けする
Gmail 左側の「ラベル」を確認します
例:「Tomioka Rio」
例:「Scholarの推薦著者」
ラベル名はステップ4で使います
3. AppsScriptプロジェクトの作成
Google ドライブ →「+新規」→「その他」→「Google Apps Script」をクリック
プロジェクト名を「Scholar Alert」など分かりやすいものに変更
4. スクリプトを貼り付け
自動で開く Code.gs に、下記のGistのコードをコピー&ペースト
GitHub Gist:https://gist.github.com/tomiokario/640828c0389c6f72e3978412f37a807a
5. プロパティを登録
画面右上の「⚙️プロジェクト設定」→下にある「スクリプトプロパティ」→「+ 新しいプロパティを追加」
以下の項目を追加
table:table
キー 値の内容
SPREADSHEET_ID スプレッドシートのID(先ほど控えた英数字)
SHEET_NAME シート名(ここまで手順通りなら「alerts」)
UNPAYWALL_EMAIL unpaywall用のメールアドレス
LABELS_JSON] 文字列配列の形式でラベル名を指定(例:["Tomioka Rio","Scholarの推薦著者"])
DAYS_LOOKBACK 例:過去30日分を対象とする場合は,「30」
プロパティの変更を保存
6. 実行 & 動作確認
Apps Script の上部メニューで「関数を選択」→ runHarvest を選びます。
https://scrapbox.io/files/68f0bd6770c8601612ae3cd7.png
▶️ 実行ボタンをクリック
初回のみ、Google アカウント認証とアクセス許可の確認ダイアログが出ます
「スプレッドシートへのアクセス」「Gmailの読み取り」を許可してください
実行ログに以下のような出力があれば成功
query="label:"Tomioka Rio" after:2025/09/16" threads=5
msg=199cc4fbc766198d entries_found=5
appended rows: 5
スプレッドシートを開くと、データが行ごとに追加されています
https://scrapbox.io/files/68f0be47298d397808ae0241.png
その他
2回目以降の実行
同様にrunHarvest() を実行すれば、新しい文献だけ追記されます
定期的な自動実行
1日1回など自動で動かしたい場合は、Apps Script の左側メニュー「トリガー」→「+トリガーを追加」から以下のように設定できるはずです(未検証)
実行する関数:runHarvest
イベントのソース:時間主導型
時間ベースのトリガー:1日おき など
トラブルシューティング
table:table
ログにthreads=0 該当ラベルのメールが過去30日以内に無い。DAYS_LOOKBACK を増やす。
entries_found=0 が続く HTML構造が変わった可能性あり。dumpFirstHtml() を実行し、内容を確認。
スプレッドシートが空のまま SPREADSHEET_ID が間違っていないか確認。
権限エラー スクリプト実行時に再認証を行う。