<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>QMD on 大体動かない</title><link>https://daitai.dev/tags/qmd/</link><description>Recent content in QMD on 大体動かない</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Tue, 12 May 2026 23:34:46 +0900</lastBuildDate><atom:link href="https://daitai.dev/tags/qmd/index.xml" rel="self" type="application/rss+xml"/><item><title>VS Code の Chronicle 機能が結構便利だった</title><link>https://daitai.dev/posts/vscode-chronicle/</link><pubDate>Tue, 12 May 2026 23:34:46 +0900</pubDate><guid>https://daitai.dev/posts/vscode-chronicle/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Chronicle は Copilot Chat のチャット履歴をローカルで記録・分析する実験的機能。&lt;code&gt;/chronicle:standup&lt;/code&gt; でその日の作業サマリー、&lt;code&gt;/chronicle:tips&lt;/code&gt; で自分の使い方フィードバックが出せる。これがなかなか良い。Claude にはこういう公式機能はないけど、自宅では QMD で履歴検索は実現してる。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;職場で VS Code を使っていて、ふと試してみた機能の話。&lt;/p&gt;
&lt;h2 id="chronicle-とは"&gt;Chronicle とは&lt;/h2&gt;
&lt;p&gt;VS Code v1.118 で実験的に追加された GitHub Copilot Chat の機能。Copilot とのやり取り、編集したファイル、参照した PR や Issue あたりをローカルの SQLite データベースに記録しておいて、あとから振り返ったり分析したりできる。&lt;/p&gt;
&lt;p&gt;で、早速使ってみた。&lt;/p&gt;
&lt;p&gt;有効化は &lt;code&gt;github.copilot.chat.localIndex.enabled&lt;/code&gt; を &lt;code&gt;true&lt;/code&gt; にするだけ。&lt;/p&gt;
&lt;p&gt;GUI の設定じゃないのはまだプレビュー段階だからかな。&lt;/p&gt;
&lt;p&gt;使えるコマンドは主に 3 つ。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/chronicle:standup&lt;/code&gt;&lt;/strong&gt;
過去 24 時間の作業内容をまとめてくれる。「このブランチでこのファイル触って、この PR を参照した」みたいな感じで出てくる。朝会の準備が秒で終わるらしい(使ったことはない)。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/chronicle:tips&lt;/code&gt;&lt;/strong&gt;
7 日間の使い方を分析して、「お前こういうプロンプトの書き方してるけど、こうしたほうが良くね？」みたいなフィードバックをくれる。自分の癖を指摘してもらえるのがおもしろいし、フィードバックがまあまあためになる。これはよき。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/chronicle [query]&lt;/code&gt;&lt;/strong&gt;
自然言語で過去の履歴を検索できる。「先週やってたあれ、なんだっけ」が出てくる。&lt;/p&gt;
&lt;h2 id="試してよかったのは-tips"&gt;試してよかったのは tips&lt;/h2&gt;
&lt;p&gt;「同じような質問を繰り返してる」とか「毎回コンテキストを初めから説明してる」みたいな自分のパターンを指摘してくれる。ほう、わかってんじゃねーかこいつ…&lt;/p&gt;
&lt;p&gt;Copilot との対話の仕方に改善余地があると気づかせてくれるのが嬉しい。&lt;/p&gt;
&lt;p&gt;やるじゃん。&lt;/p&gt;
&lt;h2 id="claude-だと"&gt;Claude だと？&lt;/h2&gt;
&lt;p&gt;で、家で使ってる Claude Code でこういう機能があるかというと、公式にはない。
そこんとこどうなんよ？と Claude さんに聞いてみた結果が以下。&lt;/p&gt;</description></item><item><title>QMD の MCP サーバーをやめて Bash で直接叩くようにした</title><link>https://daitai.dev/posts/qmd-bash-direct/</link><pubDate>Wed, 29 Apr 2026 22:04:13 +0900</pubDate><guid>https://daitai.dev/posts/qmd-bash-direct/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — QMD の MCP サーバーが重すぎたので、プラグインを削除して &lt;code&gt;qmd query --no-rerank&lt;/code&gt; を Bash で直接呼ぶ運用に切り替えた。リランカーなしでも BM25 + ベクトル検索の組み合わせで十分実用的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://daitai.dev/posts/qmd/"&gt;以前の記事&lt;/a&gt;で QMD を MCP サーバーとして導入した話を書いた。&lt;/p&gt;
&lt;p&gt;その後、重さが気になり過ぎて運用を見直した話。&lt;/p&gt;
&lt;p&gt;いや、本気で重かったのよ。全然結果が返ってこない。&lt;/p&gt;
&lt;p&gt;なにこれとか思って調べたら GPU なしだとこんなもんだろうとのこと。&lt;/p&gt;
&lt;p&gt;そうですかぁ…&lt;/p&gt;
&lt;h2 id="今の運用"&gt;今の運用&lt;/h2&gt;
&lt;p&gt;ということでどうしたかというと、Claude さんが過去セッションを検索するときは、MCP ツールではなく Bash コマンドを直接叩くようになった。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qmd query --no-rerank &lt;span class="s2"&gt;&amp;#34;調べたいキーワード&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CLAUDE.md に「QMD は &lt;code&gt;qmd query --no-rerank&lt;/code&gt; で使う」と書いてあるので、Claude さんが自動でこの形式で呼ぶ。&lt;code&gt;settings.json&lt;/code&gt; の &lt;code&gt;permissions.allow&lt;/code&gt; には &lt;code&gt;Bash(qmd *)&lt;/code&gt; を追加済み。&lt;/p&gt;
&lt;h2 id="なぜ重かったか"&gt;なぜ重かったか&lt;/h2&gt;
&lt;p&gt;以下 Claude さんの解説。&lt;/p&gt;
&lt;p&gt;QMD は内部で 2 つのローカル ML モデルを動かしている。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;モデル&lt;/th&gt;
 &lt;th&gt;サイズ&lt;/th&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;embeddinggemma-300M-Q8_0.gguf&lt;/td&gt;
 &lt;td&gt;314 MB&lt;/td&gt;
 &lt;td&gt;ベクトル埋め込み生成&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Qwen3-Reranker-0.6B-Q8_0.gguf&lt;/td&gt;
 &lt;td&gt;610 MB&lt;/td&gt;
 &lt;td&gt;検索結果のリランキング&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;自分の環境は専用 GPU がなく CPU 推論になるので、2 モデル合計で 924 MB がオンメモリに乗る。MCP サーバーとして常駐させていると、起動のたびにこれをロードして複数プロセスを spawn する。&lt;code&gt;qmd query&lt;/code&gt;（MCP が使う推奨コマンド）はさらにリランキングまで走らせるので、検索 1 回に数分かかることもあった。&lt;/p&gt;</description></item><item><title>npm グローバル管理から mise に移行したら npm キャッシュにハマった話</title><link>https://daitai.dev/posts/mise-npm-cache/</link><pubDate>Fri, 24 Apr 2026 22:17:25 +0900</pubDate><guid>https://daitai.dev/posts/mise-npm-cache/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — mise の npm バックエンドで &lt;code&gt;@latest&lt;/code&gt; が存在しないバージョンに解決される場合、&lt;code&gt;mise cache clear&lt;/code&gt; で mise の versions host キャッシュを消すと直る。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;npm でグローバル管理していたツールを mise に移行しようとしたら、キャッシュ問題でちょっとハマったので記録しておく。&lt;/p&gt;
&lt;h2 id="移行対象"&gt;移行対象&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ npm list -g --depth=0
├── @playwright/cli@0.1.1 ← 新しいやつ（旧: playwright-cli）
├── @tobilu/qmd@2.1.0
├── @playwright/mcp@0.0.68
└── npm@11.11.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;今回 mise に移行したのは &lt;code&gt;@playwright/cli&lt;/code&gt; と &lt;code&gt;@tobilu/qmd&lt;/code&gt; の2つ。&lt;/p&gt;
&lt;h2 id="playwrightcli-の移行でハマった"&gt;@playwright/cli の移行でハマった&lt;/h2&gt;
&lt;h3 id="まず-deprecated-なパッケージを入れてしまう"&gt;まず Deprecated なパッケージを入れてしまう&lt;/h3&gt;
&lt;p&gt;まず &lt;code&gt;playwright-cli&lt;/code&gt;（旧・Deprecated）と &lt;code&gt;@playwright/cli&lt;/code&gt;（新）を間違えて Deprecated の方を mise に入れてしまった。&lt;code&gt;mise unuse&lt;/code&gt; で無効化してから改めてやり直し。&lt;/p&gt;
&lt;p&gt;そしたら謎のエラーが出た。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ mise use --global npm:@playwright/cli@latest
npm error code ETARGET
npm error notarget No matching version found for @playwright/cli@0.262.0.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;@latest&lt;/code&gt; を指定しているのに &lt;code&gt;0.262.0&lt;/code&gt; という存在しないバージョンを引いてくる。なにそれ。&lt;/p&gt;</description></item><item><title>Claude Code のセッション履歴をベクトル検索できる QMD を入れた</title><link>https://daitai.dev/posts/qmd/</link><pubDate>Sat, 18 Apr 2026 23:01:37 +0900</pubDate><guid>https://daitai.dev/posts/qmd/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — QMD は BM25 + ベクトル検索でローカル Markdown を横断検索できる MCP ツール。Stop hook で Claude Code セッション終了時に自動インデックス化することで、複数リポジトリのセッション履歴を横断検索できる。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;nanoclaw（Claude Code の fork）をアップデートしているとき、内部で QMD が使われているのを見かけた。調べてみたら「お、これ良さそう」となったので入れた。&lt;/p&gt;
&lt;h2 id="qmd-とは"&gt;QMD とは&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/tobil/qmd"&gt;QMD&lt;/a&gt; は、ローカルの Markdown ファイルを対象に検索エンジンを立てる CLI ツール兼 MCP サーバー。単純な grep と違うのは、&lt;strong&gt;BM25（キーワード検索）とベクトル検索を組み合わせて意味的に近いドキュメントを引ける&lt;/strong&gt;こと。検索用の埋め込みモデルもローカルで動く（GPU がなくても動作する、が後ほど書くけど CPU だとクソ重い処理が一回だけある）。&lt;/p&gt;
&lt;h2 id="インストール"&gt;インストール&lt;/h2&gt;
&lt;p&gt;本体は以下のように、npm でインストール。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @tobilu/qmd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Claude Code はプラグインとして追加する。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;claude plugin marketplace add tobi/qmd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;claude plugin install qmd@qmd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="今回やりたかったことと設定"&gt;今回やりたかったことと設定&lt;/h2&gt;
&lt;p&gt;自分は複数のリポジトリで Claude Code を使っていて、技術的な会話もリポジトリをまたいでいる。そこで、QMD のコレクションに全リポジトリのセッション Markdown を入れておけば、「あのリポジトリでやった話、なんだったっけ」を後から引ける。&lt;/p&gt;
&lt;p&gt;同じようなことを実現できるものとして、&lt;a href="https://github.com/thedotmack/claude-mem"&gt;claude-mem&lt;/a&gt; がある。&lt;/p&gt;
&lt;p&gt;そもそもこれ入れればいいじゃんって話もあるけど、なんか分からんけど直感で QMD いいかもって思ってしまったので仕方ない。直感で突き進みます。&lt;/p&gt;
&lt;p&gt;まずは、Claude のセッションをマークダウンに変換するスクリプト &lt;code&gt;convert-sessions.js&lt;/code&gt; を用意して、&lt;code&gt;~/.claude/hooks&lt;/code&gt; 配下に配置。&lt;/p&gt;</description></item></channel></rss>