新しい CData CLI で、業務データにつながる Node.js アプリを構築する



CData CLI は、Claude Code、Cursor、GitHub Copilot、Gemini CLI といった AI コーディングエージェントが、CData ドライバーを通じて業務データにアクセスできるようにするコマンドラインツールです。Salesforce、NetSuite、Jira、Snowflake、SAP をはじめとする数百の SaaS・データベースが、ターミナルからそのままクエリできるようになります。

この記事では、CLI を Node.js アプリケーションの構築に使うケース(さらに ODBC を介して、JVM 以外のあらゆる言語のアプリ)に絞って見ていきます。AI コーディングエージェントは JavaScript を書くのが得意ですが、そのコードが実際のシステムとやり取りする段になると、とたんにつまずきます。問題はコード生成ではありません。エージェントが、あなたのデータの姿を実際には把握していないことにあります。CData CLI は、そこを解決します。


アーキテクチャ:1 つのデータモデル、複数のドライバー

CData ドライバー(JDBC、ADO.NET、ODBC、そして Python Connector)は、いずれも同じリレーショナルモデルを、同じ SQL 方言で公開します。Salesforce の組織も Jira のプロジェクトも、テーブル、カラム、ストアドプロシージャとして提示されます。どのエディションを使うかによってプログラムからドライバーへのつなぎ方は変わりますが、テーブル、カラム、SQL は変わりません。

  • cdatacli は、JDBC ドライバー上で動作する Java 製のツールです(Java 17 以降が必要)。これを使って接続を作成し、テーブルやカラムを一覧表示し、実際のデータソースに対して SQL を実行できます。
  • モデルが共通であるため、CLI で検証した内容は、アプリがどのエディションを使っていてもそのまま通用します。コマンドラインで確認した SELECT ... FROM Opportunity は、Node.js アプリが ODBC ドライバー経由で実行するステートメントとまったく同じものです。

2 段階のワークフローは次のとおりです。

Discovery  ──►  cdatacli  (JDBC)     → connect, list tables/columns, validate SQL
                    │
                    ▼  (same data model + SQL)
Build      ──►  CData ODBC Driver     → write the Node.js app

ワークフローからスキルへ

スキルとは、AI コーディングツールが必要に応じて読み込む指示ファイルのことです。

  • cdata-cli:ディスカバリー(探索)用のスキルです。データソースへの接続、スキーマの探索、SQL の検証、JDBC ドライバーのダウンロードとアクティベーションを担当します。
  • cdata-cli-odbc:ODBC のビルド用スキルです。ディスカバリーが終わり、いよいよ Node.js を書く段階になったら、こちらが引き継ぎます。

cdata-cli は言語に依存しないスキルで、実データによる裏付けはここで得られます。一方のビルドスキルは、ODBC ドライバーに固有の部分、つまりインストール状況の確認と接続文字列の組み立てに焦点を当てています。


ODBC スキルが引き受けてくれること

npx skills add CDataSoftware/cli-skills --skill cdata-cli-odbc

cdata-cli-odbc には、ODBC ドライバーの「知らないと気づけない」細かな仕様が組み込まれています。

  • 言語とエディションの対応。Node.js や、Go、Ruby、Rust といった JVM 以外の言語は、その言語の ODBC バインディングを通じて CData ODBC Driver を利用します。Node.js の場合は odbc npm パッケージがそれにあたります。専用の CData エディションがないランタイムにとって、ODBC は言語を問わず使える受け皿となります。
  • ドライバーの入手方法。他のエディションとは異なり、ODBC ドライバーは OS の ODBC ドライバーマネージャーに登録されるシステムインストール型のドライバーです。パッケージリポジトリから取得するのではなく、CData の ODBC セットアップパッケージからインストールします。cdatacli はこのインストールには一切関与しません。また、ビット数(32 ビット/64 ビット)はアプリのプロセスと一致している必要があります。
  • ライセンスは別建てで、マシンごとに必要。cdatacli で接続できることが証明しているのは JDBC エディションのライセンスであって、ODBC ドライバーのものではありません。ODBC ドライバーのライセンスはインストールの一部として(トライアルまたはプロダクトキーで)適用され、他のエディションとは独立しています。

結果として、エージェントは適切なドライバーがインストールされていることを確認し、DSN または DSN レスの接続文字列でそこを指し示し、すでに検証した SQL をそのまま再利用して、一発で正しい ODBC コードを書き上げます。


実践例:本物の Node.js アプリを作ってみる

両方のスキルをインストールした AI コーディングエージェントに、次のプロンプトを与えました。

「/cdata-cli を使って、Salesforce のサンドボックスに接続する Node.js の GUI を作って。上位 10 件のアカウントと、その他の重要な Salesforce データを組み合わせて表示して。」

エージェントは 2 つのフェーズで対応しました。まず cdata-cli でディスカバリー、続いて cdata-cli-odbc でビルドです。(以下のアカウント名は一般化しています。)

ステップ 1 — ディスカバリー:接続を確認する(CLI 経由、JDBC 上で)

エージェントは Salesforce ドライバーと既存のサンドボックス接続を確認したうえで、実データの件数を取得しました。

cdatacli drivers list
cdatacli query sql --connection salesforce-sbx --sql "SELECT COUNT(*) AS c FROM Account"
{ "resultset": [ { "c": 10052 } ] }

ステップ 2 — ディスカバリー:「組み合わせる」クエリを検証する

「上位 10 件のアカウントと、その他の重要なデータを組み合わせる」とは、3 つの Salesforce オブジェクトを結合するということです。エージェントはそれぞれのクエリを組み立て、CLI で実データに対して検証していきました。まず未クローズの Opportunity のパイプライン金額でアカウントをランク付けし、そこに Account のプロフィール情報と Contact の件数を肉付けしていきます。

cdatacli query sql --connection salesforce-sbx --sql "SELECT AccountId, COUNT(*) AS OpenOpps, SUM(Amount) AS Pipeline FROM Opportunity WHERE IsClosed = false AND Amount > 0 GROUP BY AccountId ORDER BY SUM(Amount) DESC LIMIT 10"
cdatacli query sql --connection salesforce-sbx --sql "SELECT Id, Name, Industry, AnnualRevenue FROM Account WHERE Id IN (…)"
cdatacli query sql --connection salesforce-sbx --sql "SELECT AccountId, COUNT(*) AS Contacts FROM Contact WHERE AccountId IN (…) GROUP BY AccountId"
{ "resultset": [
  { "AccountId": "001TV…", "OpenOpps": 1, "Pipeline": 299960.00 },
  { "AccountId": "001TV…", "OpenOpps": 1, "Pipeline": 185621.73 },
  { "AccountId": "001TV…", "OpenOpps": 2, "Pipeline": 115491.35 }
] }
ここが、アーキテクチャ上もっとも重要なポイントです。集計関数、GROUP BYIN (…)—これらはすべて、JDBC ベースの CLI で検証されています。CData のすべてのエディションが 1 つのデータモデルを共有しているため、まったく同じステートメントが、アプリ内の ODBC でも変更なしで動作します。

ステップ 3 — ODBC ビルドスキルへのバトンタッチ

cdata-cli-odbc は、CData Salesforce ODBC Driver がインストールされていること(パッケージリポジトリからのダウンロードではなく、システムドライバーです)、そして Salesforce SBX という DSN がすでに存在し、サンドボックスの OAuth トークンを再利用できることを確認しました。あとは Node.js 側に必要なパッケージを 2 つ入れるだけです。

npm install express odbc
これは別のドライバーエディションです。ODBC は、CLI が使っていた JDBC ドライバーではありません。アプリが DSN を通じて利用する、システムインストール型のドライバーです。odbc npm パッケージは言語バインディングにすぎず、接続情報は Salesforce SBX という DSN が保持しているため、コード内にシークレットが残ることはありません。

ステップ 4 — ビルド:データを組み合わせる

エージェントは、検証済みのクエリを odbc パッケージ経由で実行し(? のプレースホルダーとプールされた接続を使用)、結果をアカウントごとに 1 行へとマージする Express アプリを書き上げました。

import odbc from "odbc";
const pool = await odbc.pool("DSN=Salesforce SBX");

// top 10 accounts by open pipeline
const opps = await pool.query(
  "SELECT AccountId, COUNT(*) AS OpenOpps, SUM(Amount) AS Pipeline FROM Opportunity " +
  "WHERE IsClosed = false AND Amount > 0 GROUP BY AccountId ORDER BY SUM(Amount) DESC LIMIT 10");

const ids = opps.map(o => o.AccountId);
const ph  = ids.map(() => "?").join(", ");
const accounts = await pool.query(`SELECT Id, Name, Industry, AnnualRevenue FROM Account WHERE Id IN (${ph})`, ids);
const contacts = await pool.query(`SELECT AccountId, COUNT(*) AS Contacts FROM Contact WHERE AccountId IN (${ph}) GROUP BY AccountId`, ids);
// merge opps + accounts + contacts into one row per account, served at /api/dashboard

ステップ 5 — 実行:ダッシュボードを見る

npm start を実行してブラウザーを開くと、GUI に組み合わせ済みのビューが表示されます。パイプライン金額の大きい順に並んだアカウントに、それぞれ別の Salesforce オブジェクトから取得したプロフィール情報とコンタクト件数が添えられています。

Top 10 Accounts by Open Pipeline                    [Salesforce sandbox · ODBC]

 #  Account              Industry                 Annual Rev   Open Opps   Pipeline   Contacts
 1  Account A            Insurance                     $42M         1       $300K          0
 2  Account B            IT & Services              $12,871M         1       $186K          1
 3  Account C            Industrial Eng.               $900M         1       $125K          0
 4  Account D            Industrial Cong.               $50M         1       $120K          2
 5  Account E            Internet Software           $2,100M         2       $115K          4
 6  Account F            IT Services                   $378M         1       $112K         12
 7  Account G            IT & Services                   $7M         1       $111K          4
 8  Account H            Media                       $1,410M         1       $100K          3
 9  Account I            Utilities                   $1,234M         1        $85K          6
10  Account J            IT Services                     $3M         1        $80K          1

どの行も、3 つの Salesforce オブジェクト(Opportunity、Account、Contact)を縫い合わせたものですが、アプリはその構造を推測する必要が一度もありませんでした。「上位のアカウントと、その他の重要な Salesforce データを組み合わせて」という一言から、実際に動く Node.js のダッシュボードが出来上がるまで、必要だったのはたった 1 つのプロンプトだけでした。エージェントがまず CLI で実データの裏付けを取り、そのうえで同じデータモデルを ODBC 経由で使って構築したからです。


今すぐ始める

CData CLI があれば、どんな AI コーディングエージェントも、実際のスキーマに基づいて、データ連携型の Node.js アプリを構築できるようになります。

CLI をダウンロードする

macOS:

curl -fsSL https://downloads.cdata.com/cdatabuilds/builds/free/cdatacli/install-cdatacli-macos.sh | bash

Windows:

irm https://downloads.cdata.com/cdatabuilds/builds/free/cdatacli/install-cdatacli-windows.ps1 | iex

Linux:

curl -fsSL https://downloads.cdata.com/cdatabuilds/builds/free/cdatacli/install-cdatacli-linux.sh | bash

CLI のスキルをすべてダウンロードする:

npx skills add CDataSoftware/cli-skills

ODBC 用の CLI スキルをダウンロードする:

npx skills add CDataSoftware/cli-skills --skill cdata-cli-odbc

ご不明な点はサポートチームまでお問い合わせください。