この記事ではRAGに特化して解説します。RAG全般は RAGとは?仕組み・構築・ベクトルDB選定まで【2026年完全ガイド】 をご覧ください。

Waxとは:Apple Silicon向けAIエージェントのメモリ基盤

Waxは、Apple プラットフォーム向けの高性能なシングルファイル・メモリレイヤーだ。 GitHub 700スター超を獲得しているSwift製OSSで、AIエージェントがドキュメント・embeddings・構造化知識を単一の .wax ファイルに集約して保存・検索できるように設計されている。サーバー不要・API不要・クラウド依存ゼロのオンデバイス動作が最大の特徴だ。

2026年にAIエージェントの実用化が進む中、エージェントが「何を覚えているか」はアプリケーションの品質を大きく左右する。一般的なRAGシステムでは、ドキュメントストア・ベクトルDB・メタデータDBの3層構成が必要で、Dockerコンテナの管理やAPIキーの発行、ネットワーク越しの遅延が常についてまわる。Waxはこの問題をシングルファイルアーキテクチャで解決する。

Waxの核心思想
「ユーザーデータはユーザーのデバイスに属する」という哲学のもと、Apple Siliconの演算能力を最大限に活用してローカルで完結するRAGを実現する。バックアップも転送も、ファイル1つ操作するだけで済む。

topics(GitHubラベル)には ragrag-pipelinevector-databasevector-embeddingsvector-searchmetalmcp-serveron-device-aiai-agentscoreml などが並んでおり、Apple Siliconに最適化されたRAGエンジンとしての位置づけが明確だ。

技術アーキテクチャ:Metal加速ハイブリッド検索の仕組み

Waxの内部は .wax ファイル1つに全コンポーネントを格納するフレームベース・コンテナ形式になっている。

ファイル内部構造

┌─────────────────────────────────────────────────────┐
│  Dual Header Pages (A/B)                            │
│  (Magic, Version, Generation, WAL/TOC Pointers)     │
├─────────────────────────────────────────────────────┤
│  WAL (Write-Ahead Log)                              │
│  (クラッシュ耐性のあるアトミックリングバッファ)            │
├─────────────────────────────────────────────────────┤
│  Compressed Data Frames (LZ4)                       │
│  Frame 0: Raw Document                              │
│  Frame 1: Metadata/JSON                             │
│  Frame 2: System Info                               │
├─────────────────────────────────────────────────────┤
│  Hybrid Search Indices                              │
│  ├─ SQLite FTS5 Blob (テキスト検索 + EAV Facts)     │
│  └─ Metal HNSW Index (ベクトル検索)                  │
├─────────────────────────────────────────────────────┤
│  TOC (Table of Contents)                            │
│  (フレームインデックス・親子関係・エンジンマニフェスト)   │
└─────────────────────────────────────────────────────┘

3つの設計原則が組み合わさっている:

  1. アトミック耐性:デュアルヘッダーとWALにより、プロセスが途中終了しても整合性を保つ
  2. 統合検索:1クエリでBM25テキストインデックスとHNSWベクトルインデックスの両方に同時検索をファンアウト
  3. 構造化知識:内蔵EAV(Entity-Attribute-Value)ストレージで、耐久性のある事実や長期推論を保持
flowchart TD A["ユーザークエリ"] --> B["Wax Memory Layer"] B --> C["SQLite FTS5
テキスト検索(BM25)"] B --> D["Metal HNSW Index
ベクトル検索"] C --> E["ハイブリッドスコア統合"] D --> E E --> F["ランク付き結果"] F --> G["AIエージェント
コンテキスト注入"] H["新規ドキュメント"] --> I["LZ4圧縮フレーム"] I --> J[".wax ファイル
(単一バイナリ)"] J --> B

パフォーマンス特性

公式ベンチマーク(M3 Max上、p95)によると:

指標 Wax(ハイブリッド) SQLite(FTS5) クラウドRAG
検索レイテンシ(p95) 6.1ms 12ms 150ms〜500ms+
コールドオープン(p95) 9.2ms 120ms+
インジェスト速度 85.9 docs/s
プライバシー 100%ローカル 100%ローカル クラウドホスト
セットアップ ゼロコンフィグ 複雑(APIキー等)

Waxのハイブリッド検索は、テキスト検索(BM25)とベクトル検索(HNSW)を組み合わせることで、キーワード一致と意味的類似度の両方をカバーする。これはクラウドVectorDB単体よりも高精度で、かつ圧倒的に低レイテンシだ。

インストール・セットアップ

Swift Package Manager での導入

既存のSwiftプロジェクトに追加するには Package.swift に1行追記するだけでよい:

// Package.swift
dependencies: [
    .package(url: "https://github.com/christopherkarani/Wax.git", from: "0.1.8")
]

ターゲットへの依存追加:

.target(
    name: "MyApp",
    dependencies: [
        .product(name: "Wax", package: "Wax")
    ]
)

基本的な使い方(Swift API)

import Wax

// ドキュメントディレクトリにメモリストアを開く
let url = URL.documentsDirectory.appending(path: "agent.wax")

// 1. メモリストアを開く
let memory = try await Memory(at: url)

// 2. 記憶を保存する
try await memory.save("The user is building a habit tracker in SwiftUI.")

// 3. ハイブリッド検索(テキスト+ベクトル)
let results = try await memory.search("What is the user building?")

if let best = results.items.first {
    print("Found: \(best.text)")
    print("Document ID: \(best.metadata["id"] ?? "unknown")")
    // → "Found: The user is building a habit tracker in SwiftUI."
}

try await memory.close()

SwiftUI での統合例

import SwiftUI
import Wax

struct ContentView: View {
    @State private var result = "Searching…"

    var body: some View {
        Text(result)
            .task {
                do {
                    let url = URL.documentsDirectory.appending(path: "agent.wax")
                    let memory = try await Memory(at: url)

                    try await memory.save("ユーザーはSwiftUIでTodoアプリを作っている。")
                    let context = try await memory.search("ユーザーは何を作っているか?")

                    result = context.items.first?.text ?? "Nothing found"
                    try await memory.close()
                } catch {
                    result = "Error: \(error.localizedDescription)"
                }
            }
    }
}

CLIデーモンモード

繰り返しCLI操作でベクトル検索を使う場合、Waxはローカルブローカーを自動起動して再利用する:

# 明示的に長期セッション用デーモンを起動
wax-cli daemon --store-path ~/.wax/memory.wax

JSONラインをstdinに渡すことで操作可能:

{"id":"1","command":"remember","content":"定期的なメンテナンスが必要な作業の記録"}
{"id":"2","command":"search","query":"メンテナンス","mode":"hybrid","topK":3}
{"id":"3","command":"shutdown"}

MCP サーバーのセットアップ(Claude Code連携)

WaxにはModel Context Protocol(MCP)サーバーが同梱されており、Claude Codeと統合することでセッションをまたいだ記憶の永続化が可能になる:

# Claude Code への MCP サーバーインストール
npx -y waxmcp@latest mcp install --scope user

インストールすると、Waxランタイムがローカルディレクトリにステージングされ、wax-mcp バイナリがClaude Codeに登録される。以降は npx を使わずに安定した状態でMCPセッションが動作する。

MCPサーバーの注意点
WaxのMCPサーバーは通常のwaxmcpインストーラーで安定的に動作する。ただし `npx` は初回インストール・ブートストラップのみで使用される。定常MCPセッションはstaged runtimeバイナリを直接呼び出すため、毎回 npx 経由にはならない。

実践的ユースケース

1. AIコーディングアシスタントへの永続メモリ付与

Claude CodeやCursorなどのAIコーディングアシスタントはデフォルトではセッションをまたいで記憶を保持しない。WaxのMCPサーバーを統合すると、プロジェクトの設計決定・バグの経緯・コードの文脈をセッション間で引き継げるようになる。

セッション開始時は handoff_latest でセッションコンテキストをロードし、session_start でセッションIDを取得。作業中は remember で決定事項・発見・ノートを保存し、recall で組み立て済みコンテキストを取得する。

// セッション終了時のハンドオフ例(Swift CLI)
let memory = try await Memory(at: url)
try await memory.save("PR #42のレビューで型キャストのバグを発見。修正コミットは abc123。")
try await memory.close()

2. iOSアプリへのRAG統合

サーバーへの通信なしに、iOSアプリ内でドキュメント検索を実装できる。例えばメモアプリや日記アプリで「先週の○○について書いたことを要約して」といった自然言語検索が可能になる。

// iOSアプリのメモ検索
let memory = try await Memory(at: appSupportURL.appending(path: "notes.wax"))

// 全メモをインデックス化
for note in allNotes {
    try await memory.save(note.content, metadata: ["id": note.id, "date": note.date])
}

// 意味的検索
let results = try await memory.search("先週の会議でメンバーが言っていたこと")

3. git リポジトリのセマンティック検索(WaxRepo)

Wax エコシステムには WaxRepo というTUIツールが付属しており、gitリポジトリの履歴を自然言語で検索できる:

# gitリポジトリのインデックス構築
wax-repo index

# 自然言語でコミット・コードを検索
wax-repo search "WALの実装はどこで行ったか?"

4. 構造化メモリとしての活用(EAV ストレージ)

Waxの内蔵EAV(Entity-Attribute-Value)ストレージを使うと、エンティティと属性の関係を構造化データとして保存・クエリできる。これはRAGの非構造化テキスト検索とは別のレイヤーで動作し、「ユーザー名」「プロジェクト名」「設定値」といった安定したファクトの管理に適している。

// 構造化ファクトの保存(エンティティ操作 - MCP経由)
// entity_upsert, fact_assert, facts_query などのMCPツールを使用

5. ハイブリッド検索モードの使い分け

Wax CLIおよびMCPサーバーでは3種類の検索モードを選択できる:

モード 用途 特徴
hybrid セマンティック+キーワード混在 精度最大、推奨デフォルト
text 決定論的キーワード検索 高速・予測可能
vector 純粋意味的類似度 ファジーマッチング

競合ツールとの比較

WaxはApple Silicon向けに特化しているため、汎用クラウドVectorDBとは土俵が異なる。以下は代表的な選択肢との比較だ:

ツール アーキテクチャ レイテンシ(p95) Apple Silicon最適化 ライセンス 主な用途
Wax シングルファイル、Metal HNSW 6ms ネイティブ Apache 2.0 iOSアプリ・ローカルエージェント
Chroma サーバー型(Python) 50〜200ms なし Apache 2.0 ローカル開発・プロトタイプ
Pinecone クラウドホスト 100〜400ms なし 商用SaaS スケーラブルな本番環境
Weaviate サーバー型 30〜150ms なし BSD マルチモーダル検索
SQLite FTS5 ファイル型、テキストのみ 12ms なし(汎用) Public domain テキスト検索のみ
Qdrant サーバー型(Rust) 10〜50ms なし Apache 2.0 高性能ベクトル検索
Waxが真価を発揮するシーン WaxはiOS・macOSアプリへのRAG統合、AIコーディングアシスタントへの永続メモリ付与、オフライン動作が必要なプライバシー重視アプリケーションで圧倒的な優位性を持つ。Pythonエコシステムや非Appleプラットフォームへの対応は範囲外であり、その点はChromaやQdrantが担う。

クロスプラットフォームなRAGパイプラインを構築する場合はLangChainRAGFlowが選択肢になる。一方でApple デバイスでのオンデバイスAIをターゲットにするなら、Waxはその分野では他に並ぶものがない。

よくある質問

Q:Waxは iOS 以外でも動きますか?

A:macOS でも動作します。トピックに iOSmacOS の両プラットフォームが含まれており、Apple Siliconを搭載したMacでも Metal最適化の恩恵を受けられます。ただしApple プラットフォーム専用設計のため、Linux・Windowsには対応していません。

Q:ベクトルモデルはどれが使われますか?

A:CoreML フレームワーク経由でオンデバイスの埋め込みモデルを使用します。coreml トピックがあることからも明らかで、Apple の Neural Engine を活用した推論が行われます。具体的なモデルはREADMEの詳細ドキュメントで確認できます。

Q:MCPサーバーとWax Swift APIのどちらを使うべきですか?

A:AIコーディングアシスタント(Claude Code、Cursor等)との統合にはMCPサーバーが適しています。Swiftアプリに直接組み込む場合はSwift APIを使います。両者は排他的でなく、MCPサーバーが管理するストアとアプリ内ストアを別々に運用することも可能です。

Q:.wax ファイルのマイグレーションはどうしますか?

A:フレームベース形式のため、バージョン情報がヘッダーに含まれています。マイグレーションツールはリポジトリの Resources/docs/ 以下に資料があります。基本的にはファイルのコピーと wax-cli による操作で対応できます。

Q:大量のドキュメントを扱うとどうなりますか?

A:M3 Max で85.9 docs/s のインジェスト速度を持っており、数万ドキュメント規模でも実用的に動作します。ただし数百万ドキュメントのエンタープライズスケールには、クラウド型ベクトルDBの方が適しています。Waxの設計ターゲットはエージェントのワーキングメモリ(数千〜数万ドキュメント規模)です。

AIコーディングアシスタントへのWaxスキルインストール
Claude Codeにはwaxスキルをインストールすることで、Memory・VideoRAGOrchestrator・PhotoRAGOrchestrator・ハイブリッド検索・構造化メモリ・MCPサーバーに対するコード生成の精度が上がります。claude install-skill https://github.com/christopherkarani/Wax/tree/main/Resources/skills/public/wax で追加できます。

関連記事: RAGとは?仕組み・構築・ベクトルDB選定まで【2026年完全ガイド】

まとめ

Waxは「Apple デバイスでRAGをオンデバイスで動かしたい」というニーズに応えるために設計された、Swift製のシングルファイルメモリレイヤーだ。Metal加速のHNSW + SQLite FTS5によるハイブリッド検索で6ms(p95)という低レイテンシを実現し、サーバーやクラウドへの依存を一切排除している。

iOSアプリ開発者がRAGを自分のアプリに統合したい場合、あるいはClaude CodeなどのAIコーディングアシスタントにセッションをまたいだ永続メモリを持たせたい場合、Waxは現時点で最も完成度の高い選択肢の一つだ。

プラットフォーム制限に注意
WaxはApple プラットフォーム専用です。Python環境・非Appleサーバー・クロスプラットフォームのRAGパイプラインを構築したい場合は、LangChainやChromaなどのPythonエコシステムと組み合わせた設計が必要です。

RAGエンジン全体をLangChainで構築しつつ、iOSフロントエンドのメモリ層にWaxを使うというハイブリッドアーキテクチャも現実的な選択肢として浮上している。Appleエコシステムとオープンソースのインテリジェントエージェントが交差する最前線に、Waxは立っている。

参照ソース