0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

夢研究の定期的自動収集&メール配信&リスト化 on GAS

Posted at

夢に関する論文の収集・通知・リスト化システム(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回
  • 機能:
    • 検索結果の先頭(最新付近)をチェック
    • 未取得の論文のみスプレッドシートに追加(ID照合して重複チェック)
    • 新規があればメール通知
      スクリーンショット 2026-02-01 113728.png
    • 最初のスクリプトでは、2度手動実行をしたときの新規取得件数が0だったので、上から10件しかとっていなかったことに気づく。
    • 保坂和志が「群像」で連載している魅力的なタイトルと、2種類のナッツが拾い上げられたのは愉快。
    • 検索精度の低さとして、名前に夢が入るものまで含まれていて、夢野久作まで混ざっている。母親の心がわかっておそろしいのか。

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 により重複を完全排除
  • 既存データがあっても安全に再実行可能

検索設計(改善前 → 改善後)

改善前の問題

  • 検索窓に夢 OR dream OR ...
    をそのまま渡していた
  • その結果:
    • 著者名に「夢」が含まれるだけの論文が混入
    • 映画・書籍ガイド・一般記事が大量に混ざる
    • 読みたい論文がほぼ出てこない
      スクリーンショット 2026-02-01 115400.png

改善の方針

1. 検索フィールドを「タイトル」に限定

  • 検索フィールドとしてtitle= を優先
  • 「タイトルに夢が含まれる」ものだけを対象にする
  • 著者名ヒットをほぼ排除

2. OR検索をやめ、複数クエリを分割実行

  • 例:
    • title=夢
    • title=悪夢
    • title=dream
    • title=lucid dream
  • 各クエリで取得 → 重複排除 → マージ
  • 検索エンジン側のOR解釈に依存しない

3. 後段フィルタで学術度を上げる

  • アブストが空のものを除外または低優先
  • タイトルに以下の語を含むものを除外:
    • ガイド / 連載 / 対談 / 旅 / ニュース / 特集 など
  • 除外語は変数にまとめ、 Script Properties で調整可能にする

現在の到達点

  • 比喩として用いられることも多い「夢」という語を扱いながらも、
    学術論文にかなり寄った結果が得られるようになった
    スクリーンショット 2026-02-01 121019.png

  • 既存研究を日々掘り進めながら、それらが毎日少しずつメールで届く

  • 蓄積用スプレッドシートがあるので、研究用途としても使えるデータベース


今後の拡張余地(メモ)

  • ソース追加(arXiv / PubMed)
  • 分野タグ推定(抄録語彙ベース)
  • 「読む価値スコア」の導入(抄録長・語彙密度など)
  • 夢研究専用のサブコーパス化

Githubリポジトリ

このスクリプトでは、個人情報・環境依存変数をすべて Script Properties にまとめています。 コード本体には個人情報を一切含まないため、オープンソースとして公開しています。
検索設定を変えて自分の関心分野をスクレイピング+メール配信+スプレッドシートでリスト化したい方などはどうぞ。

設定方法

GitHubリポジトリのREADME内では、GASに不慣れな方向けにより丁寧な初回セットアップ手順を記しています。

  1. 新規のスプレッドシートを作成し、拡張機能からGoogle Apps Script エディタを開く
  2. 左側メニュー「プロジェクトの設定」
  3. 「スクリプト プロパティ」セクションで以下を追加

主な設定値(必須)

プロパティ名 説明
SPREADSHEET_ID 論文リストを保存する Google スプレッドシートのID
NOTIFY_EMAIL 通知メールの送信先メールアドレス
CINII_APP_ID CiNii OpenSearch 用の AppID

※ AppID は CiNii の開発者登録ページから取得してください。
スクリーンショット 2026-02-01 091843.png


検索・精度関連設定

プロパティ名 デフォルト値 説明
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 などの追加が推奨されます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?