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



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

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

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

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

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

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

Discovery  ──►  cdatacli  (JDBC)          → connect, list tables/columns, validate SQL
                    │
                    ▼  (same data model + SQL)
Build      ──►  CData ADO.NET Data Provider → write the .NET app

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

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

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

cdata-cli は言語に依存しないスキルで、実データによる裏付けはここで得られます。一方のビルドスキルは、ADO.NET Data Provider に固有の部分、つまり入手方法と接続方法に焦点を当てています。

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

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

cdata-cli-adonet には、ADO.NET Data Provider の「知らないと気づけない」細かな仕様が組み込まれています。

  • 言語とエディションの対応。C#(および VB.NET、F#)は CData ADO.NET Data Provider を使い、System.Data.CData.<Source> 名前空間で標準的な ADO.NET の型(<Source>Connection<Source>Command<Source>DataAdapter)を利用します。
  • プロバイダーの入手方法。NuGet パッケージ CData.<Source> として提供されており、dotnet add package CData.<Source> で追加します。これは CLI とは別のステップです。cdatacli がダウンロードするのは JDBC の jar だけなので、ADO.NET プロバイダーは NuGet から個別に取得することになります。EntityFrameworkCore 系のバリアントではなく、通常のパッケージを使ってください。
  • ライセンスは別建てで、マシンごとに必要。cdatacli で接続できることが証明しているのは JDBC エディションのライセンスであって、ADO.NET プロバイダーのものではありません。.NET Framework 向け(net40)のビルドは NuGet のリストア時に自動でライセンスが適用されますが、.NET Core / .NET 向け(netstandard2.0)のビルドは、パッケージの tools/ フォルダにある install-license ツールで一度だけアクティベーションが必要です。

結果として、エージェントは適切なパッケージを追加し、アクティベーションを済ませ、すでに検証した SQL をそのまま再利用して、一発で正しい ADO.NET コードを書き上げます。

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

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

「/cdata-cli を使って、Asana のアクティブなプロジェクトにある未完了タスクを表示する C# の TUI を作って。」

エージェントは 2 つのフェーズで対応しました。まず cdata-cli でディスカバリー、続いて cdata-cli-adonet でビルドです。以下に登場するプロジェクト名・タスク名・担当者名は、伏せたうえで一般化しています。

ステップ 1:ディスカバリー — ドライバーを入手する(CLI 経由、JDBC 上で)

Asana のドライバーはまだインストールされていなかったため、エージェントは CLI にドライバーの取得とアクティベーションを実行させ、実データの件数を取得して接続を確認しました。

cdatacli drivers download --artifact-id asana-jdbc
cdatacli drivers activate Asana --name "First Last" --email "[email protected]" --trial
cdatacli query sql --connection asana --sql "SELECT COUNT(*) AS c FROM Projects"
{ "resultset": [ { "c": 103 } ] }

ステップ 2:ディスカバリー — スキーマを調べ、クエリを検証する

エージェントは ProjectsTasks のカラムを確認したうえで、アプリが実際に使うクエリを本番の Asana に対して実行しました。ここでスキーマに関する 2 つの事実が明らかになります。TasksProjectId で絞り込む必要があること(Asana はプロジェクト単位でタスクを返します)、そして未完了か完了かは Tasks.Completed で判別できることです。

cdatacli query sql --connection asana --sql "SELECT Id, Name FROM Projects WHERE Archived = false ORDER BY ModifiedAt DESC LIMIT 3"
cdatacli query sql --connection asana --sql "SELECT Name, AssigneeName, DueOn FROM Tasks WHERE ProjectId = '12002…' AND Completed = false LIMIT 3"
{ "resultset": [
  { "Id": "12002…", "Name": "Content Calendar" },
  { "Id": "12056…", "Name": "Team Comms Hub" },
  { "Id": "12166…", "Name": "Q3 Planning" }
] }
{ "resultset": [
  { "Name": "Update analyst report landing pages", "AssigneeName": "A. Rivera",   "DueOn": "2026-07-29" },
  { "Name": "Refresh partner directory page",       "AssigneeName": "Unassigned",  "DueOn": "2026-08-11" },
  { "Name": "Draft Q3 use-case brief",              "AssigneeName": "J. Chen",     "DueOn": null }
] }
ここが、アーキテクチャ上もっとも重要なポイントです。SQL は JDBC ベースの CLI で検証されました。そして CData のすべてのエディションが 1 つのデータモデルを共有しているため、まったく同じステートメントが、アプリ内の ADO.NET プロバイダーでも変更なしで動作します。

ステップ 3:.NET ビルドスキルへのバトンタッチ

エージェントは cdata-cli-adonet を呼び出し、.NET 側の準備を進めました。NuGet から CData Asana ADO.NET Data Provider(CLI が使う JDBC ドライバーとは別のエディションです)を追加し、TUI 用に Spectre.Console を導入したうえで、プロバイダーのライセンスをアクティベーションしています。

dotnet add package CData.Asana
dotnet add package Spectre.Console
dotnet .\install-license.dll
Installing TRIAL license...
License installation succeeded.
これは別のドライバーエディションです。ADO.NET プロバイダーは、CLI が使っていた JDBC ドライバーではありません。同じドライバーの .NET エディションであり、NuGet から入手し、ライセンスも独立しています。データモデルは同じで、ランタイムだけが異なるということです。

ステップ 4:ビルド — TUI を書く

エージェントは、標準的な ADO.NET の作法(AsanaConnection / AsanaCommand@ 付きの名前付きパラメータ、そして ADO.NET オブジェクトは IDisposable なので using ブロック)でプロバイダーを使い、コンソール TUI を書き上げました。asana 接続にキャッシュされた OAuth トークンもそのまま再利用しています。中心となるのは、検証済みのクエリと Spectre.Console のツリー表示です。

using System.Data.CData.Asana;

using var conn = new AsanaConnection(ConnectionString);
conn.Open();

// active projects
using var projects = new AsanaCommand(
    "SELECT Id, Name FROM Projects WHERE Archived = false ORDER BY ModifiedAt DESC LIMIT 5", conn);

// open tasks for one project — Asana filters Tasks by ProjectId
using var tasks = new AsanaCommand(
    "SELECT Name, AssigneeName, DueOn FROM Tasks WHERE ProjectId = @pid AND Completed = false", conn);
tasks.Parameters.Add(new AsanaParameter("@pid", projectId));

ステップ 5:実際の Asana に対して実行する

dotnet run -- --projects 5
Open tasks in your 5 most active Asana projects
├── Content Calendar  (34 open)
│   ├── 2026-07-25  Update analyst report landing pages   — A. Rivera      (overdue)
│   ├── 2026-07-29  Swap homepage hero copy               — Unassigned     (due soon)
│   └── 2026-08-11  Refresh partner directory page        — J. Chen
├── Team Comms Hub  (28 open)
│   └── 2026-08-02  Publish August newsletter             — A. Rivera
├── Q3 Planning  (15 open)
│   └── 2026-09-11  Finalize use-case brief               — S. Malik
└── Event Planning  (2 open)
    └── 2026-08-20  Confirm booth logistics               — J. Chen

118 open task(s) across 5 active project(s).

期日は色分けされます(期限切れは赤、1 週間以内は黄色)。「Asana の未完了タスクを C# の TUI で見せて」という一言から、スキーマに忠実に動くアプリが出来上がるまで、必要だったのはたった 1 つのプロンプトだけでした。エージェントがまず CLI で実データの裏付けを取り、そのうえで同じデータモデルを ADO.NET プロバイダー経由で使って構築したからです。


今すぐ始める

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

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

.NET 用の CLI スキルだけをダウンロードする:

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

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