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



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

この記事では、CLI を Python アプリケーションの構築に使うケースに絞って見ていきます。AI コーディングエージェントは Python を書くのが得意ですが、そのコードが実際のシステムとやり取りする段になると、とたんにつまずきます。問題はコード生成ではありません。エージェントが、あなたのデータの姿を実際には把握していないことにあります。CData CLI はそこを解決し、専用のスキルが、裏付けの取れた探索の結果を動く Python へと変えてくれます。


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

CLI の根底にある考え方は、CData ドライバー(JDBC、ADO.NET、ODBC、そして Python Connector)が、いずれも同じリレーショナルモデルを同じ SQL 方言で公開している、という点にあります。Salesforce の組織、Jira のプロジェクト、Snowflake のウェアハウス—どれもテーブル、カラム、ストアドプロシージャとして提示され、標準的な SQL-92 スタイルの方言でクエリできます。どのエディション(Java の jar、.NET の DLL、システムの ODBC ドライバー、Python の wheel)を使うかによってプログラムからドライバーへのつなぎ方は変わりますが、テーブル、カラム、SQL は変わりません。

CLI は、この共通モデルを土台にしています。

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

ここから、すっきりとした 2 段階のワークフローが生まれます。

Discovery  -->  cdatacli  (JDBC)              --> connect, list tables/columns, validate SQL
                    |
                    v  (same data model + SQL)
Build      -->  CData Python Connector         --> write the Python app

AI にコードを書かせるうえでの効果は、難しい 2 つの問い—「何をクエリできるのか」と「それをどう書くのか」—が、アプリケーションコードを 1 行も書かないうちに、実際のデータで一度きり答えられることにあります。エージェントはその後、推測したスキーマではなく、自分の目で確かめたスキーマに対して、Python らしいコードを書いていきます。


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

このワークフローは、エージェントのスキル—AI コーディングツールが必要に応じて読み込む指示ファイル—として体系化されています。

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

この役割分担には意味があります。cdata-cli は言語に依存しないスキルで、実データによる裏付けはここで得られます。一方のビルドスキルは、スキーマの探索についてあえて再説明しません。Python Connector に固有の部分、つまり入手方法と接続方法に焦点を当てています。エージェントが放っておくと間違えてしまうのは、まさにこうした細部なのです。


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

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

cdata-cli-python には、Python Connector の「知らないと気づけない」細かな仕様が組み込まれており、エージェントが試行錯誤しながら再発見する手間を省いてくれます。

  • 言語とエディションの対応。Python 3.x は CData Python Connector を使い、cdata.<source>(例:cdata.salesforce)としてインポートします。これはプラットフォーム固有の wheel として提供される、コンパイル済みの DB-API 2.0 モジュールです。
  • コネクタの入手方法。wheel は CData の Python リポジトリ(maven.cdata.com/python)から取得します。これは CLI とは別のステップです。cdatacli がダウンロードするのは JDBC の jar だけなので、Python の wheel は個別に取得することになります。
  • ライセンスは別建てで、マシンごとに必要。cdatacli で接続できることが証明しているのは JDBC エディションのライセンスであって、Python Connector のものではありません。wheel には install-license ツール(Windows では install-license.exe、macOS / Linux では install-license.sh)が同梱されており、マシンごとに一度だけ実行します。

結果として、エージェントは適切な wheel をインストールし、アクティベーションを済ませ、すでに検証した SQL をそのまま再利用して、一発で正しい DB-API コードを書き上げます。


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

ここからは、両方のスキルをインストールした AI コーディングエージェントに 1 つのプロンプトを与えてから完成までの、ワークフロー全体を追っていきます。

「/cdata-cli を使って、私の Gmail に接続する Python の CLI アプリを作って。この 1 週間で私がよくやり取りしていた話題を教えて。」

エージェントは、ここまで見てきたアーキテクチャどおりに 2 つのフェーズで対応しました(まず cdata-cli でディスカバリー、続いて cdata-cli-python でビルド)。各ステップを順に見ていきましょう。

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

エージェントはコードではなく、コマンドラインから着手しました。cdatacli drivers list を実行すると、Gmail ドライバーが存在してアクティベーション済みであること、そしてすぐに使える gmail 接続があることが分かりました。

cdatacli drivers list
{
  "drivers": [
    { "name": "Gmail", "product": "CData JDBC Driver For Gmail 2026", "version": "26.0.9655.0", "activated": true }
  ]
}

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

引き続き CLI 上で、エージェントは Messages テーブルのカラムを確認し、アプリが実際に使うクエリ(直近 1 週間のメッセージの件数取得とサンプリング)を本番の Gmail に対して実行しました。「何をクエリできるのか」「それをどう書くのか」が、実データで答えられるのがこの場面です。

cdatacli query sql --connection gmail --sql "SELECT COUNT(*) AS c FROM Messages WHERE [Date] >= '2026-07-20'"
cdatacli query sql --connection gmail --sql "SELECT Subject, [From], [Date] FROM Messages WHERE [Date] >= '2026-07-20' ORDER BY [Date] DESC LIMIT 10"
{ "resultset": [ { "c": 6 } ] }
{ "resultset": [
  { "Subject": "Justin, review your Google Account settings", "From": "Google &lt;[email protected]>",            "Date": "2026-07-27 09:06:02.0" },
  { "Subject": "Important Updates to Legal Terms for Salesforce APIs", "From": "Salesforce &lt;[email protected]>", "Date": "2026-07-23 09:12:45.0" },
  { "Subject": "How does Agentforce work?",                   "From": "Salesforce Agentforce &lt;[email protected]>", "Date": "2026-07-22 13:26:48.0" },
  { "Subject": "Real ROI for your business starts at Dreamforce.", "From": "Dreamforce &lt;[email protected]>",   "Date": "2026-07-20 13:47:25.0" }
] }

クエリは実際の件名(Google のアカウント通知や Salesforce / Dreamforce からのメール)を返し、アプリが読み取ることになる SubjectDateSnippet の各カラムが確認できました。

ここが、アーキテクチャ上もっとも重要なポイントです。SQL は JDBC ベースの CLI で検証されました。そして CData のすべてのエディションが 1 つのデータモデルを共有しているため、まったく同じステートメントが、アプリ内の Python Connector でも変更なしで動作します。

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

接続とクエリの裏付けが取れたところで、エージェントは cdata-cli-python を呼び出し、Python 側の準備を進めました。CData の Python リポジトリから Gmail Python Connector の wheel を取得し、仮想環境にインストールしています。スキルに含まれるインポートのセルフチェックは、まさに想定どおりの結果を返しました。

python -m pip install cdata_gmail_connector-26.0.9655-cp310-abi3-win_amd64.whl
python -c "import cdata.gmail as m; print('paramstyle:', m.paramstyle, '| apilevel:', m.apilevel)"
Successfully installed cdata-gmail-connector-26.0.9655
paramstyle: qmark | apilevel: 2.0

これは別のドライバーエディションです。Python Connector は、CLI が使っていた JDBC ドライバーではありません。同じドライバーの Python エディションであり、CData の Python リポジトリから入手し、ライセンスも独立しています。データモデルは同じで、ランタイムだけが異なるということです。

ステップ 4:ビルド — CLI アプリを書く

エージェントは gmail_topics.py という小さな CLI を書き上げました。スキルの説明どおり、DB-API 2.0 でコネクタを利用しています—cdata.gmail.connect(...)?(qmark)形式のプレースホルダー、そして try/finally(コネクタは with に対応していません)。ディスカバリーで使った接続をそのまま再利用しているため、サインインし直す必要もありませんでした。中心となるのは、検証済みのクエリと、ちょっとしたキーワード・フレーズの集計処理だけです。

import cdata.gmail as gmail

def fetch_recent_text(days: int) -> list[str]:
    cutoff = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d")
    sql = ("SELECT Subject, Snippet FROM Messages "
           "WHERE [Date] >= ? AND Labels LIKE '%INBOX%' ORDER BY [Date] DESC")
    conn = gmail.connect(CONNECTION_STRING)
    try:
        cur = conn.cursor()
        cur.execute(sql, [cutoff])          # ? qmark params, validated in discovery
        return [" ".join(str(c) for c in row if c) for row in cur.fetchall()]
    finally:
        conn.close()

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

python gmail_topics.py --days 7 --top 10
Analyzed 6 message(s) from the past 7 day(s).

Top 10 keywords
------------------------------
    5  salesforce
    4  dreamforce
    4  register
    3  google
    3  september
    3  important
    3  agent
    3  free
    2  started

Top 10 phrases
------------------------------
    3  dreamforce register
    2  september san
    2  san francisco
    2  register free
    1  google settings
    1  review google
    ...

抽出された話題は、実データに基づいた筋の通ったものになっています。この 1 週間の受信トレイは Salesforce / Dreamforce 関連(登録、9 月、サンフランシスコ)が大半を占め、そこに Google のアカウント通知がいくつか混じっていました。「Gmail につないで、最近どんな話をしていたか教えて」という一言から、実際に動く Python の CLI が出来上がるまで、必要だったのはたった 1 つのプロンプトだけでした。エージェントが Python を 1 行も書かないうちに CLI で実データの裏付けを取り、そのうえで同じデータモデルを Python Connector 経由で使って構築したからです。


今すぐ始める

CData CLI があれば、どんな AI コーディングエージェントも、実際のスキーマに基づいて、データ連携型の Python アプリを構築できるようになります。まずは CLI で接続と SQL を検証し、そのうえで Python スキルを追加すれば、あとはエージェントが Salesforce や Jira など、サポートされている数百のデータソースに対してコードを書いてくれます。

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

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

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

お困りのことがありましたら、サポートチームまでお問い合わせください。