🌟

Obsidian × LLMでweb記事保管庫実現の可能性を探る

に公開

近頃、Obsidianという単語を耳にすることはありませんか?Obsidianを一言でいうと、「機能がたくさんあるメモ帳」です。近年の生成AIの台頭によりこのアプリが注目を集めています。
Obsidianには様々な機能がありすべてを紹介しきれないのですが、今回は、Obsidianについて基本情報をおさらいした後、私が最近試している「読んだweb記事をLLMに要約させたうえでObsidianに保存し、関連ノートのリンクを付与する」web記事保管庫としての可能性について紹介します。

本投稿は2部構成です。

  • Obsidianについて(文章:ほぼChatGPT、写真:人間)
  • web記事保管庫としての可能性(文章・写真:人間)

それではどうぞ。

Obsidianについて

ひと目でわかるまとめ

Obsidian はローカル保存の Markdown ファイルを “知識グラフ” に変えるノートアプリです。2020年のリリース以降、以下3本柱で急速にユーザーを増やし、2025年4月時点で2,400以上の公式コミュニティプラグインが公開されています。

  • リンク⇄バックリンク
  • グラフ表示
  • プラグイン自由度

近年は ChatGPT 等の生成 AI と連携するプラグインが続々登場し、思考整理・ライティング自動化・知識管理のハブとして再評価が進行中です。

Obsidian とは?

歴史とポジション

  • 開発元: Dynalist Inc.(共同創業者: Shida Li、Erica Xu)
  • 初版リリース: 2020-03-30
  • v1.0 到達: 2022-10
  • 思想: “あなたのアイデアはあなたの手元に”
    • クラウド依存を避けローカル第一
    • Plain Text 採用

なぜ今 Hot なのか?

  • 生成 AI の台頭
    Text Generator、GPT Copilot など AI 連携プラグインがライティング補助・要約・Q&A を自動化
  • プラグイン爆発
    週あたり30件以上の新規公開、70件超の更新が継続
  • エンドツーエンド暗号化 & 完全オフライン動作
    企業・研究機関での機密ノート管理需要が増加
  • ノーコード視覚化
    Canvas(無限ホワイトボード)や改良された Graph View がアイデア設計ツールとして注目
  • 他メジャーアプリの複雑化
    Evernote/Notion 等の多機能化に対し「シンプル+所有権」志向が回帰

基本情報

項目 詳細
ライセンス フリーミアム(無料コア + 有料アドオン: Sync, Publish, Commercial)
対応 OS Windows / macOS / Linux / iOS / Android (Electron & Capacitor)
データ形式 .md (UTF-8 プレーンテキスト) + 任意メディアファイル
オフライン動作 完全対応(Sync アドオン時も E2E 暗号化)
価格感 個人 Sync: $8/月〜、Publish: $16/月〜、商用: $50/ユーザー/年

主な機能

1. 双方向リンク & グラフビュー

  • [[Wikiリンク]] と自動バックリンクで知識を相互参照
  • Graph View でノード/エッジを視覚化、フィルタ&グループ色分け対応
    Graph View

2. Canvas(無限ホワイトボード)

  • ノート・PDF・画像・Web をドラッグ配置し関係線で接続
  • ブレストや資料設計に最適
    Canvas

3. プラグインエコシステム

  • 公式 Marketplace に2,400+ 件
  • 主な生成 AI系プラグイン:
    • Text Generator
    • GPT MD
    • QuickAdd-AI
    • Proofreader
  • ChatGPT/Anthropic/ローカルLLM 呼び出しで、要約・翻訳・アウトライン生成を自動化

4. Sync & モバイル

  • E2E 暗号化でデバイス間を安全同期
  • モバイルも同一 UI でバックリンク/Graph 閲覧可能

5. Publish(静的サイト公開)

  • ワンクリックでノートを静的 Web サイト化
  • カスタムドメイン・CSS 対応

6. その他のコア機能

  • Dataview: Markdown 内メタデータを SQL 風クエリで抽出・テーブル化(プラグイン)
  • カスタム CSS & テーマ: Community 由来のテーマ多数
  • コマンドパレット & キーマップ: VS Code 風ショートカットカスタマイズ
  • テンプレート & スニペット: 自動日次ノート、ブログ下書きなどをワンタップ生成

まとめ

Obsidian は「ローカル・プレーンテキスト+リンク思考+AI 拡張」という独自路線を提示します。生成 AI の API 呼び出しだけでなく、自分の知識ベースを AI が参照することで、ライティング・研究・開発メモを一気通貫で強化できる点が、2025年現在“熱い”理由です。


Web記事保管庫としての可能性

スマホやPCでネットサーフィンをしているとき、「今読んでいるネット記事を生成AIに要約させて、Obsidianに保存したいな」と思ったことはありませんか?私はあります。そこで、いくつかの機能を組み合わせて、

  1. 記事をAI要約しObsidianに保存
  2. ついでに関連ノートへのリンクを付与

という仕組みを考えてみました。最後に補足として、スマートフォンとの同期についても書いています。

必要なサービス・プラグインと手順は以下です。

概要

必要なサービス・プラグイン

  • Obsidianアプリ
    • PCと携帯で同期したい場合はアプリもダウンロードする
  • Obsidian Web Clipper
    • ブラウザの拡張機能。開いているwebサイトからノートを新規作成してくれる
  • お好きなLLMのAPIキー
    • OpenAI API、Google Gemini など
  • Templater
    • Obsidianのプラグイン。リンク付与のスクリプトを走らせるため
  • Smart Connections
    • Obsidianのプラグイン。リンク付与時に関連ノートを知るためにembeddinsを用いる

手順

web記事からノートを作成するフェーズ

  1. Obsidian Web Clipperをブラウザに導入し、設定する
  2. webサイト上で拡張機能を起動すると、AI要約されたノートがObsidianに新規追加される

ノートの類似度をもとに関連ノートを付与するフェーズ

  1. 必要なプラグインをアプリに導入し、スクリプトを登録する
  2. Obsidian上でスクリプトを実行すると、類似ノートがノート末尾に付与される

Web記事からノートを作成するフェーズ

1. Obsidian Web Clipperをブラウザに導入し、設定する

1-1. ブラウザに Obsidian Web Clipper をインストールします

1-2. 導入後、設定を行いましょう。大事なのは インタープリターテンプレート です

  • まず、サイドバーからインタープリタを選択し、有効化します。

  • そのままスクロールして、Web記事を要約してくれる生成AIのプロバイダーとモデルを登録します。登録にはAPIキーが必要なので、各々用意してください。 画像ではGoogleGeminiをプロバイダーとして登録し、Gemini 2.5 Flash Previewをモデルに指定しています。

  • 次はテンプレートです。サイドバーから新規テンプレートを選択します。テンプレート名などは適当でよいです。今回は、ノート名、タグ、ノートの内容を生成AIで作るために、「プロンプト変数」と呼ばれる記法を用いて指示します。プロンプト変数は「{""}」でプロンプトを囲む記法です。こうすることで、生成AIが記事の内容とプロンプトをもとにしてよしなに生成してくれます。
       
       
       

参考までに、私の設定jsonを貼っておきます。テンプレートタブ上部の「インポートから」jsonファイルをインポートすることができます。
  

 ```
 {
   "schemaVersion": "0.1.0",
   "name": "新規テンプレート",
   "behavior": "create",
   "noteContentFormat": "{{\"あなたは優秀な要約アシスタントです。…Markdown形式で要約してください。\"}}",
   "properties": [
     {
       "name": "url",
       "value": "{{url}}",
       "type": "text"
     },
     {
       "name": "tags",
       "value": "{{\"記事の内容を考慮して、…タグを生成\"}}",
       "type": "multitext"
     }
   ],
   "noteNameFormat": "{{\"記事内容からタイトルを生成\"}}",
   "path": "Clippings"
 }
 ```

以上で設定は完了です。

2. webサイト上で拡張機能を起動すると、AI要約されたノートがObsidianに新規追加される

2-1. ノートに追加したいサイトで拡張機能をクリックしましょう。

2-2. ポップアップが表示されるので「Obsidianに追加」をクリックします。

2-3. 少し待つとブラウザがObsidianを開くかどうか尋ねるので「開く」をクリックします。

Obsidianが立ち上がりノートが新規作成されます。そのノートのタイトル、タグ、本文はAIによって自動生成されたものです。


ノートの類似度をもとに関連ノートを付与するフェーズ

web記事要約が保存されるだけでもありがたいのですが、Obsidianの機能の一つである双方向リンクを活用したいですね。全ノートを読み込み、類似ノート同士を繋ぐ処理を追加してみましょう。

1. 必要なプラグインをアプリに導入し、スクリプトを登録する

1-1. Obsidian上のCommunity pluginsから、Smart ConnectionsとTemplaterをインストールしておきます。

1-2. templatesフォルダ配下に.mdファイルを新規作成し、以下のスクリプトを貼り付けてください。

ファイル名やタイトルは任意です。templatesフォルダが無い場合はフォルダも新規作成してください。
(Obsidian上では隠しフォルダで見ることはできませんが、Smart Connectionsが.smart-env/multi配下に全ノートのembeddingsを保持しています。それを取得し、それぞれのノートのコサイン類似度を計算した後に、各ノートの末尾に類似度が閾値以上のノートへのリンクを付与するスクリプトです。FOLDER定数は、Web Clipperにより生成されるノートが格納されるフォルダを指定してください。多分Clippingsで合っています。)

<%*
const FOLDER = 'Clippings'
const THRESHOLD = 0.7;
const TOP_K = 3;

const fs = require('fs');
const path = require('path');
const vaultPath = app.vault.adapter.basePath;

const smartEnvPath = path.join(vaultPath, '.smart-env', 'multi');

let embeddings = {};

try {
 const filesInDir = fs.readdirSync(smartEnvPath);

 for (const file of filesInDir) {
   if (file.endsWith('.ajson')) {
     const filePath = path.join(smartEnvPath, file);

     const lines = fs.readFileSync(filePath, 'utf8').split('\n');

     let nonEmptyLine = null;
     for (const line of lines) {
       if (line.trim() !== '') {
         nonEmptyLine = line.trim();
         break;
       }
     }

     if (!nonEmptyLine) continue;

     if (nonEmptyLine.endsWith(',')) {
       nonEmptyLine = nonEmptyLine.slice(0, -1);
     }

     const jsonStr = `{${nonEmptyLine}}`;
     const jsonData = JSON.parse(jsonStr);

     for (const jsonKey in jsonData) {
       if (jsonKey.startsWith('smart_sources:')) {
         const notePath = jsonData[jsonKey].path;
         const sourceData = jsonData[jsonKey];

         if (sourceData && sourceData.embeddings &&
             sourceData.embeddings["text-embedding-3-large"] &&
             sourceData.embeddings["text-embedding-3-large"].vec) {
           embeddings[notePath] = {
             vec: sourceData.embeddings["text-embedding-3-large"].vec
           };
         }
       }
     }
   }
 }
} catch (error) {
 new Notice(`エラー: ${error.message}`);
 console.error('Error reading embeddings:', error);
 return;
}

function makeBlock(top) {
 if (!top || top.length === 0) {
   return '';
 }

 let md = '\n<!-- REF-SECTION-START -->\n## 関連ノート\n';
 for (const { file, score } of top) {
   md += `- [[${path.basename(file, '.md')}]]\n`;
 }
 return md + '<!-- REF-SECTION-END -->\n';
}

function cos(a, b) {
 let d = 0,
     na = 0,
     nb = 0;
 for (let i = 0; i < a.length; i++) {
   d += a[i] * b[i];
   na += a[i] ** 2;
   nb += b[i] ** 2;
 }
 return d / Math.sqrt(na * nb);
};

new Notice(`${FOLDER}フォルダの関連ノート一括更新を開始`);

let updatedCount = 0;
let skippedCount = 0;
for (const file of app.vault.getMarkdownFiles()) {
 const rel = file.path;

 // FOLDERで指定したフォルダ配下のファイルのみを処理
 if (!rel.startsWith(FOLDER + '/')) {
   continue;
 }

 const v0 = embeddings[rel]?.vec;
 if (!v0) {
   skippedCount++;
   continue;
 }

 const sims = Object.entries(embeddings)
   .filter(([p]) => p !== rel)
   .map(([p, { vec }]) => ({ file: p, score: cos(v0, vec) }))
   .filter(o => Math.abs(o.score) >= THRESHOLD)
   .sort((a, b) => Math.abs(b.score) - Math.abs(a.score))
   .slice(0, TOP_K);

 const newBlock = makeBlock(sims);
 let text = await app.vault.read(file);

 text = text.replace(/<!-- REF-SECTION-START -->[\s\S]*?<!-- REF-SECTION-END -->\n?/g, '');

 if (newBlock) {
   await app.vault.modify(file, text + newBlock);
   updatedCount++;
 }
}
new Notice(`${FOLDER}フォルダの関連ノートを一括更新 (${updatedCount}件更新, ${skippedCount}件スキップ)`);
%>

1-3. Templaterの設定を開き、「Template folder location」にtemplatesフォルダを指定します。

以上で設定は完了です。

補足:Smart Connectionsのembeddingsモデル変更方法

Smart Connectionsの規定のembeddingsモデルでも良いのですが、より性能の良いモデルに変更したい場合、設定から変更することができます。
現状は、Smart Connections既定のモデル、ローカルのモデル、OpenAIのモデルの3種類から選べるようです。

2. Obsidian上でスクリプトを実行すると、類似ノートがノート末尾に付与される

2-1. まずはSmart Connectionsにembeddingsを計算してもらいましょう。

Obsidian上のサイドバーからSmart Connectionsを選択し、リフレッシュボタンを押します。しばらくすると計算が終わります。

2-2. 任意のノートが表示されている状態でコマンドパレットを開き(Ctrl+P)、「Templater: Open insert template modal」をクリック。

2-3. 先ほど作成したtemplates配下のスクリプトを選択し実行します。

しばらくするとスクリプト実行が完了します。ノートの末尾を見ると関連ノートが追加されています。ちゃんとQwen関係のノートが関連付けられていますね。

せっかくなので、グラフビューでも見てみましょう。ノート同士の関係性が見れて楽しいですね。

補足:スマートフォンとの同期について

追加で以下を用意しましょう。

  • Obsidianスマートフォンアプリ
  • Obsidian Web Clipper(ブラウザアプリの拡張機能)
  • Remotely Save(Obsidianのプラグイン。PCとスマートフォン両方に導入すること)
  • クラウドストレージサービス(公式もObsidian Syncを提供していますが有料であり、githubなどでも可能ですが設定がめんどくさいので、手軽に無料で試せるdropboxなんかが良いのではないでしょうか)
  1. Obsidianスマートフォンアプリをインストールし、Remotely Saveプラグインを導入します。

    設定画面でお好きなクラウドストレージサービスを選択し、「Auth」をクリックし画面の指示に従って同期を許可してください。

  2. Obsidian Web Clipperのブラウザ拡張機能を導入します。導入方法は各自調べてください。Web Clipperの設定はPCの時と同じです。

  3. ブラウザプリ上で拡張機能を呼び出せば、PCの時と同じように、Obsidianアプリに新規ノートが作成されます。以下はiPhoneのsafariでの手順です。


  4. Obsidianアプリ上でRemotely Saveを実行します。クラウドストレージ上にデータが保存されます。

PC版のObsidianにもRemotely Saveを導入し同じクラウドストレージアカウントを選択しておけば、サイドバーの「Remotely Save」でクラウドストレージ上のデータを取得することができます。

スマートフォンとの同期については以上です。

おわりに

いかがだったでしょうか?昨今は便利なツールが数多く存在し、今回紹介した手法が必ずしも最適かどうかはわかりませんが、皆様の日々の生活のお役に立てば幸いです。

Accenture Japan (有志)

Discussion