このプロジェクトについて
jetdbは、Microsoft Accessデータベースファイル(.mdbおよび.accdb)を読み取るための純粋なRustライブラリおよびコマンドラインツールです。C/C++依存関係やFFIがなく、macOS、Windows、Linux、さらにはWebAssembly(ブラウザターゲットを含む)でポータブルに動作します。Access 97(Jet3)からAccess 2019(ACE17)までをサポートします。
## インストール
- **CLIツール**: `cargo install jetdb-cli`
- **ライブラリ**: Cargo.tomlに`jetdb = "0.2"`を追加します。
## CLI使用例
- `jetdb --password secret tables protected.accdb` – パスワード保護されたファイルを開く
- `jetdb ver database.mdb` – データベースエンジンのバージョンを表示
- `jetdb tables database.mdb` – テーブルを一覧表示
- `jetdb schema database.mdb` – テーブルスキーマ(列、インデックス、リレーションシップ)を表示
- `jetdb schema database.mdb --ddl sqlite` – SQLite、PostgreSQL、MySQL、またはAccess用のDDLを生成
- `jetdb export database.mdb Table1` – テーブルデータをCSVとしてエクスポート
- `jetdb queries list database.mdb` – 保存されたクエリを一覧表示
- `jetdb queries show database.mdb SelectQuery` – 保存されたクエリのSQLを表示
- `jetdb vba list database.mdb` – VBAモジュールを一覧表示
- `jetdb vba show database.mdb Module1` – VBAソースコードを表示
- `jetdb macro list database.accdb` – 名前付きマクロを一覧表示
- `jetdb macro show database.accdb AutoExec` – マクロをテキストとして表示
- `jetdb prop database.mdb Table1` – オブジェクトプロパティを表示
## ライブラリの使用
```rust
use jetdb::{PageReader, read_catalog, read_table_def, read_table_rows};
fn main() -> Result<(), jetdb::FileError> {
let mut reader = PageReader::open("database.mdb")?;
let catalog = read_catalog(&mut reader)?;
for entry in &catalog {
println!("{}", entry.name);
}
let entry = &catalog[0];
let table_def = read_table_def(&mut reader, &entry.name, entry.table_page)?;
let result = read_table_rows(&mut reader, &table_def)?;
for row in &result.rows {
println!("{:?}", row);
}
Ok(())
}
```
## サポートされているバージョン
| エンジン | Accessバージョン | ファイル形式 |
|--------|---------------|-------------|
| Jet3 | Access 97 | .mdb |
| Jet4 | Access 2000/2003 | .mdb |
| ACE12 | Access 2007 | .accdb |
| ACE14 | Access 2010 | .accdb |
| ACE15 | Access 2013 | .accdb |
| ACE16 | Access 2016 | .accdb |
| ACE17 | Access 2019 | .accdb |
## 機能
- テーブルメタデータ(列、インデックス、リレーションシップ)の読み取り
- Rustの型マッピング(Text、Long、Double、Timestamp、Money、Memo、OLE、GUIDなど)による行データの読み取り
- SQLite、PostgreSQL、MySQL、およびAccess SQL用のDDL生成
- 保存されたクエリからのSQL復元
- VBAモジュールのソースコード抽出
- オブジェクトプロパティ(LvProp)の読み取り
- RC4暗号化データベースおよびパスワード保護された.accdbファイル(Agile、RC4 CryptoAPI、Standard/NonStandard AES)の復号
- Jet3(Latin-1)およびJet4+(UTF-16LE、圧縮テキスト)エンコーディングの処理
- `PageReader::open_reader`を使用してメモリ内のバイトからデータベースを開くことで、WebAssembly(ブラウザターゲット`wasm32-unknown-unknown`を含む)上で実行
## 制限事項
- 読み取り専用(書き込みサポートなし)
- インデックスベースの検索なし(フルテーブルスキャンのみ)
- すべての行をメモリに読み込むため、非常に大きなテーブルではメモリ使用量に注意
- パスワード保護された.accdbファイルには`PageReader::open_with_password`が必要(Agile、RC4 CryptoAPI、Standard/NonStandard AES)
- レプリケーションデータベース(.mda)は未テスト
## AIエージェント統合
[agent-skills](https://github.com/dominion525/agent-skills)リポジトリを介してClaude Code Skillとして利用可能です。Claude Code Plugin Marketplaceからインストールします:
```
/plugin marketplace add dominion525/agent-skills
/plugin install jetdb-cli@dominion525-skills
```
またはVercel skills CLI経由:
```bash
npx skills add dominion525/agent-skills --skill jetdb-cli -a claude-code
```
## 謝辞
- [mdbtools](https://github.com/mdbtools/mdbtools) – HACKING.mdはMDB/ACCDBファイル形式を理解するための貴重な参考資料でした
- [Jackcess](https://github.com/spannm/jackcess)(Apache License 2.0) – ほとんどのテスト用.mdb/.accdbファイルはこのプロジェクトから提供されています
- [jackcessencrypt](https://github.com/jahlborn/jackcessencrypt)(Apache License 2.0) – 暗号化関連のテストファイル
- [MS-OFFCRYPTO](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offcrypto/) – Officeドキュメント暗号化に関するMicrosoftの仕様
## ライセンス
MIT OR Apache-2.0
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.