はじめに
Databricksの Genie Code をローカルのターミナルから使える、Genie Code CLI がベータで公開されました。
ワークスペースの中で使ってきた Genie Code が、手元のターミナルで動くコーディングエージェントとして使えるようになります。ローカルのファイルを読み書きでき、コマンドを実行でき、Databricksにも自分の権限でアクセスできます。
今回は、サンプルデータを手元にCSVで落とし、それをUnity Catalogのテーブルとして作り直すところまで試しました。Claude Code のようなコーディングエージェントに頼む感覚で、Databricks の作業がどこまで進むかを書いていきます。
Genie Code CLIとは
ドキュメントでは「Databricksでのデータおよび AI 作業向けに調整された」ターミナルのコーディングエージェントと説明されています。押さえておきたい点は次のとおりです。
- ベータ版で、機能やコマンドは頻繁に変わる可能性がある
- モデルへのアクセスは Unity Gateway を通じて提供される。自分でモデルのサブスクリプションを用意する必要はない
- ベータ期間中のモデルは GPT 5.6。モデルの選択は Databricks が管理していて、ユーザーは選べない
- 使用量は Unity Gateway でモデルを直接使った場合と同じ扱いで請求され、Unity Gateway の使用量に表示される
もう一つ大事なのが、ワークスペース内の Genie Code との関係です。Genie Code CLI はローカルのターミナル作業向けに作られた別のエクスペリエンスで、ツール、スキル、指示を独自に持っています。現時点ではワークスペース内の Genie Code とこれらを共有しないので、ワークスペース側で設定したスキルや指示は CLI には引き継がれません。
インストールと起動
前提条件
- Unity Gateway がサポートされているリージョンのワークスペース
- Unity Catalog が有効になっていること
- Databricks CLI v1.0.0 以上が別途インストールされていること
Databricks CLI が必要な理由は、後で実行の中身を見ると分かります。
インストール
macOS / Linux ではインストールスクリプトを実行します。
curl -fsSL https://github.com/databricks/genie-code-cli/releases/latest/download/install.sh | bash
Windows では PowerShell から実行します。
powershell -ExecutionPolicy Bypass -c "irm https://github.com/databricks/genie-code-cli/releases/latest/download/install.ps1 | iex"
GitHub のリリースには、OS と CPU ごとのビルド済みパッケージが並んでいます。uv や pip で入れる形ではないので、Python 環境の準備は要りません。今回試したのは v0.1.0-beta.2 です。
起動
Genie Code CLI はカレントディレクトリのファイルを読み書きします。試すときは専用のディレクトリを作ってから起動すると安心です。
mkdir genie-cli-test && cd genie-cli-test
genie
最初に、Databricks CLI のプロファイルを選ぶ画面が出ます。
画面には「Select a profile with Unity Gateway model access」とあります。ここで選ぶのは、モデルを呼ぶための Unity Gateway に使うワークスペースです。カッコ書きで「Genie Code can still do work outside this workspace」とも書かれていて、作業対象をこのワークスペースに限定するものではないことが分かります。
続いて、カレントディレクトリを信頼するかを聞かれます。
信頼すると、そのディレクトリにあるプロジェクト固有の設定、フック、実行ポリシーが読み込まれます。信頼していない中身を扱うとプロンプトインジェクションのリスクが上がる、という注意書きも出ます。中身を把握しているディレクトリで起動するのが前提です。
起動すると、バージョンと現在の設定が表示されます。
-
Effort: Defaultは推論の深さの設定で、/effortで変えられる -
Permissions: Workspace (Ask for approval)は権限の設定。Ask for approvalとあるとおり、コマンドを実行する前に承認を求められる
既定ではコマンドの実行前に承認を求められるので、何が実行されるかを一つずつ確認しながら進められます。
サンプルデータをCSVで取得する
最初の依頼は、読むだけで済むものにしました。
samples.nyctaxi.trips から 100 件取得して、このディレクトリに trips.csv として保存してください
Genie はまず databricks-core と databricks-data-discovery という2つのスキルの SKILL.md を読みにいきました。CLI 側にあらかじめ Databricks 向けのスキルが用意されていて、依頼の内容に応じて読み込まれるようです。
ローカルとDatabricksをまたぐ作業が1つのコマンドになる
次に、実行してよいかの確認が出ます。
Databricks からデータを読み、ローカルにファイルとして書き出す。この2つの作業が、1つのコマンドにまとまっています。
databricks experimental aitools tools query --output csv "SELECT * FROM samples.nyctaxi.trips LIMIT 100" --profile DEFAULT > trips.csv && awk 'END {print NR}' trips.csv
Databricks の操作には、Databricks CLI の databricks experimental aitools tools query (SQL ウェアハウスで SQL を実行するコマンド) が使われています。前提条件に Databricks CLI が入っているのはこのためだと思われます。認証も CLI のプロファイルをそのまま使うので、普段 databricks コマンドで使っている権限の範囲で操作されます。
承認画面には次の項目が並びます。
-
Environment: localで、どこで実行されるか -
Reasonで、なぜこのコマンドを実行するのか (日本語で依頼すると日本語で出ます) - 実行するコマンドそのもの
選択肢は「1. Yes, proceed」「2. Yes, and don't ask again for commands that start with ...」「3. No, and tell Genie what to do differently」の3つです。2を選ぶと、同じコマンドで始まるものは以後確認なしで実行されます。
結果の確認まで自分でやる
コマンドの末尾に awk 'END {print NR}' trips.csv が付いている点にも注目です。保存したファイルの行数を数えて、取得できたかを確かめています。
101
ヘッダー1行とデータ100行で101行。Genie からも「100件を取得し、trips.csv に保存しました (ヘッダー含め101行)」と報告がありました。
CSVをUnity Catalogのテーブルにする
次は書き込みです。書き込み先は自分のカタログを明示しました。
trips.csv を takaakiyayoi_catalog.default.genie_cli_test というテーブルとして作成してください
今度は databricks-unity-catalog スキルの SKILL.md と、trips.csv そのものを読みにいきます。
元テーブルの型を確認してから作る
Genie は、テーブルを作る前に元テーブルの定義を確認しました。
databricks experimental aitools tools query --output csv "DESCRIBE samples.nyctaxi.trips" --profile DEFAULT
CSV にした時点で、列の型の情報は失われています。そのまま取り込むと、日時の列も数値の列も文字列として扱われかねません。元テーブルの型を確認しておけば、テーブルを同じ型で作り直せます。指示していないのにこの手順を挟んできたのは好印象でした。
CREATE TABLE AS SELECT で作成する
テーブルの作成は、Python で SQL を組み立てて実行する形でした。
import csv, pathlib
rows=list(csv.DictReader(open("trips.csv", newline="")))
def q(v): return "NULL" if v == "" else "\047" + v.replace("\047", "\047\047") + "\047"
vals=",\n".join("(" + ",".join(q(row[k]) for k in row) + ")" for row in rows)
sql="""CREATE OR REPLACE TABLE takaakiyayoi_catalog.default.genie_cli_test AS
SELECT
CAST(tpep_pickup_datetime AS TIMESTAMP) AS tpep_pickup_datetime,
CAST(tpep_dropoff_datetime AS TIMESTAMP) AS tpep_dropoff_datetime,
CAST(trip_distance AS DOUBLE) AS trip_distance,
CAST(fare_amount AS DOUBLE) AS fare_amount,
CAST(pickup_zip AS INT) AS pickup_zip,
CAST(dropoff_zip AS INT) AS dropoff_zip
FROM VALUES
""" + vals + "\nAS source(tpep_pickup_datetime, tpep_dropoff_datetime, trip_distance, fare_amount, pickup_zip, dropoff_zip);\n"
pathlib.Path("/tmp/create_genie_cli_test.sql").write_text(sql)
やっていることは次のとおりです。
- CSV の各行を
VALUES句のリテラルに変換する。空の値はNULL、文字列中のシングルクォートはエスケープする -
CASTで各列を元テーブルと同じ型にそろえる - できた SQL をファイルに書き出し、
databricks experimental aitools tools query --fileで実行する - 最後に
SELECT COUNT(*)で件数を確認する
ボリュームにファイルをアップロードするのではなく、データを SQL の中に直接埋め込んでいます。100行程度ならこれで十分です。もっと大きなファイルで同じ依頼をしたときにどういう方法を選ぶかは、今回は確認できていません。
この Python スクリプトの承認画面では、選択肢が「1. Yes, proceed」と「2. No, and tell Genie what to do differently」の2つだけでした。「以後確認しない」の選択肢がありません。複数行のスクリプトは「〜で始まるコマンド」という条件で許可を覚えにくいため、毎回確認する扱いになっているのだと思われます。
結果
row_count
100
takaakiyayoi_catalog.default.genie_cli_test が100件で作成されました。ここでも作成のあとに件数を数えて、結果を確かめています。
カタログエクスプローラーで開くと、CAST で指定した型で列が作られていることを確認できます。
まとめ
Genie Code CLI を試して分かったことをまとめます。
- インストールはスクリプト1本。OS ごとのビルド済みパッケージなので、Python 環境の準備は不要
- 起動時に Databricks CLI のプロファイルを選ぶ。モデルはこのワークスペースの Unity Gateway 経由で呼ばれる
- 既定の権限設定は
Workspace (Ask for approval)。コマンドの実行前に、実行場所、理由、コマンドが表示されて承認を求められる - Databricks からのデータ取得、ローカルへの保存、Unity Catalog へのテーブル作成まで、日本語の依頼2回で進んだ
- Databricks の操作には、手元の Databricks CLI が使われる
- 依頼の内容に応じて、
databricks-coreやdatabricks-unity-catalogといった Databricks 向けのスキルが読み込まれる - CSV からテーブルを作るとき、元テーブルの型を
DESCRIBEで確認してからCASTで同じ型にそろえていた - 作業のあとに行数や件数を数えて、結果を自分で確かめる
一番の収穫は、Claude Code のようなコーディングエージェントの使い勝手で、Databricks の作業まで頼めると分かったことでした。Databricks 向けのスキルが最初から用意されているので、Unity Catalog や SQL ウェアハウスの使い方を説明しなくても、依頼文だけで作業が進みます。承認モードのまま使えば実行されるコマンドを一つずつ確かめられるので、まずは小さな依頼から試してみるのがおすすめです。







