Cortex Codeを組織で活用する際のポイント
はじめに
こんにちは!インテージの児玉です。
AIエージェントの技術進化が加速するなか、Snowflakeからも待望のAIエージェントとして 「Cortex Code」 が登場しました。
Cortex Codeは、個人の開発体験を劇的に向上させますが、組織の開発フローに組み込む際には、以下の観点が重要になります。
- 自律実行の安全性担保と実行プロセスの透明化
- エージェントへのドメイン知識や開発規律の反映
本記事では、私自身が感じたCortex Codeを組織で活用する際のポイントを紹介します。
Cortex Code とは
Cortex Codeは、Snowflakeにネイティブ統合された AI コーディングエージェントです。
環境内のオブジェクトを直接参照し、広範なタスクを自然言語で円滑に実行できるのが特徴です。
利用形態は、用途に合わせて以下の2種類が提供されています。
- Snowsight版: ブラウザ上の Snowflake Workspaces に統合された直感的な Web UI
- CLI版: ローカルの開発環境やターミナルから直接操作可能な、開発者向けインターフェース
また、他のAIエージェントと比較した特徴として、以下の4点が挙げられます。
以降のセクションでは、組織としてCortex Codeを活用する際の4つの要点を解説します。
①:ガバナンス設計とコスト制御
AIエージェントを実業務に活用する際、以下の2点が大きな課題になります。
-
データガバナンスの確保
AIエージェントによる意図しないデータ参照や、誤った処理をいかに制御するか -
発生コストの高騰
LLMへの大量リクエストや、ウェアハウスの過剰稼働によるコスト増大をいかに防ぐか
これらに対して、RBACやリソースモニターを活用することで、安全な運用が可能になります。
RBAC による権限管理
エージェントの操作範囲を最小化しながら、安全に運用するため、以下の階層構造に基づく設計を推奨します。
設計上のポイントは以下の3点です。
-
CORTEX_AGENT_USER の公開範囲を制限
デフォルトのPUBLICロールから、SNOWFLAKE.CORTEX_AGENT_USER権限を剥奪
特定ロールに権限を限定し、エージェントが操作可能なオブジェクトや利用ユーザーを制限 -
RBACに準拠したデータ探索範囲の厳格化
エージェントが参照可能なデータセットを、RBACの枠組みで最小限に限定
意図しないオブジェクト参照や誤操作を未然に防止 -
セカンダリーロールの無効化
セカンダリーロールの有効化はロール境界の曖昧化を招くため、原則として無効化
実際のDDL例
-- ① ロール作成
USE ROLE USERADMIN;
CREATE ROLE IF NOT EXISTS [Access Role];
CREATE ROLE IF NOT EXISTS [Functional Role];
-- ② ロール階層の設定
USE ROLE SECURITYADMIN;
GRANT ROLE [Functional Role] TO ROLE SYSADMIN;
GRANT ROLE [Access Role] TO ROLE [Functional Role];
GRANT ROLE [Functional Role] TO USER [USER];
-- ③ オブジェクト権限の集約
USE ROLE SYSADMIN;
GRANT USAGE, MONITOR ON DATABASE [Database] TO ROLE [Access Role];
GRANT ALL ON ALL TABLES IN DATABASE [Database] TO ROLE [Access Role];
-- ... VIEW / SCHEMA / STAGE など同様
-- ④ Cortex Code利用権限の付与
USE ROLE SECURITYADMIN;
REVOKE DATABASE ROLE SNOWFLAKE.CORTEX_AGENT_USER FROM ROLE PUBLIC;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_AGENT_USER TO ROLE [Functional Role];
リソースモニター によるコスト制御
Cortex Codeの利用料は、推論クレジット量とコンピューティングコストで主に構成されます。
これらは、以下の方法でそれぞれ制御が可能です。
-
Cortex Codeの推論クレジット制御[3]
専用パラメータ(CORTEX_CODE_*_DAILY_EST_CREDIT_LIMIT_PER_USER)で、CLI/Snowsightごとに「アカウント/1ユーザーあたり推論トークンの利用上限」を日次で制御 -
コンピューティングコスト制御(ウェアハウス利用)[4]
Resource Monitor のCREDIT_QUOTAを活用し、AIが発行したクエリ等による「ウェアハウスのコンピュート消費」を自動でモニタリング・制限
実際のDDL例
-- ① Cortex Codeの推論クレジット制御
USE ROLE ACCOUNTADMIN;
-- CLI版(アカウントレベルの制限例)
ALTER ACCOUNT SET CORTEX_CODE_CLI_DAILY_EST_CREDIT_LIMIT_PER_USER = xx;
-- Snowsight版(アカウントレベルの制限例)
ALTER ACCOUNT SET CORTEX_CODE_SNOWSIGHT_DAILY_EST_CREDIT_LIMIT_PER_USER = xx;
-- ② コンピューティングコスト制御(ウェアハウス利用)
USE ROLE ACCOUNTADMIN;
CREATE RESOURCE MONITOR IF NOT EXISTS [Resource Monitor]
WITH CREDIT_QUOTA = xx
FREQUENCY = DAILY
START_TIMESTAMP = IMMEDIATELY
TRIGGERS
ON xx PERCENT DO NOTIFY
ON xx PERCENT DO SUSPEND
ON xx PERCENT DO SUSPEND_IMMEDIATE;
ALTER WAREHOUSE [Warehouse] SET RESOURCE_MONITOR = [Resource Monitor];
②:AIエージェントの拡張と規律定義
AIエージェントの業務活用において、「組織独自の規律(ルール・基準)の浸透」と「プロジェクト固有のドメイン知識による拡張」 が重要になります。
これらをエージェントへ組み込むことで、属人性を排除しながら、組織としての開発基準を揃えることが可能になります。
Cortex Code 拡張機能と活用用途
Cortex Codeには、これらを具体化するための拡張機能が備わっています。
| 拡張機能 | 主な役割・活用用途 |
|---|---|
| AGENTS.md |
エージェントへのプロジェクト基本ルールの連携 プロジェクトの全体像、AIの基本的な振る舞いを定義 |
| Skills |
定型タスクのパッケージ化 独自の専門知識や複雑なワークフローを再利用可能な形で整備 データプロファイリングやdbt操作などの複雑なタスクを自律化 |
| Subagents |
マルチエージェントによる効率的な分業 レビューやリファクタリングなどの特定領域に特化したエージェントを構築 並列処理・協調動作により、高度な開発体制を実現 |
| Hooks |
動的ガードレールの設置 出力内容の検証や禁止操作の遮断など、強制力を持つガードレールを設置可能 |
| MCP |
外部システムとのセキュアな連携 Snowflake外のツールやデータとの連携操作を、安全な環境下で実現 |
プロジェクトルールの適用例
AGENTS.mdの整備を通じて、組織独自の開発規律をエージェントに反映可能です。
組織のコード規約や開発ルールが適用され、出力の一貫性と品質を安定して再現できます。
プロンプト例
売上データを主軸に、メディア投資額と販促フラグを日付キーで外部結合し、欠損値を0補完した分析用マートを作成。また、実際のDDLをddl/配下に出力してください。
アウトプット例(整備前)
USE ROLE [FUNCTIONAL ROLE];
USE WAREHOUSE [WAREHOUSE];
CREATE OR REPLACE TABLE [DATABASE].[SCHEMA].MART_SALES_MEDIA_PROMO
COMMENT = '分析用マート:売上を主軸にメディア投資額・販促フラグをDSで外部結合(欠損値0補完)'
AS
SELECT
s.DS,
s.SALES,
COALESCE(ma.MEDIA_A, 0) AS MEDIA_A,
COALESCE(mb.MEDIA_B, 0) AS MEDIA_B,
COALESCE(mc.MEDIA_C, 0) AS MEDIA_C,
COALESCE(p.PROMO_X, 0) AS PROMO_X
FROM [DATABASE].[SCHEMA].STG_SALES AS s
LEFT OUTER JOIN [DATABASE].[SCHEMA].STG_MEDIA_A AS ma ON s.DS = ma.DS
LEFT OUTER JOIN [DATABASE].[SCHEMA].STG_MEDIA_B AS mb ON s.DS = mb.DS
LEFT OUTER JOIN [DATABASE].[SCHEMA].STG_MEDIA_C AS mc ON s.DS = mc.DS
LEFT OUTER JOIN [DATABASE].[SCHEMA].STG_PROMOTIONS AS p ON s.DS = p.DS
ORDER BY s.DS;
アウトプット例(整備後)
-- ============================================================
-- 04_create_mart.sql 分析用マート(MRT_SALES_MEDIA_PROMO)作成
-- ------------------------------------------------------------
-- 概要 : 売上データ(STG_SALES)を主軸に、メディア投資額
-- (STG_MEDIA_A/B/C)と販促フラグ(STG_PROMOTIONS)を
-- 日付キー DS で LEFT JOIN し、欠損値を 0 で補完した
-- 分析用マート MRT_SALES_MEDIA_PROMO を作成する。
-- ============================================================
-- ============================================================
-- 1. 変数定義・初期設定
-- ============================================================
SET DB = [DATABASE];
SET SC = [SCHEMA];
SET ROLE = [FUNCTIONAL ROLE];
SET WH = [WAREHOUSE];
USE ROLE IDENTIFIER($ROLE);
USE WAREHOUSE IDENTIFIER($WH);
USE DATABASE IDENTIFIER($DB);
USE SCHEMA IDENTIFIER($SC);
-- ============================================================
-- 2. 分析用マート作成
-- ※ 売上データ(STG_SALES)を主軸に、メディア投資額
-- (STG_MEDIA_A/B/C)と販促フラグ(STG_PROMOTIONS)を
-- 日付キー DS で LEFT JOIN し、欠損値を 0 で補完
-- ============================================================
CREATE OR REPLACE TABLE MRT_SALES_MEDIA_PROMO (
DS DATE COMMENT '週開始日(月曜)',
SALES NUMBER(38, 0) COMMENT '売上金額(円)',
MEDIA_A NUMBER(38, 0) COMMENT 'メディアA 週次投資金額(円)',
MEDIA_B NUMBER(38, 0) COMMENT 'メディアB 週次投資金額(円)',
MEDIA_C NUMBER(38, 0) COMMENT 'メディアC 週次投資金額(円)',
PROMO_X NUMBER(38, 0) COMMENT '販促施策X 実施フラグ(0/1)'
)
COMMENT = '分析用マート:売上を主軸にメディア投資額・販促フラグを DS で外部結合(欠損値 0 補完)'
DATA_RETENTION_TIME_IN_DAYS = 1
AS
SELECT
s.DS,
s.SALES,
COALESCE(ma.MEDIA_A, 0) AS MEDIA_A,
COALESCE(mb.MEDIA_B, 0) AS MEDIA_B,
COALESCE(mc.MEDIA_C, 0) AS MEDIA_C,
COALESCE(p.PROMO_X, 0) AS PROMO_X
FROM STG_SALES AS s
LEFT JOIN STG_MEDIA_A AS ma ON s.DS = ma.DS
LEFT JOIN STG_MEDIA_B AS mb ON s.DS = mb.DS
LEFT JOIN STG_MEDIA_C AS mc ON s.DS = mc.DS
LEFT JOIN STG_PROMOTIONS AS p ON s.DS = p.DS
ORDER BY s.DS;
③:Skills活用による定型タスクのパッケージ化
Skillsとは、一連の作業プロセスを再利用可能な形式でパッケージ化する仕組みです。
スラッシュコマンドでの実行はもちろん、会話の内容からエージェントが最適なスキルを自律的に判断・実行し、誰でも同じ水準の出力が再現可能になります。
バンドルスキルの利用
Cortex Code CLI には、一般的なSnowflakeワークフローの組み込みスキル(バンドルスキル)が用意されています。[5]
これらはインストールや初期設定が不要で、即座に利用可能です。
# 利用可能なスキル一覧を確認する
$ /skill

/skillコマンドによる確認結果
例えば、特定のテーブルに対して詳細なデータプロファイリングを行う/data:profiling-tablesスキルを実行すると、自動的にスキーマの解析や統計情報の抽出が行われます。
# データプロファイリングスキルの起動
$ /data:profiling-tables

実行結果①: 解析プロセスの開始

実行結果②: 詳細な統計情報の出力
カスタムスキルの利用
業務固有のドメイン知識を反映させたい場合や、独自のワークフローを自動化したい場合には、カスタムスキルが有効です。
例として、/profiling-timeseriesという「時系列データを調査し、レポートと可視化画像を生成する」サンプルスキルを作成します。
/profiling-timeseriesのワークフロー
カスタムスキルとして定義することで、専門的な分析手順がパッケージ化され、以下の実行結果を引き出せます。

実行結果①: 対象テーブルの選択

実行結果②: 分析・レポート結果の出力

実行結果③: 成果物の出力
このように、一連のワークフローを「スキル」として定義することで、個人の暗黙知に依存していたプロセスを組織の「共通資産」へと昇華できます。
個人の専門性に左右されない品質の安定化と、誰でも同等の成果を得られる再現性を実現します。
④:プランモード による安全な実行制御
AIエージェントの自律実行は、高い生産性をもたらす一方、内部プロセスがブラックボックス化しやすく、意図しない変更や手戻りが発生するリスクがあります。
プランモードは、エージェントが実動作前に 「実行計画(どのような順序で、何を行うのか)」を整理したうえでユーザーに提示し、承認を受けてから実行する 仕組みです。[7]
人間のレビューを介在することで、実行内容へのガバナンスと透明性を担保します。
プランモードの具体例
複数ステップが必要なタスクを一例に、プランモードの挙動を確認します。

プロンプトでの作業依頼内容
プランモードを有効にすると、エージェントは即座に実行に移るのではなく、まず不足情報の確認や前提条件の整理を行います。
そのうえで、具体的なアクションをステップごとに整理した「実行計画」を提示し、ユーザーの明示的な承認を待機します。

提示された実行計画
プランモードは、計画の承認プロセスの介在により、解釈の齟齬による誤操作を防止できます。
また、Snowflakeの推奨設計に準拠した実行計画のレビューは、最適な実装手順を学ぶ学習材料としても機能し、組織の教育効果も期待できます。
まとめ
本記事では、Cortex Codeを組織として導入・活用するための4つの要点を解説しました。
Cortex Codeが持つ Snowflakeネイティブな信頼性 を土台に、「組織利用の安全性確保」と「開発水準の引き上げ」 を実現するためのポイントが、冒頭で掲げた2つの観点になります。
-
自律実行の安全性担保と実行プロセスの透明化
RBAC制御やコスト制限による安全性確保と、プランモードによる実行プロセスの可視化 -
エージェントへのドメイン知識や開発規律の反映
AGENTS.mdやSkillsによる、組織規律やノウハウの組み込みと、属人性を排除した品質確保
本記事が、皆さまの組織におけるCortex Code活用の一助となれば幸いです。
Discussion