Skip to content

Latest commit

 

History

History
113 lines (82 loc) · 4.83 KB

File metadata and controls

113 lines (82 loc) · 4.83 KB

RDBMS Learning Project

RDBMSをスクラッチから実装する学習プロジェクト(Rust)。

このプロジェクトの進め方

このリポジトリは、人間だけで実装を進める前提ではなく、AIエージェントと協働しながら育てることを前提に構成しています。

AGENTS.mdCLAUDE.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.tomlrust-version = "1.94"rust-toolchain.tomlchannel = "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 共通型定義

ドキュメント入口

使用ライブラリ

  • tokio - 非同期ランタイム
  • hand-written parser を現時点では採用
  • thiserror - エラー型定義
  • anyhow - エラー伝播
  • parking_lot - 高性能ロック