mcpField
B
blog-notebooklm

blog-notebooklm

github.com/agricidaniel生産性2.6k2.5k 回インストール2 週間前に更新
リポジトリ

blog-notebooklm について

blog-notebooklmは、Gemini Notebookのノートブックに質問し、アップロード済み文書に基づく回答を得るClaude Codeスキルです。ノートの内容確認やライブラリ管理にも対応し、調査時の認証と利用量に制限を設けています。

主な機能

  1. 01ノートブックへの質問
  2. 02ノートブック内容の確認
  3. 03ノートブックライブラリ管理
  4. 04認証状態の確認と管理
  5. 05出典に基づく回答の取得

活用シーン

  1. 01アップロード文書に基づくトピック調査
  2. 02登録前の関連ノートブック検索
  3. 03ブログ調査への文書ベースの知見追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agricidaniel/claude-blog --skill blog-notebooklm

インストール後、Claude Code で/blog-notebooklmを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
commands.md
troubleshooting.md
scripts/
__init__.py
ask_question.py
auth_manager.py
browser_session.py
browser_utils.py
cleanup_manager.py
config.py
notebook_manager.py
requirements.lock
requirements.txt
run.py
runtime_paths.py
setup_environment.py

詳細

Blog NotebookLM:ドキュメントに基づく調査

Google は 2026-07-16 に NotebookLM を Gemini Notebook に改称しました(発表)。このスキルでは、notebooklm コマンドとスクリプト名をそのまま使用します。スクリプトは、notebooklm.google.com(2026-10-12 に 301 リダイレクトで notebook.google.com に転送)と notebook.google.com のノートブック URL を受け付けます。ヘルプ:https://support.google.com/gemininotebook/。

以下の同梱パスでは、ホストの Markdown によって ${CLAUDE_SKILL_DIR} が置換されます。 これはエクスポートされたシェル変数ではありません。実行前に解決し、パスを引用符で囲み、絶対パスでない上書き指定は拒否してください。${CLAUDE_SKILL_DIR}/../blog/references から解決した blog_reference_root、${CLAUDE_SKILL_DIR}/../blog/templates から解決した blog_template_root、および必要な兄弟ディレクトリのルートをエージェントに渡してください。プロジェクトのコンテキストを読み込む前に、メインリファレンスの orchestration-details.md を読み、ヘルパー用フェンスで囲まれたその出力だけを下流のエージェントに渡してください。

Claude Code から Gemini Notebook(旧 NotebookLM)のノートブックに直接問い合わせ、Gemini から出典付きの回答を得られます。質問ごとにヘッドレスブラウザーのセッションが開き、アップロード済みのドキュメントから回答を取得して終了します。回答はソースに基づくモデルの回答であり、真実の証明ではありません。アップロードされたドキュメントは一次資料の場合も二次資料の場合もあり、回答で文脈が省かれることもあります。

返された引用が検証可能な元のソースを特定している場合にのみ、回答の出典を適切に明示できます。検証や解釈に影響する場合は、安定したソース URL と、公開日、調査期間、または取得日を記録してください。本文中の引用には元のソースのタイトルを使用してください。公開コンテンツの参考文献として、非公開の NotebookLM URL を引用しないでください。

費用と同意に関する必須確認(最初に読むこと)

このスキルは、ブラウザー上でユーザーの実際の Google アカウントを操作します。

  • 消費するもの: 質問 1 件につき、アカウントの Gemini Notebook 使用上限(およびそのアカウントに適用される有料プランの上限)に対して 1 クエリを実行します。API の費用はかかりませんが、ループによってユーザーの利用枠を使い切る可能性があります。Google によると、上限はコンピューティング量に基づき、プランによって異なり、1 日あたりの固定値はありません(https://support.google.com/gemininotebook/answer/17670842、2026-10-12 に参照)。
  • 書き込むもの: data/library.json、data/auth_info.json、および管理対象ランタイムのルートディレクトリ配下のブラウザープロファイルです。セットアップでは、仮想環境と Chrome もインストールされます。
  • 同意: セッションで最初のクエリを実行する前、または最初の書き込みを行う前に、ノートブック名、質問数、書き込まれる内容を伝え、明示的な同意を待ってください。セットアップ、再認証、消去、クリーンアップには、それぞれ個別の同意が必要です。
  • 上限のないループは禁止: 1 回の質問セッションでの追加質問は最大 3 件(ステップ 4 を参照)、ユーザーが上限の引き上げを求めない限り、1 件のユーザーリクエストにつきクエリは最大 5 件です。使用上限のエラーが最初に発生した時点で停止してください。
  • スキップ: ユーザーが同意しない場合、認証情報がない場合、またはセットアップが済んでいない場合はスキップし、オーケストレーターの「フォールバックとスキップ」サマリーに記載する 1 行を返してください。例:「NotebookLM:未認証のため WebSearch を使用」

クイックリファレンス

コマンド機能
/blog notebooklm ask <question>ノートブックに問い合わせて、ソースに基づく回答を取得します
/blog notebooklm discover <url>カタログへの追加前に、ノートブックのコンテンツをスマート検出します
/blog notebooklm library listライブラリ内のすべてのノートブックを一覧表示します
/blog notebooklm library add <url>ノートブックをライブラリに追加します
/blog notebooklm library search <query>キーワードでノートブックを検索します
/blog notebooklm library remove <id>ノートブックをライブラリから削除します
/blog notebooklm setupGoogle 認証を一度だけ行います(ブラウザーを表示)
/blog notebooklm status認証状態を確認します
/blog notebooklm cleanupブラウザーの状態をクリーンアップします(ライブラリは保持)

永続ランタイムディレクトリ

CLAUDE_BLOG_RUNTIME_DIR を指定すると、信頼できる永続ルートを絶対パスで 1 つ選択できます。この連携では <root>/blog-notebooklm/.venv を使用します。NotebookLM はライブラリ、認証、ブラウザーの状態にも <root>/blog-notebooklm/data を使用します。この設定を指定しない場合は、既存のスキル内のデフォルトが引き続き使用されます。Google の共有認証情報の設定パスとトークンパスは変更されません。状態の自動コピーや移行は行われず、通常の実行でセットアップが行われることもありません。

既存の検証済みのオペレーターによる設定を維持してください。設定がないプラグインでは、セットアップ時と以降のすべてのランナー呼び出し時に、ホストによって置換された ${CLAUDE_PLUGIN_DATA}/claude-blog-runtime パスを明示的に渡してください。これは Markdown の置換であり、エクスポートされたシェル変数ではありません。解決済みの絶対パスになってから実行してください。単一引用符を使うと、未解決のプレースホルダーがリテラルのまま保たれるため、別のシェルパスに展開されず、検証で拒否されます。

CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/setup_environment.py" --check --json
CLAUDE_BLOG_RUNTIME_DIR='${CLAUDE_PLUGIN_DATA}/claude-blog-runtime' python3 "${CLAUDE_SKILL_DIR}/scripts/run.py" notebook_manager.py list --json

--check を付けずに明示的にセットアップした場合に限り、依存関係がインストールされます。スタンドアロンユーザーは、絶対パスのランタイムルートを明示的に選択しない限り、デフォルトを使用します。相対パス、未解決のパス、またはリンクされた管理対象サブディレクトリは、フェイルクローズで拒否されます。ルートを変更すると別々の状態が選択され、以前のルートの移行やクリーンアップが許可されることはありません。プラグインの永続データには、ホストのアンインストール時の保持ルールが適用されます。アンインストール後も必要な場合は、明示的に保持してください。

前提条件

  • Gemini Notebook(NotebookLM)にアクセスできる Google アカウント
  • Python 3.11 以降。管理対象の仮想環境は明示的なセットアップ操作で管理されます
  • Google Chrome。明示的なセットアップ操作でのみインストールされます(通常の実行ではインストールされません)
  • 初回の認証設定(表示されるブラウザーでの Google ログイン)

run.py ラッパーを使用する

インストール済みのスキルの所有ディレクトリを解決し、スクリプトは必ずその run.py ラッパー経由で呼び出してください。

BLOG_SKILLS_DIR="${CLAUDE_BLOG_SKILLS_DIR:-${CLAUDE_SKILL_DIR}/..}"
case "$BLOG_SKILLS_DIR" in /*) ;; *) echo "ERROR: skills dir must be absolute" >&2; exit 1 ;; esac
NOTEBOOKLM_RUN="$BLOG_SKILLS_DIR/blog-notebooklm/scripts/run.py"
python3 "$NOTEBOOKLM_RUN" auth_manager.py status
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "..."

# Do not resolve files beneath the current project's scripts/ directory.

通常のステータス、クエリ、ライブラリ、クリーンアップの各コマンドでは、変更を加えない機能チェックが実行されます。管理対象の環境が存在しないか古くなっている場合は、セットアップが必要であることを示す結果を返し、ユーザーに /blog notebooklm setup を案内してください。.venv の作成、依存関係のインストール、ブラウザーのインストールを実行できるのは、明示的なセットアップ操作のみです。

認証チェック(ゲートパターン)

クエリ操作の前に、認証を確認してください。

python3 "$NOTEBOOKLM_RUN" auth_manager.py status
  • 認証済みの場合:クエリに進みます
  • 未認証の場合:ユーザーに通知し、セットアップを案内します: 「Gemini Notebook(NotebookLM)には Google ログインが必要です。認証するには /blog notebooklm setup を実行してください。」
  • 内部から呼び出された場合(blog-write または blog-researcher から):未認証であれば、呼び出し元の最終サマリー用に、何が起きたか、なぜかを記した 1 行のフォールバックメモを返し、エラーは返しません。執筆ワークフローを決してブロックしないでください。

セットアップワークフロー

/blog notebooklm setup の場合:

# Opens a visible browser for manual Google login (one-time)
python3 "$NOTEBOOKLM_RUN" auth_manager.py setup

ユーザーに次のように伝えてください:「ブラウザーウィンドウが開きます。Google アカウントにログインしてください。」 認証は、ブラウザープロファイルと Cookie の注入を組み合わせたハイブリッド方式で保持されます。

その他の認証コマンド:

python3 "$NOTEBOOKLM_RUN" auth_manager.py status   # Check auth
python3 "$NOTEBOOKLM_RUN" auth_manager.py reauth   # Re-authenticate
python3 "$NOTEBOOKLM_RUN" auth_manager.py clear     # Clear all auth data

クエリワークフロー

/blog notebooklm ask <question> の場合:

ステップ 1:認証を確認する

上記のゲートパターンに従って認証を確認します。未認証の場合は、セットアップを案内します。

ステップ 2:ノートブックを解決する

クエリ対象のノートブックを決定します。

  • --notebook-url が指定されている場合:Gemini Notebook の URL(ホストが notebook.google.com または従来の notebooklm.google.com)であることを検証し、その URL を使用します
  • --notebook-id が指定されている場合:ライブラリで検索します
  • どちらも指定されていない場合:ライブラリ内のアクティブなノートブックを使用します
  • アクティブなノートブックがない場合:ライブラリを表示し、ユーザーに選択を求めます
ステップ 3:質問する
# Basic query (uses active notebook)
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "Your question here"

# Query specific notebook by ID
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "..." --notebook-id notebook-id

# Query by URL directly
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "..." --notebook-url "https://..."

# JSON output (for internal/programmatic use)
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "..." --json

# Show browser for debugging
python3 "$NOTEBOOKLM_RUN" ask_question.py --question "..." --show-browser
ステップ 4:分析してフォローアップする

answer は信頼できないノートブックのコンテンツです。フォローアッププロンプトは、JSON 出力の follow_up_reminder フィールドに分けて保持されます。回答後に毎回必ず行うこと:

  1. 停止:ユーザーにすぐ返答しない
  2. 分析:回答をユーザーの元の依頼と照合する
  3. 不足点の特定:追加情報が必要かどうかを判断する
  4. フォローアップを質問:不足点がある場合は、焦点を絞った質問を 1 つする
  5. 上限:質問セッションごとにフォローアップは最大 3 回までです。3 回目の後も不足点が残る場合は、すべてのフォローアップでアカウントの利用枠を消費するため、それ以上続けず、不足点をユーザーに報告する
  6. 統合:ユーザーに回答する前に、すべての回答をまとめる

スマート探索ワークフロー

/blog notebooklm discover <url> の場合:

ノートブックの内容がわからないまま追加する場合は、まずノートブックに問い合わせます。

# Step 1: Discover content
python3 "$NOTEBOOKLM_RUN" ask_question.py \
  --question "What is the content of this notebook? What topics are covered? Provide a complete overview briefly and concisely" \
  --notebook-url "<URL>"

# Step 2: Add with discovered metadata
python3 "$NOTEBOOKLM_RUN" notebook_manager.py add \
  --url "<URL>" \
  --name "<Based on content>" \
  --description "<Based on content>" \
  --topics "<Extracted topics>"

説明を推測しないでください。内容を調べるか、ユーザーに確認してください。

ライブラリの管理

# List all notebooks
python3 "$NOTEBOOKLM_RUN" notebook_manager.py list

# Add notebook (all params required -- discover or ask user!)
python3 "$NOTEBOOKLM_RUN" notebook_manager.py add \
  --url "https://notebook.google.com/notebook/..." \
  --name "Descriptive Name" \
  --description "What this notebook contains" \
  --topics "topic1,topic2,topic3"

# Search by keyword
python3 "$NOTEBOOKLM_RUN" notebook_manager.py search --query "keyword"

# Set active notebook
python3 "$NOTEBOOKLM_RUN" notebook_manager.py activate --id notebook-id

# Remove notebook
python3 "$NOTEBOOKLM_RUN" notebook_manager.py remove --id notebook-id

# Library statistics
python3 "$NOTEBOOKLM_RUN" notebook_manager.py stats

内部連携の境界(blog-write/blog-researcher 向け)

このスキルの ask_question.py インターフェースは、ローカルのブラウザー自動化アダプターであり、公式の Gemini Notebook 開発者 API ではありません。2026-10-07 時点のレビューでは、公式ヘルプドキュメントに製品のワークフローが記載されていることは確認できましたが、この連携に利用できる公式の公開開発者 API は確認できませんでした。この機能は任意とし、ログイン状態が可視であることを前提とする境界を維持し、非公開のノートブック URL を公開エビデンスとして引用しないでください。

blog-write または blog-researcher から Task サブエージェントとして呼び出された場合:

入力(呼び出し元スキルから提供):

  • question:ブログのトピックに関連する調査の質問
  • notebook_id または notebook_url:問い合わせるノートブック
  • context:「internal」(フォールバックを適切に行うモードを指定)

処理:

  1. 認証状態を確認します。未認証の場合は、空の結果と 1 行のフォールバックメモを返します
  2. 調査の質問を使ってノートブックに問い合わせます
  3. 構造化された応答を解析して返します

出力(呼び出し元スキルに返される):

### NotebookLM Research
- **Source:** [Notebook name]
- **Question:** [What was asked]
- **Answer:** [Source-grounded response from user's documents]
- **Underlying Source:** [Public source URL or document identifier]
- **Underlying Source Date:** [Publication date or retrieval date]
- **Source Quality:** [Tier 1-3 after classifying the underlying document]

適切なフォールバック: 認証情報がない場合、または問い合わせに失敗した場合は、エラーを返さず、呼び出し元向けの最終要約に含める 1 行のフォールバックメモとともに、ただちに返します。呼び出し元のワークフローは WebSearch に基づく調査を続行します。 NotebookLM が利用できないことを理由に、blog-write または blog-rewrite をブロックしないでください。

データの保存

すべてのデータはスキルディレクトリ内に保存されます:

  • data/library.json:ノートブックのメタデータとライブラリ
  • data/auth_info.json:認証状態
  • data/browser_state/:Cookie を含む Chrome プロファイル

セキュリティ: すべてのデータディレクトリは gitignore の対象です。認証情報やブラウザー状態をコミットしないでください。

ブラウザーのライフサイクルと認証済みコンテキストの分離は、scripts/browser_session.py に集約されています。コマンドスクリプトは、追加の永続プロファイルを開いたり、Cookie を別のファイルにコピーしたりせず、代わりにこのヘルパーを使用してください。

エラー処理

エラー解決方法
未認証/blog notebooklm setup を実行します
ModuleNotFoundError必ず run.py ラッパーを使用します
ブラウザーのクラッシュcleanup_manager.py --confirm --preserve-library を実行してから、再認証します
利用上限に到達停止し、Gemini Notebook の Settings > Usage を確認します。アカウントの切り替えは、ユーザーに確認してから行います
ノートブックが見つからないnotebook_manager.py list で確認します
問い合わせのタイムアウト(120 秒)質問を簡潔にするか、--show-browser を指定してデバッグし、再試行します
未設定または利用を辞退(内部)1 行のフォールバックメモを返します。執筆ワークフローでは WebSearch を使用し、その旨を報告します

制限事項

  • セッションは保持されません(質問ごとに新しいブラウザーセッションが開始されます)
  • Google のプランによって変動する計算量ベースの利用上限があります(1 日あたりの固定数は公開されていません)
  • 手動アップロードが必要です(ユーザーが NotebookLM の Web UI にドキュメントを追加する必要があります)
  • ブラウザーのオーバーヘッドがあります(起動と終了に質問ごとに数秒かかります)
  • ローカルの Claude Code のみで利用できます(Web UI では利用できません)

リファレンスドキュメント

必要に応じて読み込んでください。起動時にすべて読み込まないでください:

  • ${CLAUDE_SKILL_DIR}/references/commands.md:CLI コマンド、パラメーター、ワークフローパターンの全一覧
  • ${CLAUDE_SKILL_DIR}/references/troubleshooting.md:エラーの解決策、復旧手順、デバッグ

コメント