ローカルLLMで遊ぼうとしたら混乱したのでそれぞれの関係をざっくり整理する備忘録〜

先日、ローカル環境にLLMを入れて遊んでみようと思ったのですが、
「Ollama入れて……Gemma入れて……エンベディング? べ、べくとるか??」
と、見事に脳内渋滞事故を起こしました。

単語だけはなんとなく聞いたことあるけれど、「実際どういう仕組みで、どう関係してるのか?」まではイマイチ分かってなかったな、という反省です。
この記事は、そんな混乱を一旦リセットして整理するために書いた備忘録です。

冒頭でちらっと出てきましたが、当記事では実際に触れた「LLM・Embeddingモデル・ベクトルデータベース・それらを統括する実行ツール」たちがどう役割分担して、「特定のデータを検索して回答するAI(=RAGっぽいもの)」を動かしているのか、について書いていきます。

今回つくりたかったもの

ローカル版「検索して答えるAI」。

ざっくり目標はこれでした。もう少し具体的に説明するのであれば、
「手元のPCに入れたデータを検索してそれっぽい回答を生成するAIを、ローカルLLMで動かしたい。」といった感じです。
そのために必要なのが、最近よく聞く「RAG」というやつ。

RAGって何やねん

RAG は Retrieval Augmented Generation の略で、直訳すると「検索付きの文章生成」、とのことです。

まず、手元のデータベースからそれっぽい情報を検索してきて、それを材料にしながら答えの文章を生成する。
…まさにやりたかったことと仕組みが合致していますね。

そんなRAGという仕組みですが、下記の役割を持つシステムたちが一丸となってできています。

LLM:文章を生成する「脳みそ」であり主役。手持ちの知識や材料から、その場でレシピを考えて料理を作ってくれる看板シェフ。
Embedding:単語や文章を「座標(数値のリスト)」に変換してくれる人。シェフや在庫システムが扱いやすいラベル付き食材パック(座標のリスト) にしてくれる仕込み専門の職人。会話を出きないが、文章を読むのがうまい。
ベクトルデータベース:Embeddingで数値化されたデータをしまっておく場所。「この座標に近いものを持ってこい」という指示があると、意味が近いデータを一瞬で持ってきてくれる。巨大冷蔵庫&在庫管理システムみたいな感じ。
Ollama(統括ツール):どのLLMモデルを使うか決めて、どのEmbeddingモデルに仕事させるか決めて、必要になったらキッチンに呼び出して働かせる、みたいな店長兼キッチンマネージャー。

全体の流れを一回まとめると、ざっくりこんな感じになります。

自前のデータを Embedding でベクトル化して、ベクトルDBに保存する。
ユーザーが質問してきたら、その質問文も Embedding でベクトル化する。
ベクトルDBから「意味が近い文章」をいくつか取ってくる。
その文章と質問をまとめて LLMに渡す。
LLM がそれらを材料にしつつ、最終的な答えを生成する。

その裏側で、モデルを配膳・管理しているのが Ollama、言葉を座標にしているのが Embedding、座標の倉庫が ベクトルデータベース、料理しているのが LLM、という構図です。
次以降の項目ではそれぞれの役割についてもう少し深堀していきます。

LLMって何やねん

LLM(Large Language Model)は、ざっくり言うと「超高性能な予測変換」です。
やっていることは「次に来そうな単語をひたすら予測し続けている」だけだったりします。
じゃあ適当な単語を繋げて奇跡的に意味が通りまくっている文章を作っているのかと言われれば勿論そんなわけはなく。

例えるなら、巨大なパチンコ台。
質問(玉)を入れると、中でめちゃくちゃ細かく調整された釘を通りまくり、計算された結果として、「それっぽい答え」という穴に落ちてくる、というイメージです。

調整って何よって感じですが、LLMはひたすら精度を高めるための予測学習を行った状態で、我々の下で働いてくれているそうです。
各モデルによって鍛錬の方法は異なると思いますが、メジャーどころでいえばGoogleやMetaなどでは巨大な工場(データセンター)で行われる地獄の合宿で、ウェブページや本、コード、Q&Aサイトなどなど、膨大なテキストを相手に、数億回から数兆回レベルの学習を繰り返すと言われているとか、いないとか。
AIなんていかにも最先端みたいな聞こえですが、その実、努力と汗と地と涙の結晶で出来ている以外にも泥臭いやつだったりするんですね。

さて、モデルの話を出しましたが、LLMにも当然”差”があります。
GPT-3.5 より GPT-5.1 の方が賢いよね、Gemini と Claude とか、よく比較されがちだよね、みたいな話です。

具体的には、「どれだけデカい脳みそ(パラメータ数)を持っているか」と「どれだけ多く・良質なデータで学習させたか(経験の量と質)」で決まってくるそうです。

クラウドで動いている GPT や Gemini、Claude たちは、専用データセンターでぶん回されていて、学習データ量もとんでもないし、Web検索などの「追加の手足」も持っている。
一方でローカルLLMは、モデルサイズが控えめ、Webにも勝手にアクセスできない、情報の鮮度にも限界がある、といった制約があります。
人間に例えるなら、「めちゃくちゃ物知りでフットワークも軽い研究者」と「本好きな一般人」くらいの差はどうしてもある、という感じです。

Embeddingモデルって何やねん

Embedding は、文章や単語を、AIが計算しやすい「数値のリスト(ベクトル)」に変換する仕事人です。

我々の言語そのままだと、コンピュータ的には単なる文字列でしかありません。
それを「意味の近さ」で比べられるように、座標空間にマッピングし直す役割を担っています。

Embedding の説明でよく出てくるのが、「1536次元のベクトルで表現されます」みたいなフレーズです。
次元数って何やねん、という話ですが、ざっくり「そのデータを表現するための視点の数(情報の解像度)」です。

RPGのステータスとかで考えてみるとイメージしやすいです。
低次元(3次元)の場合は、攻撃力、防御力、素早さ、のような少ない項目だけでしかキャラを評価できません。
なんとなくの強さは分かるけど、性格までは分かりませんね。

一方、高次元(100次元など)の場合は、攻撃力、防御力に加えて、スキル、弱点、相性の良い属性や地形、性格や傾向、みたいなものまで数値化されます。

高次元になるほど、打ち込まれた言葉を様々な視点で評価して取り扱うことができるという感じです。

Embedingモデルの注意点

このEmbedingモデルでは気を付けなければならないことが1点あって、
それが、Embedding の座標の意味はモデルごとに全然異なる、という点です。

モデルが変わると評価の基準がガラッと変わるみたいなニュアンスです。
Aというモデルで「1536次元のベクトル」にしたときの各次元の意味と、Bというモデルで「同次元数のベクトル」にしたときの意味は、まったく対応していません。
そのため、Embedding を作るモデルを変えたら、すでに作ってあったベクトルデータも全部作り直し(再計算)が必要になります。

ベクトルデータベースってなんやねん

我々が普段使っている日本語をそのままAIに渡しても、「どの文章が意味的に近いか?」を高速で検索するのは意外と難しいです。機械なので、やはり数値に変換するのがベスト。
そこで登場するのが、先述したEmbeddingとベクトルデータベースのコンボです。

ベクトルデータベースは、Embedding モデルで数値化した座標をデータベースに保存します。ユーザーの質問も同じようにベクトル化して、「距離が近いベクトル=意味が近い文章」として検索する、という流れになります。
いわば、「似た座標をめちゃくちゃ早く探すために特化した、本棚兼検索エンジン」のような存在です。

ふつうのデータベースは、「このIDのレコードちょうだい」「この文字列を含む行ちょうだい」といった検索が得意ですが、一方のベクトルDBは、「このベクトルにいちばん近い文章を、上から10件ください」といった、「近さ」に基づく検索をします。

RAGではこの「意味ベース検索」がものすごく重要で、ここが弱いと、どれだけLLMが優秀でも、出てくる結果がズレてしまいます。

Ollamaって何やねん

Ollamaっていうか…実行ツールっていうか…
これはこれまで説明してきたシステムを動かすための箱のような場所、という理解程度でいいのかな、と思います。

最後に雑記

今回AIを絡めたわりとしょうもないツールを作ろうと画策していたのですが、気づいたら簡易的なRAGのようなものの構築にたどり着いた自分に驚いたんだよね。
話には聞いていたけど実際に手を動かしながら調べながらやるのでは理解の定着度が違いました。
月並みな所感ですが、何でもハンズオンでやってみないと身になりませんね、、
どんなにくだらないことでも思いついたら作ってみようの精神で行きたい所存です。

WordPress MCP Adapter を入れてみたけど、abilities が空で詰んでいる話

やりたかったこと

WordPress に MCP Adapter と Abilities API を入れて、「Claude DesktopやVSCodeなどのMCPから WordPress の機能をいい感じに操作してみたい」というのが目標でした。

ローカルじゃなく、実際に動いている WordPress サイトに対して、

  • 記事を取ってきたり
  • ちょっとした処理を投げたり

みたいなことができたら便利だよね、というノリです。

先に結論を書くと、この記事の時点ではまだ問題は解決していません。

  • MCP Adapter プラグインはビルドしてインストール済み
  • Abilities API プラグインもインストール&有効化済み
  • MCP 側からもサーバーとツールは認識されている

……ところまでは行ったのですが、
いざ abilities を取得しようとすると空配列が返ってくる、というところで止まっています。

なのでここでは、

  • ここまでにやったセットアップの手順
  • いま実際に起きている症状
  • 現時点で自分が怪しいと思っているポイント

を、そのまま「途中経過のメモ」として残しておきます。
同じところでハマっている人の参考になったり、
詳しい人が読んで「ここじゃね?」と気づいてくれたら嬉しい、くらいの温度感です。


MCP Adapter プラグインのビルド手順メモ

GitHub の開発リポジトリから取得

MCP Adapter 自体は WordPress.org の公式プラグインディレクトリにはまだなく、
https://github.com/WordPress/mcp-adapter

こちらに開発中のリポジトリが置いてあります。

ただ、このリポジトリをそのまま ZIP にしてアップロードしても、
そのままでは WordPress プラグインとしては動きません。

そのため、ローカルにGitリポジトリをクローン後にビルドプロセスを実行して、
最終的に WordPress にインストールできる mcp-adapter.zip を自前で作成しました。ここら辺はGoogle Antigravityに聞くという体でほぼ全て任せてました。作業者の意味…

① npm 依存関係のインストール

まずは Node 周りの依存関係を入れます。

  • リポジトリをクローンしてカレントディレクトリを移動
  • そこで以下を実行:

これでビルドに必要なツール類(npm スクリプトで使うもの)がインストールされます。

② Composer (PHP) 依存関係のインストール

次に PHP 側のライブラリを入れます。

自分の環境には composer コマンドが入っていなかったので、
まずは composer.phar をダウンロードしました。

その上で、プロジェクトディレクトリ内で以下を実行:

これで、本番用の PHP ライブラリが vendor ディレクトリ以下にインストールされます。

  • --no-dev … 開発用依存を省く
  • --optimize-autoloader … オートローダーを最適化するオプション

とりあえず「本番向けっぽい」オプションを付けた形です。

③ プラグイン ZIP の作成と WordPress へのインストール

依存関係が入ったら、MCP Adapter の npm スクリプトでプラグイン ZIP を生成します。

これを実行すると、
mcp-adapter.zip が生成されるので、あとは普通のプラグインと同じようにインストールしました。


Abilities API プラグインの導入メモ

GitHub から Download ZIP → 有効化

MCP Adapter とセットで使う Abilities API は、こちらのリポジトリにあります。
https://github.com/WordPress/abilities-api

こちらは MCP Adapter と違って、
GitHub の Download ZIP をそのままプラグインとして入れれば OK なタイプでした。

やったこととしては、

  1. GitHub ページから ZIP をダウンロード
  2. WordPress の「プラグイン > 新規追加」から ZIP をアップロード
  3. 有効化ボタンをクリック

だけです。

現時点での設定状況

Abilities API に関しては、プラグインのインストールと有効化以外に特別な設定はしていません。

つまりこの状態では、
Abilities API の“土台”は入っているけれど、具体的な ability(hello-world 的なもの)はまだ自分では登録していない状態です。

このへんが、のちほど出てくる「abilities が空配列」問題にも関係してきそうな気がしています。


MCP クライアント側の設定(mcpServers)

実際に書いている MCP 設定

MCP 側(クライアント側)では、
@automattic/mcp-wordpress-remote を使って WordPress に接続する形にしています。

設定はだいたいこんな感じ:

ポイントとしては、

  • WP_API_URL … MCP Adapter が提供するエンドポイントを指定

    https://サイトURL/wp-json/mcp/mcp-adapter-default-server
  • WP_API_USERNAME … WordPress のユーザー名
  • WP_API_PASSWORD … そのユーザーで発行したアプリケーションパスワード

MCP サーバーと各ツールは認識されている

この設定で MCP クライアント側から接続してみると、

  • MCP サーバー自体は認識される
  • ツールやリソースも「存在している」ことまでは確認できる

というところまでは成功しています。

つまり、「まったく繋がっていない」状態ではない ところまでは辿り着けました。

ただ、ここからが本題で、
いざ abilities を取ろうとすると空配列になってしまう、という問題にぶつかっています。


abilities が空配列で返ってくる問題

実際に起きている症状(abilities 空)

MCP サーバーとツールは認識されているのに、
実際に abilities を問い合わせると 空の配列 が返ってきます。

MCPサーバーと各ツールが認識された。しかし…
いざ実行すると abilities が空配列で返ってくる。

という状態。

「MCP Adapter と Abilities API も入れてるのに、なんで ability が 0 件なんだ?」というのが、今の素直な感想です。

405 エラー(Method Not Allowed)の発生

さらに、エンドポイントを直接叩いてみたときに、
405 エラー(Method Not Allowed) が返ってきました。

405エラー(メソッドは使用できません)が返ってきました。
これはエンドポイントが存在するものの、GETメソッドではなく、おそらくPOSTメソッドを期待しているということです。

  • エンドポイント自体(URL)は存在している
  • ただし、GET でアクセスすると 405 を返す

という挙動なので、
「エンドポイントはあるけど、MCP 的には POST 前提で動くものをブラウザから生 GET している」
という可能性が高そうです。

ここはまだ完全に切り分けきれていないですが、
少なくとも 405 が出ている=abilities が空になっている直接の原因 というよりは、

  • 「本来の使い方(JSON-RPC の POST)じゃない叩き方をしたときの副産物」

に近い気がしています。

現時点で立てている仮説

abilities が空になっている理由として、現時点で自分が疑っているのはこのあたりです:

  • WordPress 側の MCP Adapter プラグインに「機能(abilities)」が登録されていない
  • または MCP サーバーの実装がまだ完全ではなく、Abilities API 側の登録を拾えていない
  • そもそも WordPress サイト側で、MCP Adapter プラグインに実際の機能(例: hello-world など)を登録する必要があるが、開発版等の理由から現状そこまでやっていない

実際に WordPress 側で見ておきたい場所

現時点で「ここは一度ちゃんと確認しておきたい」と思ってメモしているのはこのあたり:

  • /wp-content/plugins/mcp-adapter/includes/Abilities/ 以下のファイル構成

    → Abilities 関連のクラスや定義が正しい形式で書かれているか
  • プラグインのオートローダーが、Abilities に関するクラスを正しく登録しているか
  • WordPress のデバッグログ(wp-content/debug.log など)に、

    MCP Adapter / Abilities API 関連のエラーが出ていないか

また、内部で使われていそうな

mcp_wordpress-htt_mcp-adapter-discover-abilities

的な処理が空配列を返しているということは、

  • WordPress 側の MCP Adapter が Abilities を見つけられていない
  • もしくは Abilities の登録プロセスに何らかの問題がある

可能性が高いのかな、という感触です。

ひとまずのまとめと今後やるつもりのこと

現時点では、

  • MCP Adapter / Abilities API のインストール&有効化
  • MCP クライアント側からの接続(サーバー/ツール認識)

までは到達しているものの、

  • abilities を取得しようとすると空配列
  • エンドポイントに GET でアクセスすると 405

という状態で止まっています。

WordPress 側で今後やるつもりのこととしては:

  • WordPress のログ(デバッグログ)をちゃんと確認する
  • MCP Adapter / Abilities API プラグインの再登録を試す
  • 自作の小さな ability(たとえば hello-world 的なもの)を 1 個だけ登録してみて、

    それが abilities 一覧に出てくるかテストする

あたりを、少しずつ潰していく予定です。

この記事は、ひとまず 「abilities が空のまま沼っている地点でのメモ」 なので、
今後進展があったら「解決編」か、この記事の続きとして追記するかもしれません。それか素直にWordPressの6.9以降を普通に待つか…

Google Antigravityに触れてみた件

厳密な説明ではなく、何となくの解釈も含まれている記事である点はご留意ください。

Googleが新たに発表したAI搭載のIDE「Antigravity」

2025年11月18日にGoogleがGeminiの新モデル3.0Proをリリース。
2.5Proのプレビュー版発表が同年3月だったのでおよそ半年以上ぶりと久々の大きなアップデートで嬉しい。

同時にAI機能が満載との触れ込みで「Antigravity」も発表されたので早速触ってみる。
https://antigravity.google/

VSCodeフォークのエディターで、初回導入時にVSCodeの設定を引き継げる。(同じフォークソフトのCursorの設定も引き継げる模様)
VsCodeの拡張機能も見た感じ普通に利用できるようだった。

利用制限に関して

制限は一応存在するようだが、公式では「寛大な制限」的なニュアンスのみで詳細な言及はされていない。
現時点(2025年11月19日時点)ではプレビュー扱いであり、最新の Gemini 3 Pro をはじめ、Claude 3.5 Sonnet や OpenAIのモデル(GPT-OSS)を無料で利用することができる。
既にTeam planEnterprise planの存在がアナウンスされているため、将来的には明確な制限が設けられるのだろう。

Antigravity Browser Extension

個人的に面白いと思った機能。
Google Antigravityには専用のChromeブラウザを開ける機能が組み込まれており、エージェントが「ブラウザで確認が必要」と判断した際に、このブラウザを起動してタスクを処理するという機能。
専用ブラウザに拡張機能のAntigravity Browser Extensionをインストールし、Googleアカウントでログイン認証を行えば使えるようになった。

公式の説明によると自動でクリック、スクロール、入力、ウェブページのナビゲーションなど、エージェント型ブラウザとしての基本的な操作は実行できるらしい。
動作中は青いオーバーレイがかかってかっこいい。

Agent Manager

こちらも特徴的だと思った機能。CMD + Eまたは右上の「Open Agent Manager」から開ける。
エージェントが作成したタスクや計画書、報告書や成果物の履歴がWorkspaces単位で保存されていく模様。
デフォルトで表示されている右側の「Agent」タブとこの別タブで開くタブは同期しているみたい。

公式の説明に「複数のエージェントの進捗状況を監視できる」みたいなことが書いてあったので複数タスクの進行管理がここから出来るっぽい。

また、ここのSettings>Agent>ARTIFACTのReview Policyから、エージェントからの提案に対する承認ポリシーが設定できる。選択肢は下記の通り。

  • Always Proceed: ユーザーの確認は必要としない
  • Agent Decides: エージェントがいつレビューを依頼するかを決定
  • Request Review: 逐次ユーザーによる確認が必要

Knowledge

開発をする中で発生する知見をメモリする機能。永続的なメモリらしい。
エージェントとのやり取りを続ける中で蓄積されていくようなので、長期的に使う必要がありそうだが、どういう風に活かされるのかが興味深い。

MCP

Agentタブの[…] ドロップダウンからMCPストアを開ける。
必要なMCPを検索してインストールできるほか、直接カスタムMCPを登録できるようだったが設定項目がよくわからなかった。

実際に動かしてみよう

試しに簡単なWebページを作成するタスクを与えてみた。

プロンプト指示文

>イタリア料理店のサンプルLPをプレーンなindex.htmlとCSSで作成
※Gemini 3.0 Pro(High)モデル使用

成果物

すごいと思ったところ

  • 細かいレイアウトなどの指定はしない自由形でやらせたとはいえ、たった一文の自然言語でこの仕上がりなのは純粋に進歩を感じる。
  • Planingモードで実行したが「やることリスト・実装計画・報告書」のmdファイルを作成してくれた。
  • タスク処理の流れで自動で画像を生成してくれた。独自の画像生成モデルを持っているGoogleらしい機能だと思った。
  • ブラウザでのプレビューなどもIDEが内包しているのは結構感動する。
  • 完成後の報告書について、『ブラウザでページを開き、全セクションをスクロールし、ナビゲーション項目にカーソルを合わせ、スムーズスクロール機能をテストすることでページを検証しました。』と称してページの動作確認の様子を画面録画したものを載せてくれる。驚きを通り越してこわいぞ。

気になったところ

  • プロンプト指示は日本語で出したのだが、各種mdファイルが英語で生成された点。モデルかIDEがまだ出たてだからかなと思いたい。
  • ブラウザはエージェント操作でのみ機能するため、単純なHTMLのプレビューはできない。(拡張機能のLive serverなどを入れれば解決する話ではある。)

全体的な所感

わりと前にMicroSoftがVSCodeフォークソフトに対するC/C++機能の制限を発表しCursor周りが一瞬ざわついていた記憶があったので、今回のAntigravityが清々しいほどにVSCodeベースだったのがわりと驚きだった。
https://github.com/cursor/cursor/issues/2976
といっても天下のGoogleが出してきたというのもあるし、諸問題に関しては懸念が無く使えるんじゃないかという気持ちではある。
デファクトスタンダード的な存在になりそうなので、今後の発展が楽しみだ。

参考リンク

公式【Google Antigravity】ページ
ドキュメント
https://antigravity.google/docs/get-started