[新機能]SnowflakeがリリースしたCLIのコーディングエージェント「Cortex Code CLI」を試してみた
さがらです。
つい先程、Cortex Codeのパブリックプレビューだけでなく、「Cortex Code CLI」という機能が最初からGAでリリースされました!
Cortex Code CLIは、ターミナル上で自然言語リクエストを投げると、Snowflakeネイティブなスキル(例:カタログ探索、SQL生成・実行、アプリ作成補助など)や、必要に応じてMCPツールを組み合わせて作業を進めてくれるCLIの機能です。
早速Cortex Code CLIを試してみたので、その内容について本記事でまとめてみます。
前提条件
- OS:Ubuntu 24.04 LTS ※WSL2で動作
- Cortex Code CLI:1.0.5
- 接続先のSnowflake:AWS東京リージョン、Enterpriseエディション
- クロスリージョン推論を
AWS-USに対して有効化済み
- クロスリージョン推論を
Cortex Code CLIをインストール
以下のコマンドを実行してCortex Code CLIをインストールします。
curl -LsS https://ai.snowflake.com/static/cc-scripts/install.sh | sh
sandbox functionalityのためにPodmanのインストールも聞かれましたが、今回はインストールしませんでした。

Cortex Code CLIを起動しSnowflakeへ接続
ということで、早速Cortex Code CLIを起動してSnowflakeへ接続してみます!
接続情報の設定
接続にはSnowflake CLIと同じく~/.snowflake/connections.tomlの情報を使用することができます。Snowflake CLIからの接続の設定は本記事では省略しますが、以下の記事が参考になると思います。
Cortex Code CLIの起動
cortexコマンドを実行して、Cortex Code CLIを起動します。
cortex
まず、テキストの色味を選択します。(ペンギンかわいい…)

次に、セキュリティに関する注意書きが表示されます。

接続先を選択します。(事前にtomlファイルを設定していると、このように表示されるはずです。)

Cortex Code CLIが実行するSQLの課金先のアカウントについて聞かれますが、特に同一アカウントで問題ないためyesを選択しました。

これで、セットアップ完了です!

接続しているSnowflakeのアカウントについて聞いてみる
まずは公式Docを参考に、接続しているSnowflakeアカウントについて聞いてみます。
「私がアクセスできるデータベースの一覧を教えて」と聞いてみると、アクセス可能なデータベースを一覧で出してくれました。

「2026年1月に実行されたタスクの一覧と成功割合を出して」と聞くと、タスク数と実行回数もまとめて、体系的に出力してくれました。


planモードを有効化して、ガイドラインを参考にしたコード生成を依頼してみる
次に、最近私がClaude Codeで行っていることをCortex Code CLIで試した場合にどうなるのかを試してみたく、ガイドラインを参考にしたコード生成を依頼してみます。
まず前提として、下図のようにSnowflakeのロール設計方針をまとめたガイドラインのMarkdownファイルがあるとします。(利用費用が心配なのでロールの部分だけ抜粋したファイルで試します。)


私はClaude Codeを使うとき基本的にPlanモードで実装計画を同意できるものにしてから実装をお願いしているのですが、Cortex Code CLIにもPlanモードがあるため有効化します。
/planと入れることで、有効化できます。


ガイドラインのファイルを指定する場合は、@を入れると現在のディレクトリにあるファイル一覧を出してくれるので楽です。

この上で、「@Snowflake設計方針_ロールのみ.md を参考に、RAW_DBに関するデータベースとスキーマに関するアクセスロールのサンプルクエリを作成して」、と入力して依頼します。

すると、下図のようにガイドラインに沿って適切にサンプルクエリを作成してくれました。(Planモードなのですが、ここまで出力してくれることに驚きました…)


上記の画像は中略していますが、全文は以下となります。
設計方針ドキュメントを確認しました。RAW_DBに関するアクセスロールのサンプルクエリを作成します。
サンプルクエリの構成
RAW_DBは「8.3.2.1」に該当する特殊なDB(作成権限のみ)として設計します。
1. データベース用Access Role
-- ===========================================
-- RAW_DB データベース用 Access Role
-- ===========================================
-- 参照用(USAGE のみ)
CREATE ROLE IF NOT EXISTS _DATABASE_RAW_DB_USAGE_AR;
GRANT USAGE ON DATABASE RAW_DB TO ROLE _DATABASE_RAW_DB_USAGE_AR;
GRANT ROLE _DATABASE_RAW_DB_USAGE_AR TO ROLE SYSADMIN;
-- 書き込み用(スキーマ作成可能)※ロードツールがスキーマを自動作成する場合用
CREATE ROLE IF NOT EXISTS _DATABASE_RAW_DB_RW_AR;
GRANT USAGE ON DATABASE RAW_DB TO ROLE _DATABASE_RAW_DB_RW_AR;
GRANT MONITOR ON DATABASE RAW_DB TO ROLE _DATABASE_RAW_DB_RW_AR;
GRANT CREATE SCHEMA ON DATABASE RAW_DB TO ROLE _DATABASE_RAW_DB_RW_AR;
GRANT ROLE _DATABASE_RAW_DB_RW_AR TO ROLE SYSADMIN;
2. スキーマ用Access Role(例: SALESFORCE_FIVETRAN)
-- ===========================================
-- RAW_DB.SALESFORCE_FIVETRAN スキーマ用 Access Role
-- ===========================================
-- スキーマ作成(Managed Access Schema)
CREATE SCHEMA IF NOT EXISTS RAW_DB.SALESFORCE_FIVETRAN WITH MANAGED ACCESS;
-- --------------------------------------------
-- RO_AR(参照専用)
-- --------------------------------------------
CREATE ROLE IF NOT EXISTS _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
-- スキーマ権限
GRANT USAGE ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
-- 既存オブジェクトへの参照権限
GRANT SELECT ON ALL TABLES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT SELECT ON ALL VIEWS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT SELECT ON ALL STREAMS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT USAGE ON ALL FILE FORMATS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
-- FUTURE GRANTS(今後作成されるオブジェクト)
GRANT SELECT ON FUTURE TABLES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT SELECT ON FUTURE STREAMS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
GRANT USAGE ON FUTURE FILE FORMATS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR;
-- ロール階層
GRANT ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR TO ROLE SYSADMIN;
-- --------------------------------------------
-- RW_AR(作成権限のみ - RAW_DB特有)
-- --------------------------------------------
CREATE ROLE IF NOT EXISTS _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
-- スキーマ権限
GRANT USAGE ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT MONITOR ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
-- CREATE権限(RAW_DBに必要なオブジェクトのみ)
GRANT CREATE TABLE ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT CREATE VIEW ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT CREATE STAGE ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT CREATE FILE FORMAT ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT CREATE PIPE ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT CREATE STREAM ON SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
-- 既存オブジェクトへの操作権限
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT SELECT ON ALL VIEWS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT SELECT ON ALL STREAMS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT USAGE ON ALL FILE FORMATS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT OPERATE, MONITOR ON ALL PIPES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
-- FUTURE GRANTS
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE ON FUTURE TABLES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT SELECT ON FUTURE VIEWS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT SELECT ON FUTURE STREAMS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT USAGE ON FUTURE FILE FORMATS IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
GRANT OPERATE, MONITOR ON FUTURE PIPES IN SCHEMA RAW_DB.SALESFORCE_FIVETRAN
TO ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR;
-- ロール階層
GRANT ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR TO ROLE SYSADMIN;
3. Functional Roleへの付与例
-- ===========================================
-- Functional Role への付与例
-- ===========================================
-- データロード用FR(Fivetran用)
CREATE ROLE IF NOT EXISTS DATALOAD_FIVETRAN_FR;
GRANT ROLE _DATABASE_RAW_DB_RW_AR TO ROLE DATALOAD_FIVETRAN_FR;
GRANT ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RW_AR TO ROLE DATALOAD_FIVETRAN_FR;
GRANT ROLE DATALOAD_FIVETRAN_FR TO ROLE SYSADMIN;
-- 開発用FR(RAWデータ参照のみ)
CREATE ROLE IF NOT EXISTS DEVELOP_SALES_CRM_FR;
GRANT ROLE _DATABASE_RAW_DB_USAGE_AR TO ROLE DEVELOP_SALES_CRM_FR;
GRANT ROLE _SCHEMA_RAW_DB_SALESFORCE_FIVETRAN_RO_AR TO ROLE DEVELOP_SALES_CRM_FR;
GRANT ROLE DEVELOP_SALES_CRM_FR TO ROLE SYSADMIN;
ポイント
┌───────────────────────┬───────────────────────────────────────────────┐
│ 項目 │ 内容 │
├───────────────────────┼───────────────────────────────────────────────┤
│ Managed Access Schema │ 他ロールへの勝手な権限付与を防止 │
├───────────────────────┼───────────────────────────────────────────────┤
│ RAW_DB特有の設計 │ RW_ARはCREATE権限中心(通常スキーマと異なる) │
├───────────────────────┼───────────────────────────────────────────────┤
│ FUTURE GRANTS │ 今後作成されるオブジェクトにも自動で権限付与 │
├───────────────────────┼───────────────────────────────────────────────┤
│ ロール階層 │ 全Access Role → SYSADMIN │
└───────────────────────┴───────────────────────────────────────────────┘
このサンプルを実行しますか?または、スキーマ名やデータソース名を変更して調整が必要でしょうか?
全く問題ない内容であったので、「この内容で問題ないため、適切なファイル名で今のディレクトリに出力してください。」と入れると、改めて実装する内容が表示されます。問題なければYesを選択します。

ファイルを出力する際は、このように差分を表して作成してよいか確認をしてくれます。問題ないためYesを選択します。

「ファイルを作成しました。」と表示されたので、ファイルを見てみると、無事に作成されていました!

最後に
SnowflakeがリリースしたCLIのコーディングエージェント「Cortex Code CLI」を試してみました。
率直な感想として、今回試した範囲ではClaude Codeとそこまで使用感も変わりなく使えて、とても良い開発者体験ができました。ローカルで操作できるため、ユーザー好みの環境でこの機能が使えるのが素晴らしいですね…!
現時点でも満足できる機能ですが、今後のアップデートにも期待しています!!







