Obsidian x Gemini API x Raycast で論文サーベイを効率化してみた
はじめに
これまで私は、論文の管理に Notion + Paperpile を併用していました。
読みたい論文を見つけたら、ざっくり以下の流れで読んでいます。
- Paperpileで論文をストック
- ChatGPTで論文の全体像をつかむ
- 気になる点を本文で読む
- 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]を貼るようにしています。
これにより、分野ごとのトピックを視覚的にマッピングできるようになります。
導入方法
- GitHub からコードを clone
-
README.mdを元に環境構築 -
config.envファイルに Gemini APIキーを記載 (Gemini APIキーの取得方法は、公式ドキュメントを参照) - 上記のpythonファイルを呼び出すshスクリプトを
~/Raycast/Scripts/に作成 - Raycast の Script Directory に追加
- Raycast からコマンドを呼び出すと、ノートが自動生成される
Raycastでの独自スクリプトの実行は、こちらの記事: Raycastを一段進化させるScript commandsを参考にさせていただきました。
まとめと今後の展望
Obsidian x Gemini API x Raycast の組み合わせによって、論文サーベイにおける多読をかなり効率化できました。特に、Raycast を使うことで「読みたい論文を見つけたら即メモ化し、全体像をつかむ」という流れがスムーズに実現できる点がお気に入りです。
テンプレートやスクリプトも柔軟にカスタマイズできるので、自分の研究スタイルに合わせて発展させていけるのも魅力です。
次は、Obsidean 上でのノート管理を効率化するために、Notion の DB Gallery View のようなビジュアル整理を Obsidian でも再現する方法を模索していきたいと思っています。また、arXiv以外のページにも対応しつつ、プロンプトを工夫することで自分の研究テーマ・アプローチとの差分なども最初に整理するようにしていきたいです。
Discussion