Obsidian Web ClipperでOllamaを使ってローカルLLMで記事を要約する方法

Obsidian Web ClipperでOllamaを使ってローカルLLMで記事を要約する方法

2026.04.13

どうも!オペ部の西村祐二です!

Obsidian Web ClipperInterpreter機能では、AIモデルを使ってWebページの要約やタグ抽出ができます。クラウドAPIだけでなく、Ollamaを使ったローカルLLMにも対応しているので、コストを気にせずに利用できます。

この記事では、OllamaをObsidian Web Clipperに設定してローカルLLMで記事要約する手順と、実際に運用する中で分かったチューニングのポイントをまとめます。モデルには最近リリースされたGemma 4を使用しました。

結論

Ollama + gemma4でローカル完結のWeb記事要約環境を構築できます。デフォルト設定のままだとコンテキスト長不足やCORSエラーで正常に動作しないため、環境変数でのチューニングが重要です。

この記事で分かること:

  • Obsidian Web ClipperにOllamaを設定する手順
  • CORS(403エラー)の回避方法
  • テンプレートへのプロンプト変数の設定
  • インタープリターコンテキストの最適化
  • 環境変数によるコンテキスト長の拡張と高速化
  • リクエスト内容のデバッグ方法

前提条件

  • Ollamaがインストール済み
  • Ollamaでモデルがダウンロード済み(例: ollama pull gemma4
  • ブラウザにObsidian Web Clipperが導入済み
  • Obsidianがインストール済み

手順

1. Ollamaプロバイダーの追加

Web Clipperの設定から Interpreter セクションを開き、プロバイダーを追加 で以下のように設定しました。

  • プロバイダー: Ollama
  • ベースURL: http://127.0.0.1:11434/api/chat(プリセット選択時に自動入力される値)

OllamaはWeb Clipperのプリセットプロバイダーとして登録されているため、ベースURLはデフォルトのままで問題ありません。APIキーも不要です。

CleanShot 2026-04-13 at 11.07.13@2x

2. モデルの追加

モデルを追加 でモデルを登録しました。

  • プロバイダー: Ollama
  • 表示名: Gemma 4(任意の表示名)
  • モデルID: gemma4

モデルIDはOllamaで管理しているモデル名と正確に一致させる必要があります。gemma4 のようにタグを省略すると gemma4:latest として扱われます。別のバリアント(例: gemma4:e2b)を使う場合はタグまで含めて指定します。ollama listコマンドでインストール済みモデルの名前を確認できます。

ollama list

CleanShot 2026-04-13 at 11.08.13@2x

3. OLLAMA_ORIGINS付きでサーバー起動

ブラウザ拡張からOllamaにアクセスするには、CORS(Cross-Origin Resource Sharing)の許可設定が必要です。通常のOllamaアプリ起動では403エラーになります。

まずOllamaアプリを停止しました。メニューバーのOllamaアイコンから「Quit Ollama」を選択するか、ターミナルで以下を実行しました。

pkill ollama

次に、OLLAMA_ORIGINS環境変数を付けてサーバーを起動しました。

OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

これで各ブラウザの拡張機能からのアクセスが許可されます。

4. テンプレートにプロンプト変数を追加

Interpreterを動作させるには、Web Clipperのテンプレートにプロンプト変数を埋め込む必要があります。{{"プロンプト"}} の形式で記述すると、クリップ時にInterpreterがLLMに問い合わせて結果を埋めてくれます。

例えば、テンプレートのプロパティに以下のように設定しました。

プロパティ
description {{"記事の要点"}}
tags clippings, {{"検索に利用できそうなタグ情報を3-5ワード抽出,小文字,スペース禁止"}}

description には記事の要点を、tags には固定タグ clippings に加えてLLMが抽出したタグを追加する設定です。プロンプトの内容は自由に変更できるので、用途に合わせて調整できます。

テンプレートにプロンプト変数が含まれている場合、クリップ時にInterpreterセクションが表示され、interpret ボタンで処理を実行する流れになります。

5. インタープリターコンテキストの最適化

Web Clipperの設定 > Interpreter > 詳細設定 > デフォルトインタープリターコンテキスト でコンテキストを設定できます。

いろいろ試行錯誤した結果、一周回って以下のように設定するのがおすすめかなと思いました。

{{content}}

content 変数はページの本文をMarkdown形式で返します。HTMLフィルターを組み合わせるより、この変数を使うのが最もシンプルで効果的でした。

変数 形式 特徴
{{content}} Markdown 本文抽出済み。見出し・リスト・コードブロック等の構造が保持される。トークン効率が良い
{{contentHtml}} HTML 本文のHTML。フィルターで加工が必要
{{fullHtml}} HTML ページ全体のHTML。nav・sidebar等のノイズを含む

{{content}} はMarkdown形式のため、LLMが文書構造を理解しやすく、HTMLタグ分のトークンも節約できます。技術記事のコードブロックも保持されるため、情報の欠落が少ないのもメリットです。

基本的な設定は以上です。このままでも動作しますが、Ollamaのサーバー側のデフォルト設定では長文ページでコンテキスト長が不足するケースがありました。以下のチューニングで改善できます。なお、環境変数を変更する場合はサーバーの再起動が必要です。

チューニング

コンテキスト長の拡張

Ollamaのデフォルトコンテキスト長はVRAMに応じて自動設定されます(24GiB未満のVRAMでは4096トークン)。長文のWebページを処理する場合は不足することがあるため、OLLAMA_CONTEXT_LENGTH環境変数でサーバー起動時に指定できます。

OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

KVキャッシュ量子化による高速化

OLLAMA_KV_CACHE_TYPE環境変数でKVキャッシュ(推論時の中間データ)の量子化タイプを指定できます。Flash Attentionが有効な場合、メモリ使用量を削減しつつ処理を高速化できる可能性があります。

OLLAMA_FLASH_ATTENTION=1 も合わせて設定する必要があります。

OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

モデルバリアントの選択

gemma4にはサイズの異なるバリアントがあります。処理速度と品質のバランスに応じて選択できます。

モデル サイズ 処理時間(参考値) 特徴
gemma4:e2b 7.2GB 約37秒 軽量。速度重視の場合の選択肢
gemma4:latest(= e4b) 9.6GB 約64秒 標準。品質と速度のバランス
gemma4:26b 18GB - 高品質だが低速。VRAMに余裕がある場合

処理時間はApple M2 Max / 32GBでの参考値です(Flash Attention + KVキャッシュ量子化有効、プロンプト約2600トークン)。gemma4:e2bgemma4:latest と比較して約半分の処理時間で、Web Clipperの要約タスク(要約、タグ抽出など)でも十分な品質が得られました。

チューニング後の起動コマンド

上記のチューニングをすべて含めた起動コマンドは以下のとおりです。

OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

チューニングしても期待どおりの結果が得られない場合は、デバッグログで原因を調査できます。

デバッグ方法

OllamaのデバッグログでWeb Clipperからどのようなリクエストが送信されているか確認できます。

サーバーログの確認

OLLAMA_DEBUG=trueを付けてサーバーを起動すると、プロンプトのトークン数やリクエスト形式が確認できます。

OLLAMA_DEBUG=true OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

ログには以下のような情報が出力されます。

msg="completion request" images=0 prompt=2631 format=""
msg="completion request" images=0 prompt=2652 format="\"json\""

prompt=2631 がプロンプトのトークン数です。コンテキスト長に対してこの値が大きすぎると、レスポンスに使えるトークンが不足します。

リクエスト本文の確認

OLLAMA_DEBUG_LOG_REQUESTS=trueを追加すると、リクエスト本文がJSONファイルとして保存されます。

OLLAMA_DEBUG=true OLLAMA_DEBUG_LOG_REQUESTS=true OLLAMA_CONTEXT_LENGTH=16384 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve

ログに保存先のパスが出力されます。

msg="logged to /var/folders/.../ollama-request-logs-.../...body.json"

このJSONファイルを確認すると、Web Clipperが送信したシステムプロンプト、コンテキスト(ページ本文)、ユーザープロンプトの内容をすべて確認できます。コンテキスト設定が正しく反映されているか、不要なノイズが含まれていないかの検証に役立ちます。

まとめ

Obsidian Web ClipperでOllamaを使ったローカルLLMによる記事要約の設定手順とチューニングのポイントをまとめました。

ポイントは以下のとおりです。

  • OLLAMA_ORIGINS 環境変数でCORSを許可する(必須)
  • インタープリターコンテキストは {{content}} がシンプルで効果的
  • OLLAMA_CONTEXT_LENGTH で長文ページに対応する
  • OLLAMA_FLASH_ATTENTION=1OLLAMA_KV_CACHE_TYPE=q8_0 でメモリ効率を改善する
  • デバッグログでリクエスト内容を確認できる

クラウドAPIを使わずにローカルで完結するため、プライバシーやコストを気にせず利用できるのがメリットだと感じました。

一方で、チューニングを施しても軽量モデルの gemma4:e2b で約37秒かかるのが現状です。Webページをクリップするたびにこの待ち時間が発生するのは、体験としてはやや重いと感じました。より高速なローカルモデルの登場に期待したいところです。

別のアプローチとして、クリップ時にはプレーンな状態で保存しておき、Claude CodeなどのAIツールでバッチ的にタグ付けや要約を実行する方法も考えられます。ユーザーが待つ必要がなく、より高性能なモデルで処理できるため、結果的に体験が良くなる可能性がありそうです。

誰かの参考になれば幸いです。


参考リンク:

この記事をシェアする

関連記事