Marpプレゼンテーション用のベクトル検索CLIツール。Gemini APIを使用してスライドの意味検索を実現します。
- 意味検索: Geminiの埋め込みモデルを使用したセマンティック検索
- インクリメンタルインデックス: 変更されたファイルのみを再インデックス
- 画像説明: Gemini Visionによるスライド内画像の自動説明(オプション)
- スピーカーノート対応: スピーカーノートも検索対象に含める
- 高速: SQLite + sqlite-vecによる高速ベクトル検索
- ウォッチモード: ファイル変更時の自動再インデックス
インストール不要で直接実行できます:
npx marp-lens search "機械学習"
npx marp-lens index -d ./slides
npx marp-lens statsnpm install -g marp-lensgit clone https://github.com/hirokidaichi/marp-lens.git
cd marp-lens
npm install
npm run build.envファイルを作成:
cp .env.example .env- Gemini APIキーを設定:
# .env
GEMINI_API_KEY=your-api-key-hereAPIキーはGoogle AI Studioで取得できます。
# カレントディレクトリのMarkdownファイルをインデックス
marp-lens index
# 特定のディレクトリをインデックス
marp-lens index -d ./slides
# 画像説明付きでインデックス
marp-lens index -d ./slides --with-images
# インデックスを再構築
marp-lens index -d ./slides --rebuild
# 特定のファイルのみインデックス
marp-lens index -f ./slides/presentation.md# 意味検索
marp-lens search "機械学習の基礎"
# 結果数を制限
marp-lens search "アーキテクチャ" --limit 5
# 類似度閾値を設定
marp-lens search "API設計" --threshold 0.7
# JSON形式で出力
marp-lens search "テスト" --format json# ファイル名とスライド番号で取得
marp-lens get "presentation.md #3"
# パスの一部でも検索可能
marp-lens get "slides.md #10"marp-lens stats出力例:
Database Statistics
┌─────────────────────────┬────────────────────┐
│ Total Files │ 3 │
├─────────────────────────┼────────────────────┤
│ Total Slides │ 17 │
├─────────────────────────┼────────────────────┤
│ Total Embeddings │ 17 │
├─────────────────────────┼────────────────────┤
│ Database Size │ 3.08 MB │
└─────────────────────────┴────────────────────┘
# ファイル変更を監視して自動的に再インデックス
marp-lens watch -d ./slides
# 画像説明付きで監視
marp-lens watch -d ./slides --with-images出力例:
marp-lens watch
──────────────────────────────────────────────────
Directory: /path/to/slides
Database: /path/to/marp-lens.db
Images: No
──────────────────────────────────────────────────
Watching for changes... (Ctrl+C to stop)
15:30:45 [change] presentation.md
Generating embeddings for 5 slides...
Indexed: 5 slides
Markdownファイルをインデックスします。
| オプション | 説明 | デフォルト |
|---|---|---|
-d, --dir <path> |
検索対象ディレクトリ | カレントディレクトリ |
--db <path> |
データベースファイルパス | ./marp-lens.db |
-f, --file <path> |
特定ファイルのみインデックス | - |
-r, --rebuild |
インデックスを再構築 | false |
-i, --with-images |
画像説明を含める | false |
スライドを意味検索します。
| オプション | 説明 | デフォルト |
|---|---|---|
-l, --limit <number> |
最大結果数 | 10 |
-t, --threshold <number> |
最小類似度閾値 (0-1) | 0 |
-o, --format <format> |
出力形式 (table or json) |
table |
--db <path> |
データベースファイルパス | ./marp-lens.db |
特定のスライドの内容を取得します。
形式: <ファイルパス> #<スライド番号>
データベースの統計情報を表示します。
ファイル変更を監視して自動的に再インデックスします。
| オプション | 説明 | デフォルト |
|---|---|---|
-d, --dir <path> |
監視対象ディレクトリ | カレントディレクトリ |
--db <path> |
データベースファイルパス | ./marp-lens.db |
-i, --with-images |
画像説明を含める | false |
| 変数 | 説明 | 必須 |
|---|---|---|
GEMINI_API_KEY |
Gemini APIキー | Yes |
MARP_LENS_DB |
デフォルトのデータベースパス | No |
MARP_LENS_DIR |
デフォルトのスライドディレクトリ | No |
# 開発モードで実行
npm run dev -- index -d samples
# 型チェック
npm run typecheck
# テスト実行
npm test
# ビルド
npm run buildAIエージェントにmarp-lensスキルを追加すると、プレゼンテーションの検索・参照が可能になります。
npx skills add hirokidaichi/marp-lens追加後、エージェントに「スライドを検索して」「プレゼンの内容を教えて」などと指示すると、自動的にmarp-lensを使用してスライドを検索します。
- TypeScript: 型安全な開発
- Gemini API: 埋め込み生成 (text-embedding-004) と画像説明 (gemini-2.0-flash)
- SQLite + sqlite-vec: ベクトルデータベース
- Commander.js: CLIフレームワーク
- Vitest: テストフレームワーク
MIT
