Access 97〜Microsoft 365 に対応
.mdb / .accdb を、
Access 無しで丸ごと読める
jetdb は Microsoft Access のデータベース(.mdb / .accdb)を読む CLI ツール・Rust のライブラリ・npm のパッケージです。テーブルのデータだけでなく、クエリ・VBA・マクロ・フォームまで取り出せます。macOS・Linux・Windows で動きます。
# テーブルの一覧
$ jetdb tables jetdb-sample.accdb
# VBA のソースを取り出す
$ jetdb vba show jetdb-sample.accdb modBilling
# PostgreSQL 向けの DDL を作る
$ jetdb schema jetdb-sample.accdb --ddl postgres
Access も ODBC ドライバも要りません
Rust だけで書かれていて、C のライブラリにも依存しません。手元に .mdb / .accdb しか無くても、そのまま開けます。CLI のほか、Rust のライブラリとしても使えます。
macOS・Linux・Windows
Windows や Access のライセンスが無い環境でも動きます。
Access 97〜Microsoft 365
Jet3(Access 97)から ACE17(Access 2019)まで、.mdb と .accdb の両方を読めます。Microsoft 365 の Access で作ったファイルも読めます。
パスワード付きのファイル
パスワード付きの .accdb(Agile、RC4 CryptoAPI、Standard・NonStandard
AES)も、--password を付けるだけで開けます。
元のファイルは書き換えません
読み取り専用で開き、ロックファイル(.ldb / .laccdb)も作りません。人から渡されたファイルも、壊す心配をせずに調べられます。
データだけでなく、アプリごと読める
テーブルを抜き出すだけでなく、Access アプリを作り直すときに要るものまで取り出せます。
※ただし、Access 97 のフォーム/レポートと VBA は取得できません。印刷の設定はバイト列のまま出し、中身は読み解きません。
-
01テーブルのデータ
CSV で書き出します。
jetdb export jetdb-sample.accdb tblOrders出力を見る
OrderID,CustomerID,ProductID,Quantity,OrderDate,Shipped 1,1,1,3,2026-07-03,1 2,2,2,10,2026-07-18,1 3,1,3,1,2026-08-02,1 4,3,1,2,2026-08-25,0 5,2,1,5,2026-09-09,0 -
02スキーマ
列・索引・リレーションシップを表示します。
jetdb schema jetdb-sample.accdb -T tblOrders出力を見る
Table: tblOrders Columns: OrderID Long AUTO CustomerID Long NOT NULL ProductID Long NOT NULL Quantity Int NOT NULL OrderDate Timestamp NOT NULL Shipped Boolean Indexes: pkOrders [OrderID ASC] UNIQUE REQUIRED Relationships: fkOrdersCustomers tblOrders.CustomerID -> tblCustomers.CustomerID fkOrdersProducts tblOrders.ProductID -> tblProducts.ProductID -
03DDL
SQLite・PostgreSQL・MySQL・Access SQL 向けに作ります。
jetdb schema jetdb-sample.accdb -T tblOrders --ddl postgres出力を見る
CREATE TABLE "tblOrders" ( "OrderID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, "CustomerID" INTEGER NOT NULL, "ProductID" INTEGER NOT NULL, "Quantity" SMALLINT NOT NULL, "OrderDate" TIMESTAMP WITHOUT TIME ZONE NOT NULL, "Shipped" BOOLEAN, PRIMARY KEY ("OrderID") ); ALTER TABLE "tblOrders" ADD CONSTRAINT "fkOrdersCustomers" FOREIGN KEY ("CustomerID") REFERENCES "tblCustomers" ("CustomerID"); ALTER TABLE "tblOrders" ADD CONSTRAINT "fkOrdersProducts" FOREIGN KEY ("ProductID") REFERENCES "tblProducts" ("ProductID"); -
04クエリの SQL
保存済みクエリの SQL を復元します。
jetdb queries show jetdb-sample.accdb qryMonthlySales出力を見る
SELECT Format(tblOrders.OrderDate, 'yyyy-mm') AS SalesMonth, tblCustomers.CustomerName, Sum(tblOrders.Quantity * tblProducts.UnitPrice) AS Total FROM (tblOrders INNER JOIN tblCustomers ON tblOrders.CustomerID = tblCustomers.CustomerID) INNER JOIN tblProducts ON tblOrders.ProductID = tblProducts.ProductID GROUP BY Format(tblOrders.OrderDate, 'yyyy-mm'), tblCustomers.CustomerName ORDER BY Format(tblOrders.OrderDate, 'yyyy-mm'), tblCustomers.CustomerName; -
05VBA
標準モジュール・クラスモジュール・フォーム/レポートのモジュールのソースを取り出します。
jetdb vba show jetdb-sample.accdb modBilling出力を見る
Attribute VB_Name = "modBilling" Option Compare Database Option Explicit Public Const TAX_RATE As Double = 0.1 ' Returns the amount of one order line, tax included. Public Function LineTotal(ByVal Quantity As Long, ByVal unitPrice As Currency) As Currency LineTotal = Quantity * unitPrice * (1 + TAX_RATE) End Function ' Returns the amount of an order, tax included, or 0 if there is no such order. Public Function OrderTotal(ByVal OrderID As Long) As Currency Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset( _ "SELECT o.Quantity, p.UnitPrice FROM tblOrders AS o INNER JOIN tblProducts AS p " & _ … -
06マクロ
名前付きマクロ、フォーム/レポートの埋め込みマクロ、テーブルのデータマクロを、SaveAsText 形式のテキストで表示します。下のコマンドは名前付きマクロのもので、フォーム/レポートは
macro embedded、テーブルはmacro dataで見ます。jetdb macro show jetdb-sample.accdb mcrOpenOrders出力を見る
Version =196611 PublishOption =1 ColumnsShown =0 Begin Comment ="_AXL:<?xml version='1.0' encoding='UTF-16' standalone='no'?><UserInterfaceMacro " "xmlns='http://schemas.microsoft.com/office/accessservices/2009/11/application'><" "Statements><Action Name='OpenForm'><Argument " End Begin Comment ="_AXL:Name='FormName'>frmOrders</Argument></Action><Action Name='MessageBox'><Arg" "ument Name='Message'>Showing the orders.</Argument><Argument Name='Type'>Informa" "tion</Argument><Argument Name='Title'>Sales</" End Begin Comment ="_AXL:Argument></Action></Statements></UserInterfaceMacro>" End -
07フォーム/レポート
フォームやレポートと、そのコントロールのプロパティを表示します。
jetdb form props jetdb-sample.accdb frmOrders出力を見る
Form: frmOrders Form Properties: … RecordSource tblOrders Caption Orders … … Control: txtQuantity (TextBox) OverlapFlags 85 Left 1800 Top 1560 Width 2400 Height 300 TabIndex 3 Name txtQuantity ControlSource Quantity StatusBarText Number of units … … Control: btnShowTotal (CommandButton) OverlapFlags 85 Left 1800 Top 2940 Width 2400 Height 400 TabIndex 6 Name btnShowTotal Caption Show total OnClick [Event Procedure] … -
08プロパティ
テーブルやクエリなどのオブジェクトのプロパティを表示します。
jetdb prop jetdb-sample.accdb tblProducts出力を見る
Object: tblProducts Table Properties: Description "Products for sale" Column: ProductName Required yes Column: UnitPrice Description "Price per unit, tax excluded" Column: Discontinued Description "No longer sold"
ほかのツールとの比較
| 機能 | jetdb0.4.0 | MDB Tools1.0.1 | Jackcess5.0.3 / フォーク 5.1.7 | mdb-reader3.2.0 |
|---|---|---|---|---|
| 実装言語 | Rust | C | Java | TypeScript |
| ライセンス | MIT または Apache-2.0 | LGPL(ライブラリ)、GPL(CLI) | Apache-2.0 | MIT |
| .mdb と .accdb の両方 | ○ | ○ | ○ | ○ |
| VBA の取り出し | ○ | × | × | × |
| 名前付きマクロ | ○ | × | × | × |
| 埋め込みマクロ(フォーム/レポート) | ○ | × | × | × |
| データマクロ(テーブル) | ○ | × | × | × |
| フォーム/レポートの定義 | ○ | × | × | × |
| クエリの SQL | ○ | △ | ○ | × |
| DDL 生成 | ○ | ○ | × | × |
| 添付ファイル列の中身 | ○ | × | ○ | ○ |
| パスワード付きの .accdb | ○ | × | △ | △ |
| CLI | ○ | ○ | × | × |
| ブラウザで動く | ○ | × | × | ○ |
| 書き込み | × | △ | ○ | × |
○ 対応 △ 一部対応・条件付き × 非対応
○ は Access 2000 以降で使えるもの。Access 97 だけの例外は注記に書きます。
- MDB Tools のクエリの SQL は、SELECT だけを組み立て直します(JOIN・GROUP BY は出ません)。
- Jackcess のパスワード付きの .accdb は、別のライブラリ Jackcess Encrypt を足すと開けます。この表の項目では、Jackcess の元の版とフォークの結果は同じです。
- MDB Tools のライセンスは、ライブラリが LGPL-2.0 以降、CLI が GPL-2.0 以降です。
- mdb-reader のパスワード付きの .accdb は、Standard AES の暗号化に対応していません。
- jetdb のフォーム/レポートの定義と VBA は、Access 97 のものは読めません。
- MDB Tools の書き込みは、ライブラリの API で行を追加・更新できるだけです。
- Jackcess の書き込みは Access 2000 以降で、Access 97 は読み取りだけです。
調査日: 2026-10-11(各ツールの最新のリリース)
AI エージェントにそのまま渡せる
jetdb の CLI を入れたうえで jetdb の Skill を入れると、AI エージェントが jetdb を使って Access のファイルを読めるようになります。「この .accdb を PostgreSQL に移したい」と頼めば、テーブルの定義からクエリ・VBA・フォームまで読んで、移行の作業を進められます。
Claude Code
Plugin Marketplace から入れます。
/plugin marketplace add dominion525/agent-skills
/plugin install jetdb-cli@dominion525-skills
ほかのエージェント
skills CLI で入れます。Codex・Cursor・OpenCode などに対応していて、入れ先は実行したときに選べます。
npx skills add dominion525/agent-skills --skill jetdb-cli
Skill が無くても、CLI の作りが AI に向いています
- 素直なテキスト出力: CSV、SQL、VBA のソースなど、そのまま読めて加工しやすい形で出します。
- いつも同じ順に並ぶ: 一覧は名前の順に並びます。同じファイルからは同じ結果が出ます。
-
空ならエラーにしない:
テーブルやクエリが無いときは、空の出力で正常に終わります。エラーは
jetdb:で始まる 1 行で標準エラーに出します。
ブラウザでも動きます
WebAssembly 版(npm パッケージ jetdb-wasm)を使うと、ブラウザや Node.js からも、CLI と同じものを読めます。テーブル・クエリ・VBA・マクロ・フォーム・プロパティ・DDL まで扱え、パスワード付きのファイルも開けます。ファイルはブラウザの外に出ません。使い方はJavaScript の API の説明にあります。
インストール
CLI を入れる
ビルド済みバイナリ
GitHub のリリースから、使う環境のファイルを落として展開してください。
Homebrew
brew install dominion525/tap/jetdb
cargo
Rust の環境があれば、crates.io から入れられます。
cargo install jetdb-cli
ライブラリとして使う
JavaScript(ブラウザ・Node.js)
WebAssembly 版を npm から入れます。使い方はJavaScript の API の説明にあります。
npm install jetdb-wasm