Snowflake の共有ワークスペースを試してみた

Snowflake の共有ワークスペースを試してみた

2026.06.20

はじめに

Snowflake の Shared Workspace を試してみた内容を本記事でまとめます。

本機能の概要

Workspaces

前提として Snowflake では Workspaces(ワークスペース)として、Snowsight 内に統合されたファイルベースの開発環境が利用できます。

https://docs.snowflake.com/en/user-guide/ui-snowsight/workspaces

https://dev.classmethod.jp/articles/snowflake-workspace-pupr-try/

通常のワークスペースは、対象ユーザーのパーソナルデータベースという領域に保持され、個人の開発環境として使用できます。このため、アクセス権もそのユーザーのみとなり、他のユーザーからは見えません。

Shared Workspaces

現在は共有(Shared)ワークスペースとして、チームやプロジェクト単位で共有されるワークスペースを作成することも可能です。

https://docs.snowflake.com/en/user-guide/ui-snowsight/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 でも作成したワークスペースを確認できました。

image

なお、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権限を付与します。WRITEREADも含みます。

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. |
+----------------------------------------+

https://docs.snowflake.com/en/user-guide/ui-snowsight/workspaces-sql#add-a-live-version

次に、ローカルファイルのアップロードを試してみます。ここでは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 のファイルは、同一ユーザーであればワークスペース上で確認できます。

image

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

2026-06-18_13h24_31

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

ALTER WORKSPACE WORKSPACE_VERIFY_DB.WORK.TEST_WS COMMIT;

2026-06-18_13h27_47

Snowsight での編集とパブリッシュ

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

image

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

image

同時編集と競合の解消

複数ユーザーが同じファイルを同時編集した場合の挙動を見てみます。

同じ行を同時編集した場合

まず2ユーザーで同一行を編集します。

image

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

image

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

image

異なる行を同時編集した場合

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

image

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

image

image

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

image

Snowflake CLI からのコミットと UI の競合

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

UI で編集:

image

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

image

バージョン管理

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

image

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

image

image

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

image

image

変更の破棄(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 によるアクセス制御、バージョン管理、同時編集時の競合解消など、チームでのファイル管理に必要な機能がひととおり揃っている印象でした。
こちらの内容がどなたかの参考になれば幸いです。


Snowflakeの導入支援はクラスメソッドに!

クラスメソッドでは Snowflake の導入を支援しております。
製品の詳細や支援の内容についてお気軽にお問い合わせください。

Snowflakeの詳細を見る

この記事をシェアする

関連記事