[新機能]Workspace内でNotebookの開発・実行ができるようになりました

[新機能]Workspace内でNotebookの開発・実行ができるようになりました

2025.12.18

さがらです。

Snowflakeの新機能として、Workspaceの中でNotebookの開発・実行ができるようになる機能がリリースされました。これまでNotebookは独立したオブジェクトだったのですが、今回のアップデートによりファイルベースかつGitでのバージョン管理も可能となりました。(2025/12/18時点ではプレビュー機能です。)

https://docs.snowflake.com/en/release-notes/2025/other/2025-12-16-notebooks-in-workspaces

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

この機能を実際に試してみたので、本記事でその内容をまとめてみます。

Notebookを新規作成

Workspaceを立ち上げ、左上の+ Add newからNotebookを押し、適当にファイル名をつけます。(.ipynbファイルとして作られるのがわかります。)

2025-12-18_07h24_13

2025-12-18_07h24_57

作成後、対象のファイルを開くとWorkspace上でNotebookの開発画面が表示されます。

2025-12-18_07h27_28

これは余談ですが、WorkspaceでNotebookを開くとTerminalのタブも追加されていました!下図のようにコマンドも実行できました。

2025-12-18_09h13_11

notebook serviceの作成

Workspace内のNotebookでは、Notebook kernelをホストしてコードを実行するために「notebook service」というオブジェクトが必要となります。(下図は公式Docより引用)

https://docs.snowflake.com/en/user-guide/ui-snowsight/notebooks-in-workspaces/notebooks-in-workspaces-compute-setup

notebook-compute-diagram1

事前準備:PyPIにアクセスするためのexternal access integrationを作成

PyPIからパッケージを取得することを行うため、以下のクエリを実行しておきます。こちらの公式Docを参考にしています。

use role accountadmin;

create external access integration sagara_pypi_access
  allowed_network_rules = (snowflake.external_access.pypi_rule)
  enabled = true;

-- 使用するロールへ付与
grant usage on integration sagara_pypi_access to role sagara_admin_role;

事前準備:Notebook kernel用のcompute poolを作成

Workspace内のNotebookはContainer Runtimeが前提のため、Notebook kernel用のcompute poolを作成する必要があります。

use role accountadmin;

create compute pool sagara_xs_compute_pool
  min_nodes = 1
  max_nodes = 1
  instance_family = cpu_x64_xs;

-- 使用するロールへ付与
grant usage, operate, modify, monitor
  on compute pool sagara_xs_compute_pool
  to role sagara_admin_role;

notebook serviceの作成

続いて、notebook serviceを作成します。

先程作成した.ipynbファイルを開いた状態で、Connectを押します。

2025-12-18_07h54_40

先程作成したexternal access integrationとcompute poolを設定して、Create and connectを押します。

2025-12-18_07h57_34

この後Workspaceの画面に戻ると、下図のようにkernelに接続している様子が見れます。※もし2枚目のようにエラーが起きた場合は、少し時間を空けながら何度かConnectを押してみると解決しました。

2025-12-18_07h59_51

2025-12-18_07h59_05

Connectedと表示されたら準備完了です!

2025-12-18_08h01_49

PyPI経由で外部のパッケージをインストール・実行

今回はPyPIに対するexternal access integrationも設定していたので、PyPI経由で外部のパッケージをインストールし、コードを書いて実行してみます。

https://docs.snowflake.com/en/user-guide/ui-snowsight/notebooks-in-workspaces/notebooks-in-workspaces-packages-runtime

プリインストールされたパッケージの確認

以下のコマンドを実行して、プリインストールされたパッケージを確認できます。

2025-12-18_09h14_20

PyPI経由で外部のパッケージをインストール

PyPIにあるパッケージとして、great_expectationsを試してみます。

パッケージのインストール方法ですが、WorkspaceのNotebookならではということで、requirements.txtを用いたインストールを試してみます。

https://docs.snowflake.com/en/user-guide/ui-snowsight/notebooks-in-workspaces/notebooks-in-workspaces-packages-runtime#from-requirements-txt

まず、下記の内容でrequirements.txtを作成します。

great_expectations>=1.9.0

2025-12-18_09h30_17

この後、.ipynbファイルにて以下を入力し、セルを実行します。すると無事にインストールできました。

!pip install -r requirements.txt

2025-12-18_09h32_04

無事にインストールできたため、下図の通りバージョンも確認できました。

2025-12-18_09h33_36

適当にgreat_expectations検証用のコードを書いて実行してみる

先程インストールしたgreat_expectations検証用のコードを書いて実行してみます。(コードはAIに生成してもらいました。)

適当に欠損値のあるdataframeを作ります。

import pandas as pd

df = pd.DataFrame(
    {
        "id": [1, 2, 3, 4],
        "age": [20, 35, None, 150],   # None と 150(範囲外)を混ぜる
        "country": ["JP", "US", "JP", None],  # 欠損を混ぜる
    }
)

df

続いて、以下のコードをセルに入れて実行してみると、問題なく定義したExpectationを実行できたことがわかります。

import great_expectations as gx

# Context(プロジェクトが無ければエフェメラルContextが返ります)
context = gx.get_context()

datasource_name = "pandas"
asset_name = "my_df_asset"
batch_definition_name = "whole_df"

# Data Source(あれば取得、なければ作成)
try:
    data_source = context.data_sources.get(datasource_name)
except Exception:
    data_source = context.data_sources.add_pandas(datasource_name)

# Data Asset(あれば取得、なければ作成)
try:
    data_asset = data_source.get_asset(asset_name)
except Exception:
    data_asset = data_source.add_dataframe_asset(name=asset_name)

# Batch Definition(あれば取得、なければ作成)
try:
    batch_definition = data_asset.get_batch_definition(batch_definition_name)
except Exception:
    batch_definition = data_asset.add_batch_definition_whole_dataframe(batch_definition_name)

# DataFrameをruntimeで渡してBatch化(from_pandas の代わり)
batch = batch_definition.get_batch(batch_parameters={"dataframe": df})

# 期待値(Expectations)
basic = {"result_format": "BASIC"}

col = "country"
mostly = 1.0

expectation = gx.expectations.ExpectColumnValuesToNotBeNull(
    column=col,
    mostly=mostly,
    result_format=basic,
)

validation_result = batch.validate(expectation)

print(f"\tEXPECTATION: {'PASS' if validation_result['success'] else 'FAIL'}")
validation_result

2025-12-18_09h53_33

Git操作をしてみる

今回検証に用いたWorkspaceはGitHubのリポジトリから作成していたため、Git操作も試してみます。

Workspace左上のChangesタブから、Pushを押してコメントを入れてCommitします。(今回は検証のため、mainブランチに直接Pushしています。)

2025-12-18_09h55_26

Open repo pageを押すと、PushしたコードがGitHub上で確認できました!

2025-12-18_09h55_54

2025-12-18_09h56_41

2025-12-18_09h57_31

Notebookのスケジュール実行

従来のNotebookと同様に、スケジュール実行する機能も備わっています。

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

Workspaceで.ipynbファイルを開いた状態で、右上のScheduled runsを押すと、下図のように表示されます。

2025-12-18_09h59_56

2025-12-18_10h01_01

WorkspaceのNotebook機能の制限事項

とても便利なWorkspaceのNotebook機能ですが、以下の公式Docに記載があるように制限事項があります。

1アカウントあたりのアクティブサービス数は最大200まで、週末にメンテナンスのためnotebook serviceが再起動する可能性がある、Streamlitに非対応、セル参照は非対応、など従来のNotebook機能と比較しても色々と違いがあるため、ご注意ください。

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

最後に

Workspace内でNotebookの開発・実行ができるようになりましたので、試した内容をまとめてみました。

Container Runtimeがベースのため、簡単に外部のパッケージをインストールできますし、Workspace上で連携できるのでGitでバージョン管理もできるのが素晴らしいですね!まだプレビュー中ではありますが、ぜひご活用ください。

この記事をシェアする

FacebookHatena blogX

関連記事