Snowflake の共有ワークスペースを試してみた
はじめに
Snowflake の Shared Workspace を試してみた内容を本記事でまとめます。
本機能の概要
Workspaces
前提として Snowflake では Workspaces(ワークスペース)として、Snowsight 内に統合されたファイルベースの開発環境が利用できます。
通常のワークスペースは、対象ユーザーのパーソナルデータベースという領域に保持され、個人の開発環境として使用できます。このため、アクセス権もそのユーザーのみとなり、他のユーザーからは見えません。
Shared Workspaces
現在は共有(Shared)ワークスペースとして、チームやプロジェクト単位で共有されるワークスペースを作成することも可能です。
共有ワークスペースは、Snowflake 上でファイルをチームと共同管理するための機能で、SQL ファイルやノートブックなどをワークスペースに配置し、ロールベースのアクセス制御によって編集者・閲覧者を分離できます。
主な特徴として、以下が挙げられます。
- 共有ワークスペースは任意のスキーマ配下に作成されるオブジェクト
- 対象スキーマへの
CREATE WORKSPACE権限を持つロールがワークスペースを作成できる GRANT WRITE(編集)/GRANT READ(閲覧)でロールごとのアクセスを制御できる- 変更を「パブリッシュ(COMMIT)」するまで他ユーザーには見えない
- 複数ユーザーが同時編集した場合は差分比較・マージ画面が提供される
- バージョン履歴から任意のバージョンに復元できる
Git リポジトリに接続されたプライベートワークスペースと異なる点として、こちらは Git なしで、Snowsight 内で完結する パブリッシュ/履歴ベースの簡易バージョン管理機能を持ちます。
試してみる
ここでは、共有ワークスペースの基本操作を試してみます。
前提条件
以下の3種類のロールを用意しました。
| ロール | 役割 |
|---|---|
WS_OWNER_ROLE |
ワークスペースの作成・管理 |
WS_EDITOR_ROLE |
ファイルの編集(WRITE権限) |
WS_VIEWER_ROLE |
ファイルの閲覧(READ権限) |
ロール階層は SYSADMIN > WS_OWNER_ROLE > WS_EDITOR_ROLE > WS_VIEWER_ROLE とし、検証用のデータベース・スキーマもあわせて作成しておきました。
-- ロール作成
USE ROLE USERADMIN;
CREATE ROLE IF NOT EXISTS WS_OWNER_ROLE;
CREATE ROLE IF NOT EXISTS WS_EDITOR_ROLE;
CREATE ROLE IF NOT EXISTS WS_VIEWER_ROLE;
-- ロール階層
GRANT ROLE WS_VIEWER_ROLE TO ROLE WS_EDITOR_ROLE;
GRANT ROLE WS_EDITOR_ROLE TO ROLE WS_OWNER_ROLE;
GRANT ROLE WS_OWNER_ROLE TO ROLE SYSADMIN;
-- 検証用DB/スキーマ
USE ROLE SYSADMIN;
CREATE DATABASE IF NOT EXISTS WORKSPACE_VERIFY_DB;
CREATE SCHEMA IF NOT EXISTS WORKSPACE_VERIFY_DB.WORK;
-- ウェアハウス権限
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE WS_OWNER_ROLE;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE WS_EDITOR_ROLE;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE WS_VIEWER_ROLE;
また、権限によるアクセス権分離の確認のため、検証ユーザーのセカンダリロールを無効化しておきました。
ALTER USER <user> SET DEFAULT_SECONDARY_ROLES = ();
ワークスペースの作成
共有ワークスペースはスキーマ配下に作成します。そのため、オーナーロールに指定のスキーマへのワークスペースの作成権限を付与します。
USE ROLE SYSADMIN;
GRANT USAGE ON DATABASE WORKSPACE_VERIFY_DB TO ROLE WS_OWNER_ROLE;
GRANT USAGE ON SCHEMA WORKSPACE_VERIFY_DB.WORK TO ROLE WS_OWNER_ROLE;
GRANT CREATE WORKSPACE ON SCHEMA WORKSPACE_VERIFY_DB.WORK TO ROLE WS_OWNER_ROLE;
WS_OWNER_ROLEでワークスペースを作成します。
USE ROLE WS_OWNER_ROLE;
USE WAREHOUSE COMPUTE_WH;
> CREATE OR REPLACE WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS
COMMENT = '検証用: Shared Workspace基本テスト';
+-------------------------------+
| status |
|-------------------------------|
| TEST_WS successfully created. |
+-------------------------------+
確認
> SHOW WORKSPACES IN SCHEMA WORKSPACE_VERIFY_DB.WORK;
+---------+---------------------+-------------+-------------------------------+-------------------------------+---------------+------------------------------------+
| name | database_name | schema_name | created_on | updated_on | owner | comment |
|---------+---------------------+-------------+-------------------------------+-------------------------------+---------------+------------------------------------|
| TEST_WS | WORKSPACE_VERIFY_DB | WORK | 2026-06-17 20:27:34.005 -0700 | 2026-06-17 20:27:34.552 -0700 | WS_OWNER_ROLE | 検証用: Shared Workspace基本テスト |
+---------+---------------------+-------------+-------------------------------+-------------------------------+---------------+------------------------------------+
Snowsight でも作成したワークスペースを確認できました。

なお、CREATE WORKSPACE権限を持たないロールで作成しようとすると以下のエラーになります。
CREATE WORKSPACE WORKSPACE_VERIFY_DB.WORK.SHOULD_FAIL;
-- 003001 (42501): Insufficient privileges to operate on schema 'WORK'.
-- Your primary role WS_EDITOR_ROLE must have CREATE WORKSPACE granted on SCHEMA WORKSPACE_VERIFY_DB.WORK.
編集・閲覧権限の付与(GRANT WRITE / READ)
WS_OWNER_ROLEから、編集者ロールにWRITE権限、閲覧者ロールにREAD権限を付与します。WRITEはREADも含みます。
USE ROLE WS_OWNER_ROLE;
GRANT WRITE ON WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS TO ROLE WS_EDITOR_ROLE;
GRANT READ ON WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS TO ROLE WS_VIEWER_ROLE;
確認します。
SHOW GRANTS ON WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS
->> SELECT "privilege", "granted_on", "name", "granted_to", "grantee_name" FROM $1;
+-----------+------------+----------------------------------+------------+----------------+
| privilege | granted_on | name | granted_to | grantee_name |
|-----------+------------+----------------------------------+------------+----------------|
| WRITE | WORKSPACE | WORKSPACE_VERIFY_DB.WORK.TEST_WS | ROLE | WS_EDITOR_ROLE |
| OWNERSHIP | WORKSPACE | WORKSPACE_VERIFY_DB.WORK.TEST_WS | ROLE | WS_OWNER_ROLE |
| READ | WORKSPACE | WORKSPACE_VERIFY_DB.WORK.TEST_WS | ROLE | WS_VIEWER_ROLE |
+-----------+------------+----------------------------------+------------+----------------+
ファイルのアップロード
ここではまずコマンドでファイルをアップロードしてみます。
ワークスペースへのファイル操作は、ADD LIVE VERSION FROM LAST → ファイル書き込み → COMMIT の3ステップで行います。live version の追加は GUI では特に意識する必要はありません。
はじめに live version を作成します。
USE ROLE WS_OWNER_ROLE;
> ALTER WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS ADD LIVE VERSION FROM LAST;
+----------------------------------------+
| status |
|----------------------------------------|
| Live version nullsuccessfully created. |
+----------------------------------------+
次に、ローカルファイルのアップロードを試してみます。ここではSnowflake CLI を使用しました。
こちらに PUT コマンドの例があるので、これに沿って以下のコマンドでも配置できました。
> snow stage copy /tmp/test_query.sql \
snow://workspace/WORKSPACE_VERIFY_DB.WORK.TEST_WS/versions/live/ \
--overwrite \
--role WS_EDITOR_ROLE
+----------------------------------------------------------------------+
| | | | | source | target | | |
| | | source | target | _compr | _compr | statu | messag |
| source | target | _size | _size | ession | ession | s | e |
|--------+--------+--------+--------+--------+--------+-------+--------|
| test_q | test_q | 53 | 64 | NONE | NONE | UPLOA | |
| uery.s | uery.s | | | | | DED | |
| ql | ql | | | | | | |
+----------------------------------------------------------------------+
--roleオプションで実行ロールを指定できます。READ権限しか持たないWS_VIEWER_ROLEでアップロードしようとすると、以下のようにエラーになります。
> snow stage copy /tmp/test_query.sql \
snow://workspace/WORKSPACE_VERIFY_DB.WORK.TEST_WS/versions/live/ \
--overwrite \
--role WS_VIEWER_ROLE
╭─ Error ──────────────────────────────────────────────────────────────╮
│ 003001 (42501): 01c51fb1-0003-f97d-0004-c47a000b456e: SQL access │
│ control error: │
│ Insufficient privileges to operate on workspace 'TEST_WS'. Your │
│ primary role WS_VIEWER_ROLE must have WRITE granted on WORKSPACE │
│ WORKSPACE_VERIFY_DB.WORK.TEST_WS. │
╰──────────────────────────────────────────────────────────────────────╯
COMMIT(パブリッシュ)前の live version のファイルは、同一ユーザーであればワークスペース上で確認できます。

一方で、パブリッシュ前なので、他のユーザーからは見えません。

アップロード後はCOMMIT(パブリッシュ)することで他ユーザーにも変更が見えるようになります。
ALTER WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS COMMIT;

Snowsight での編集とパブリッシュ
Snowsight の UI からでも直接ファイルを編集できます。WS_EDITOR_ROLEでワークスペースを開き、ファイルを編集します。

UI での編集は自動保存されますが、他ユーザーへの公開は右上の「パブリッシュ」ボタンを押す必要があります。パブリッシュ後、他ユーザーにも変更内容が表示されます。

同時編集と競合の解消
複数ユーザーが同じファイルを同時編集した場合の挙動を見てみます。
同じ行を同時編集した場合
まず2ユーザーで同一行を編集します。

片方(上図左)がパブリッシュした後にもう一方がパブリッシュしようとすると、変更の競合が検知されます(下図右側)。

図の赤枠内の「Compare Versions」をクリックすると差分を確認できます。「Overwrite」を選ぶと相手の変更を上書きするため注意が必要です。左側で差分を確認・修正してからパブリッシュします。

異なる行を同時編集した場合
異なる行を編集した場合でも、同様に競合として検知されます。

差分として両方の変更が表示されるので、内容を確認してマージできます。


なお、この場合も差分を確認せずにそのままパブリッシュすると、最新の変更で上書きされる点には注意が必要です。

Snowflake CLI からのコミットと UI の競合
同じバージョンから UI と CLI で編集し、CLI 側で先に COMMIT したとします。その後、UI からパブリッシュしようとすると、同様に競合として検知されました。
UI で編集:

CLI からパブリッシュした内容と UI での編集内容を比較できます(右側が CLI で上書きした内容)。

バージョン管理
ワークスペースのファイルはバージョン管理されており、変更のたびにバージョンが記録されます。

上図の「Publish changes > Version history」から任意のバージョンを選択して内容を確認できます。


過去のバージョンの内容でパブリッシュすることで、その内容が最新バージョンとして記録されます。


変更の破棄(ABORT)
live version を作成して変更を加えた後、パブリッシュ前に変更を破棄したい場合はABORTを使用できます。
ALTER WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS ADD LIVE VERSION FROM LAST;
-- (ファイルを編集)
> ALTER WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS ABORT;
+------------------------------------+
| status |
|------------------------------------|
| Live version successfully aborted. |
+------------------------------------+
ABORTにより live version が削除され、未公開の変更が破棄されます。他ユーザーへの影響はなく、そのまま作業を継続できます。
さいごに
簡単ではありますが、Snowflake のワークスペース(Shared Workspace)を試してみました。RBAC によるアクセス制御、バージョン管理、同時編集時の競合解消など、チームでのファイル管理に必要な機能がひととおり揃っている印象でした。
こちらの内容がどなたかの参考になれば幸いです。




