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

ライブラリとして使う

Rust

crates.io から追加します。使い方はライブラリのドキュメントと docs.rs にあります。

cargo add jetdb

JavaScript(ブラウザ・Node.js)

WebAssembly 版を npm から入れます。使い方はJavaScript の API の説明にあります。

npm install jetdb-wasm