新しい 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 BY、IN (…)—これらはすべて、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
ご不明な点はサポートチームまでお問い合わせください。