夢に関する論文の収集・通知・リスト化システム(GAS)設計
目的
- 「夢(dream)」に関する研究論文・学術的文献を継続的に収集したい
- 新着論文は定期的に通知しつつ、既存研究も時間をかけて深掘りしたい
- ニュース的ノイズ(一般記事・著者名ヒット等)を極力排除し、学問的価値の高いものに寄せる
- 調査した論文などをリスト化したい
実行環境
- Google Apps Script
- Google スプレッドシート
- Gmail
- GASでは、ひとつのスクリプトからこの3機能を操作できるのですごく便利。
- また、GASならトリガーを設定しやすいので、定期的に自動実行できる。
- データ取得元:CiNii Articles OpenSearch(Atom)
- 候補は、arXiv、PubMed、PsycINFO、CiNii、J-STAGE、Google Scholar、出版社サイト、大学機関リポジトリ等たくさんあるが、CiNiiはAPIがすぐに取得できたし、ひとまずどこか一つのサイトをスクレイピングできればよい。
基本方針(2軸に分離)
学術情報はニュースのような更新頻度ではないため、
「新着検知」と「既存研究の深掘り」に関数を分離する。
- GASの最大処理実行時間は6分なので、一度に大量のアクセスをしないように注意。毎日10件くらい論文が届けばよい。
1. 新着検知
- トリガーによる実行頻度:週1回
- 機能:
2. 深掘り
- トリガーによる実行頻度:毎日
- 機能:
- 検索結果を
start(offset)で順に掘り進める - 1日最大10件を目標に既存研究を蓄積
- 検索結果を
ファイル構成
- Script Properties による設定駆動
- 後から検索設定を変えやすい。
トリガー設計
| 種類 | 関数 | 頻度 |
|---|---|---|
| 深掘り | runBackfillDaily | 毎日 |
| 新着 | runNewArrivalsWeekly | 週1(例:月曜) |
- GAS UI から個別にトリガーを設定する必要はない
- トリガーは「コードで再現可能」な状態
スプレッドシート仕様
列構成:
| 列名 | 内容 |
|---|---|
| timestamp | 取得日時(ISO) |
| source | データソース(CiNii) |
| title | 論文タイトル |
| link | 詳細ページURL |
| abstract | 抄録(200字以内) |
| published | 公開日(取得できれば) |
| id_key | 重複判定用キー(基本は link) |
-
id_keyにより重複を完全排除 - 既存データがあっても安全に再実行可能
検索設計(改善前 → 改善後)
改善前の問題
改善の方針
1. 検索フィールドを「タイトル」に限定
- 検索フィールドとして
title=を優先 - 「タイトルに夢が含まれる」ものだけを対象にする
- 著者名ヒットをほぼ排除
2. OR検索をやめ、複数クエリを分割実行
- 例:
- title=夢
- title=悪夢
- title=dream
- title=lucid dream
- 各クエリで取得 → 重複排除 → マージ
- 検索エンジン側のOR解釈に依存しない
3. 後段フィルタで学術度を上げる
- アブストが空のものを除外または低優先
- タイトルに以下の語を含むものを除外:
- ガイド / 連載 / 対談 / 旅 / ニュース / 特集 など
- 除外語は変数にまとめ、 Script Properties で調整可能にする
現在の到達点
-
既存研究を日々掘り進めながら、それらが毎日少しずつメールで届く
-
蓄積用スプレッドシートがあるので、研究用途としても使えるデータベース
今後の拡張余地(メモ)
- ソース追加(arXiv / PubMed)
- 分野タグ推定(抄録語彙ベース)
- 「読む価値スコア」の導入(抄録長・語彙密度など)
- 夢研究専用のサブコーパス化
Githubリポジトリ
このスクリプトでは、個人情報・環境依存変数をすべて Script Properties にまとめています。 コード本体には個人情報を一切含まないため、オープンソースとして公開しています。
検索設定を変えて自分の関心分野をスクレイピング+メール配信+スプレッドシートでリスト化したい方などはどうぞ。
設定方法
GitHubリポジトリのREADME内では、GASに不慣れな方向けにより丁寧な初回セットアップ手順を記しています。
- 新規のスプレッドシートを作成し、拡張機能からGoogle Apps Script エディタを開く
- 左側メニュー「プロジェクトの設定」
- 「スクリプト プロパティ」セクションで以下を追加
主な設定値(必須)
| プロパティ名 | 説明 |
|---|---|
SPREADSHEET_ID |
論文リストを保存する Google スプレッドシートのID |
NOTIFY_EMAIL |
通知メールの送信先メールアドレス |
CINII_APP_ID |
CiNii OpenSearch 用の AppID |
※ AppID は CiNii の開発者登録ページから取得してください。

検索・精度関連設定
| プロパティ名 | デフォルト値 | 説明 |
|---|---|---|
SEARCH_FIELD_MODE |
title |
検索対象フィールド。title 推奨(著者名ヒットを防ぐ) |
KEYWORDS_LIST |
夢,悪夢,dream,dreaming,lucid dream,nightmare |
関心のある任意の検索キーワード(ただし、カンマ区切り) |
REQUIRE_ABSTRACT |
true |
アブストラクトが無いものを除外するかどうか(or false) |
EXCLUDE_TITLE_KEYWORDS |
映画,ガイド,連載,小説,ニュース,特集 |
タイトルに含まれるときに除外したい語を設定 |
挙動制御(実行・負荷調整)
| プロパティ名 | デフォルト値 | 説明 |
|---|---|---|
MAX_ITEMS |
10 |
1回の実行で取得する最大件数 |
ABSTRACT_MAX_CHARS |
200 |
抄録の最大文字数(長いとメールが見づらくなるので) |
BACKFILL_START |
0 |
深掘り用の開始オフセット(通常は自動更新) |
MAX_PAGES_PER_RUN |
3 |
深掘り時に試す(CiNiiの)最大ページ数 |
SEND_BACKFILL_EMAIL |
false |
深掘り時にもメール通知するか |
言語について(LANG=ja)
-
lang=jaは 検索結果の表示言語指定であり、
「日本語論文だけに限定する」フィルタではありません - ただし CiNii 自体が日本中心のため、
海外(特に神経科学・脳科学)を本格的に扱うには
将来的に arXiv / PubMed などの追加が推奨されます


