【Snowflake】SnowCLIでネイティブアプリ作成を試行錯誤してみた

【Snowflake】SnowCLIでネイティブアプリ作成を試行錯誤してみた | Tableau-id Press -タブロイド-
snowflake-logo-1200x630-960x504

こんにちは。

Snowflakeのいろいろなオブジェクトを簡単に作成してくれるSnowCLIライブラリが最近PuPr(パブリックプレビュー)になりました!!

これを使用することで、ネイティブアプリの開発がとても楽になりそうな予感がしています。

そこで今回、ネイティブアプリの開発環境の試行錯誤【SnowCLI編】の紹介です!

このブログでは、ネイティブアプリの構造、作成方法から、SnowCLIだとどう作成するかという部分まで紹介していきます。

 

ちなみに筆者がSnowSQLでネイティブアプリを作成しようと試行錯誤したブログはこちら

(ここから半年、Snowflakeの開発環境がどんどん進化していて、感動しています!!)

ネイティブアプリの開発方法のおさらい

簡単な流れを記述します。

1. 設定ファイルの作成

まず、ネイティブアプリで欠かせない3種の神器(ファイル)を用意します。

・manifest.yml

・scripts.sql

・readme.md

2. アプリパッケージを作成

アプリパッケージの箱を作成します。

CREATE APPLICATION PACKAGE my_app_pkg; //アプリパッケージの箱を作成

3. アプリパッケージ内のステージに設定ファイルを入れる

ステージを作成し、PutコマンドやSnowSightで設定ファイルをアップします。

CREATE STAGE my_app_pkg.xxxx.stage; //アプリパッケージの中でステージを作成

put manifest.yml @my_app_pkg.xxxx.stage/v1; //ステージの中のv1階層にアップ

4. 設定ファイルをもとに、アプリパッケージをデプロイ

v1ステージを使って、最初のバージョンv1を作成し、デフォルトバージョンにすることで、ユーザに見せられるようにします。

この後、マーケットプレイスに上げたり、Direct Sharingをして、ユーザにアプリを提供できます。

ALTER APPLICATION PACKAGE my_app_pkg ADD VERSION v1 USING @my_app_pkg.xxxx.stage/v1; //v1ステージからアプリバージョンv1を作成

ALTER APPLICATION PACKAGE my_app_pkg SET DEFAULT RELEASE DIRECTIVE //バージョンv1を標準バージョンに設定
VERSION = v1
PATCH = 0

5. アプリパッケージからアプリを作成

ユーザや自分は、アプリパッケージから、実際にアプリをインストールして、動かすことができます。

CREATE APPLICATION my_app //my_app_pkgパッケージv1から、my_appという名称でアプリを作成
  FROM APPLICATION PACKAGE my_app_pkg
  USING VERSION v1;

6. バージョン追加

バージョン2を追加できたり、バージョン1をもう一度Addすることで、パッチが付与されたバージョン1.1を作成できます。

ALTER APPLICATION PACKAGE my_app_pkg ADD VERSION v2 USING @my_app_pkg.xxxx.stage/v2; //v2ステージからアプリバージョンv2を作成

ALTER APPLICATION PACKAGE my_app_pkg ADD PATCH FOR VERSION v1 USING @my_app_pkg.xxxx.stage/v1_1; //v1_1ステージからアプリバージョンv1.1を作成

SnowCLIの場合

次に、SnowCLIでの開発方法を紹介していきます。

とりあえず、SnowCLIをインストールしていきましょう!

# SnowCLIインストール (git bash)

python -m venv cli_env #仮想環境を作ってその中で作業する。

source cli_env/Script/activate.bat #仮想環境起動!

pip install snowflake-cli-labs #snowcliインストール

# Snowflakeへの接続設定

snow connection add #接続設定を作成

## Snowflakeのアカウントや、ユーザ名、ロールやウェアハウスが求められます。
ここまで行い、SnowCLIの設定は完了です。
※ 接続方法の詳細は、mimuraさんのこちらのブログを参照ください!!

A. 設定ファイルとアプリフォルダの作成

ここの手順での3つのファイルは、SnowCLIも同様に手動で作成する必要がありますが、

snow app initコマンドを実行することで、3つのファイルのテンプレートを作成してくれます!めちゃくちゃ便利!

# アプリパッケージのテンプレを作成

snow app init --template basic #UIなしのアプリのテンプレ

snow app init --template streamlit-python #UI付のアプリのテンプレ

snow app init --name cli_app #自分でアプリを作る場合

こんな感じに、アプリパッケージ名のフォルダの中には、appフォルダ(設定ファイルが入っている)と、snowflake.ymlが作成されます。

ここで、snowflake.ymlについて少し解説します。

このsnowflake.ymlというプロジェクト定義ファイルはアプリパッケージやアプリの名称、使うウェアハウスやロールや、その他の細かな設定をするためのファイルとなっています。

そのため、snowflake.ymlの中に、本来のネイティブアプリのデプロイ作業で定義する各工程の詳細命令を書いてあげる必要があります。

snowflake.ymlの例は以下の通り↓

definition_version: 1 #ymlのバージョン判断用(この数字をパッケージのバージョンに反映するわけではなさそう)

native_app: #アプリを作る
  name: cli_app #アプリフォルダ名
  source_stage: app_src.stage #設定ファイルの格納ステージ名
  artifacts: #アプリフォルダとステージでの階層対応表を作る
    - src: app/*
      dest: ./

  package: #パッケージの設定
    role: ACCOUNTADMIN #使用するロール
    name: cli_app_ozawa #名前
    warehouse: DEFAULT #使用するウェアハウス

  application: #アプリの設定も同様
    role: ACCOUNTADMIN
    name: cli_app_ozawa_app
    debug: false #デバッグモードはオフにしてみた
    warehouse: DEFAULT

B. アプリパッケージのデプロイとアプリ作成

従来の手順「2~5. アプリパッケージを作成・デプロイから、アプリ作成」までを、何と、snow app runのみで完結します!!!(最高すぎる!!)

snow app run -p ./cli_app #cli_appアプリフォルダを設定

上手く動作すると、いくつかのメッセージが流れてきます。

最後にCreateされたよ!メッセージと、アプリのURLが発行されたら成功です。

........
Creating new application cli_app_ozawa_app in account.
Your application object (cli_app_ozawa_app) is now available:
https://app.snowflake.com/******/******/#/apps/application/CLI_APP_OZAWA_APP

URLを開いてみると。。。。?

おなじみのアプリ画面が表示されました!!

ちなみにアプリパッケージのデプロイと、アプリの作成が成功すると、先ほどのcli_appフォルダに、output/deployフォルダが作成されます。

この中には、Snowflake上にアップした設定ファイルが格納されます。

C. バージョン追加

それでは、作成したapp_cli_ozawaパッケージにバージョンを追加していきましょう。

snow app runコマンドで作成されるバージョンは、デフォルトで「v1」というバージョン名が付くので、今回は「v2」というバージョンを追加していきます。

実験なので、cli_appフォルダをコピーして、cli_app_2というフォルダを作成し、このアプリフォルダをもとに「v2」を作成していきます。

※ 補足として、バージョン追加コマンドで指定されるバージョン名のほうが優先されるので、厳密にはsnowflake.ymlやmanifest.ymlのバージョンは直しても直さなくてもOKですが、一応cli_app_2フォルダ内のymlのバージョン名は「v2」に直しておきましょう。

 

それでは、snow app version createコマンドで「v2」を追加します。

snow app version create v2 -p ./cli_app_2 #バージョン2を作成

さらに、すでに存在する「v2」を再びadd versionしてみましょう。すでに存在するバージョンを再びadd versionすると、パッチが1つ追加されます。

snow app version create v2 -p ./cli_app_2 #バージョン2.1を作成

ここまで実行し、バージョン一覧確認コマンドsnow app version listを実行すると、、、

snow app version list -p ./cli_app_2 #バージョン一覧を表示、アプリフォルダのうちどれか一つを選択すればOK
+-------------------------------------------------------------------------------------------------------------------------------------+
| version | patch | label | comment | created_on | dropped_on | log_level | trace_level | state | review_status |
|---------+-------+-------+---------+----------------------------------+------------+-----------+-------------+-------+---------------|
| V2 | 0 | None | None | 2024-04-04 09:52:23.820000-07:00 | None | OFF | OFF | READY | NOT_REVIEWED |
| V2 | 1 | None | None | 2024-04-04 09:58:43.592000-07:00 | None | OFF | OFF | READY | NOT_REVIEWED |
| V1 | 0 | None | None | 2024-04-04 09:58:28.828000-07:00 | None | OFF | OFF | READY | NOT_REVIEWED |
+-------------------------------------------------------------------------------------------------------------------------------------+ 

このように、v1はパッチ0を作成し、v2はパッチ0と1が作成されます。

 

おわりに

truestarでは、Snowflake導入検討、導入支援や環境構築まで幅広くサポート可能です。

Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!

また、弊社のネイティブアプリ「逆ジオコーディング」もどうぞ!無料で緯度経度から住所を紐づけられます。

これまでのSnowflakeに関する記事はこちら