🧸

Obsidian x Gemini API x Raycast で論文サーベイを効率化してみた

に公開

はじめに

これまで私は、論文の管理に Notion + Paperpile を併用していました。
読みたい論文を見つけたら、ざっくり以下の流れで読んでいます。

  1. Paperpileで論文をストック
  2. ChatGPTで論文の全体像をつかむ
  3. 気になる点を本文で読む
  4. Notionにメモを書く

この作業のなかで、ChatGPTに論文情報を貼り付ける作業が少し手間に感じていました。

また、最近話題の Obsidian を試してみたいというモチベーションもあり、Notion の代わりに Obsidian を導入してみました。

また、Obsidian + Gemini API で従来の作業を効率化したことに加えて、Raycastを活用してよりスムーズにメモ作成まで行えるようになりました。

やりたいこと

論文URLを1つ入力すると、以下の一連の処理を、Raycast からワンクリックで実行できるようにすることを目指しました。

  • Python スクリプトが起動し、論文メタデータを取得
  • Gemini APIを用いて 論文の要約を指定した観点に従い作成
  • Obsidian 向けのテンプレートを自動生成・保存

前提

論文サーベイには「多読」と「精読」があり[1]、今回はそのうちの「多読」向けの方法です。

生成AIによるハルシネーションがあることを前提としつつ、全体像をつかむことを目的にしています。
要約はあくまで全体像をつかむことが目的であり、その後に本文を精読する流れを前提としています。

実装詳細

使用ツール

  • Obsidian:ローカルでの論文ノート管理用
  • Gemini API:論文の要約、キーワード抽出
  • Raycast:スクリプトランチャー

全体構成

主要処理のスクリプトはPythonで記述しています。
内容は、GitHubに公開しています:

🔗 https://github.com/RilaKorila/paper_summary

Raycast では、以下の構成で shスクリプトファイルを ~/Raycast/Scripts/ に配置し、上記のPython スクリプトを呼び出しています。

#!/bin/bash

# @raycast.schemaVersion 1
# @raycast.title Create Obsidian Paper Note
# @raycast.mode compact
# @raycast.argument1 { "type": "text", "placeholder": "論文URL" }

VENV_PYTHON="/path/to/paper_summary/paper_summary_env/bin/python3" # venv環境へのパス
SCRIPT_PATH="/path/to/paper_summary/main.py"

(免責: Cursor でざっくり書いたコードなので読みづらい箇所が多々あります)

詳細①: 論文要約のプロンプト

Gemini API を使って、以下のようなプロンプトで論文を要約しています。

以下の論文情報を基に、論文の要約を日本語で作成してください。

タイトル: {タイトル}
著者: {著者名}
アブストラクト: {アブストラクト}
URL: {URL}

以下の項目について、簡潔に回答してください:

1. どんなもの?(研究の目的と概要)
2. 先行研究と比べてどこがすごい?(新規性と貢献)
3. 技術や手法のキモはどこ?(主要な技術・手法)
4. どうやって有効だと検証した?(実験・評価方法)
5. 議論はある?(制限事項や今後の課題)
6. 次に読むべき論文は?(関連研究の提案)

各項目は2〜3文程度で簡潔にまとめてください。
各章の冒頭には ## をつけ、間には空行を入れてください。

この要約フォーマットは、落合先生の研究要約テンプレート[2]をベースにしています。

詳細②: 自動生成されるノートの構成

生成される Obsidian ノートは以下のようになっており、研究メモとして再利用しやすい形式です。

---
title: "論文タイトル"
authors: [著者1, 著者2]
year: 2025
status: "未読"
pdf: "論文URL"
---

## どんなもの?

## 先行研究と比べてどこがすごい?

## 技術や手法のキモはどこ?

## どうやって有効だと検証した?

## 議論はある?

## 次に読むべき論文は?

## キーワード

## 著者

このテンプレートは、Obsidian の Graph View 機能にも対応するように、キーワード、著者の欄では、各単語に内部リンク[3]を貼るようにしています。
これにより、分野ごとのトピックを視覚的にマッピングできるようになります。

導入方法

  1. GitHub からコードを clone
  2. README.md を元に環境構築
  3. config.env ファイルに Gemini APIキーを記載 (Gemini APIキーの取得方法は、公式ドキュメントを参照)
  4. 上記のpythonファイルを呼び出すshスクリプトを~/Raycast/Scripts/ に作成
  5. Raycast の Script Directory に追加
  6. Raycast からコマンドを呼び出すと、ノートが自動生成される

Raycastでの独自スクリプトの実行は、こちらの記事: Raycastを一段進化させるScript commandsを参考にさせていただきました。

まとめと今後の展望

Obsidian x Gemini API x Raycast の組み合わせによって、論文サーベイにおける多読をかなり効率化できました。特に、Raycast を使うことで「読みたい論文を見つけたら即メモ化し、全体像をつかむ」という流れがスムーズに実現できる点がお気に入りです。

テンプレートやスクリプトも柔軟にカスタマイズできるので、自分の研究スタイルに合わせて発展させていけるのも魅力です。

次は、Obsidean 上でのノート管理を効率化するために、Notion の DB Gallery View のようなビジュアル整理を Obsidian でも再現する方法を模索していきたいと思っています。また、arXiv以外のページにも対応しつつ、プロンプトを工夫することで自分の研究テーマ・アプローチとの差分なども最初に整理するようにしていきたいです。

脚注
  1. 研究分野をサーベイする(p.7) ↩︎

  2. 先端技術とメディア表現1 #FTMA15(p.65) ↩︎

  3. Obsidean 内部リンク ↩︎

Discussion