RDBMSをスクラッチから実装する学習プロジェクト(Rust)。
このリポジトリは、人間だけで実装を進める前提ではなく、AIエージェントと協働しながら育てることを前提に構成しています。
AGENTS.md と CLAUDE.md は単なる補助メモではなく、エージェントが作業前に何を読み、どの順で探索し、どのコマンドで検証し、何を完了条件とみなすかを揃えるための入口です。詳細な設計判断や実装計画は docs/ に分離し、入口文書は短く保つ方針を取っています。
この考え方は、近年「ハーネスエンジニアリング」と呼ばれる実践に近いものです。ハーネスエンジニアリングとは、モデルそのものを調整するよりも、エージェントが安定・安全・再現可能に働けるように、リポジトリ構造、文書配置、実行権限、検証ループ、レビュー導線を設計することを重視する考え方です。
本プロジェクトでも、次のような方針でハーネスを整えます。
- 人間向けREADMEと、エージェント向け入口文書を分ける
- 詳細知識は
docs/配下に逃がし、必要な文脈へ段階的に辿れるようにする - 実装前にプランを作り、編集後にテスト・lint・format を確認する
- 失敗時は個別の注意書きを増やすのではなく、入口文書・検証・文書構造を見直す
この運用方針の詳細は docs/harness-engineering.md を参照してください。
RDBMS/
├── crates/ # Workspace members
│ ├── storage/ # ストレージエンジン
│ ├── sql/ # SQLパーサー
│ ├── query/ # クエリエンジン
│ ├── catalog/ # データ辞書
│ └── types/ # 共通型定義
├── src/ # メインバイナリ
├── tests/ # 統合テスト
├── benches/ # ベンチマーク
├── docs/ # ドキュメント
└── .claude/ # AIエージェント設定
# Rust stable を最新化
rustup update
# ビルド
cargo build --workspace
# 実行
cargo run -p rdbms
# テスト
cargo test --workspace
# フォーマット
cargo fmt
# Lint
cargo clippy --workspace
# ドキュメント生成
cargo doc --openこのリポジトリは Cargo.toml の rust-version = "1.94" と
rust-toolchain.toml の channel = "1.94.0" を基準にする。
Rust 本体のアップグレードは、公式の rustup 手順どおり rustup update で行う。
本プロジェクトはCargoワークスペース(マルチクレート構成)を採用しています。
| メリット | 説明 |
|---|---|
| コンパイル時間削減 | 依存ライブラリがワークスペース全体で共有され、1回だけコンパイルされる |
| バージョン統一 | 全クレートで同じCargo.lockを共有、依存関係の衝突を回避 |
| 境界の明確化 | クレート境界でAPIが強制的に分離され、各レイヤーの設計がクリアになる |
| 並列ビルド | クレート単位で並列コンパイルが可能 |
| スケーラビリティ | フラット構成(crates/*)で100万行規模までスケール |
- フラット構成: 全てのクレートを
crates/直下に配置(rust-analyzer流) - 仮想マニフェスト: ルートの
Cargo.tomlは[workspace]のみ - クレート名=ディレクトリ名: ナビゲーションとリネームを容易に
| クレート | 説明 |
|---|---|
storage |
ページ管理、B-tree、バッファプール、WAL |
sql |
SQL字句解析・構文解析 |
query |
クエリプランナー・エグゼキューター |
catalog |
データ辞書・メタデータ |
types |
共通型定義 |
- 全体像と現在地: docs/overview.md
- 設計判断: docs/decisions.md
- 実装計画: docs/plans/
- 詳細アーキテクチャ: docs/architecture.md
- 作業ルール: docs/coding-rules.md
- エージェント運用とハーネス設計: docs/harness-engineering.md
tokio- 非同期ランタイム- hand-written parser を現時点では採用
thiserror- エラー型定義anyhow- エラー伝播parking_lot- 高性能ロック