[新機能]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を押します。(Idel timeoutもデフォルト値が24 hoursのため、最小値の15 minutesに変更しています。)

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

関連記事