テンプレートからプロジェクトをブートストラップする

プロジェクトのインスタンス化を容易にするために、 Snowflake CLI はプロジェクトのテンプレート化を実装しています。 独自のプロジェクトテンプレートを作成する ことも、Snowflake が Snowflake CLI templates 公開 Git リポジトリで提供しているサンプルを使用することもできます。

snow init コマンドは、プロジェクト・ディレクトリを作成し、指定されたテンプレートで定義されたファイル構造をその中に入れます。

  • --no-interactive オプションを指定しない場合、 -D (または --variable)オプションで指定しないテンプレート(template.yml)で指定された各変数について、コマンドのプロンプトが表示されます。

  • --no-interactive オプションを指定した場合、コマンドは(テンプレートで定義された)変数のデフォルト値を使用します。テンプレートが変数のデフォルト値を定義しておらず、 -D オプションを使用してデフォルト値を指定しなかった場合、コマンドはエラーで終了します。

snow init コマンドは次の構文を使用します。

snow init PATH [--template-source SOURCE] [--template NAME] [-D key1=value1 -D key2=value2...] [--no-interactive]
Copy

条件:

  • PATH は、コマンドがプロジェクトを初期化する新しいディレクトリです。既存のディレクトリを指定すると、コマンドはエラーで終了します。

  • [--template-source SOURCE] は以下のいずれかです。

    • テンプレート・ディレクトリのローカル・ファイル・パス。

    • プロジェクトテンプレートを含むディレクトリへの有効なGit URL。指定しない場合、コマンドのデフォルトは Snowflake CLI templates Git リポジトリになります。

  • [--template NAME] は、テンプレートとして使用する SOURCE のサブディレクトリを指定します(リモート・ソースに便利です)。提供されない場合、 SOURCE は1つのテンプレートとして扱われます。

  • [-D key1=value1 -D key2=value2...] は1つ以上の名前と値のペアのリストで、( template.yml 内の)テンプレートで定義された変数の値を提供します。このオプションで指定した変数に対して、コマンドはプロンプトを表示しません。

  • [--no-interactive] はユーザー入力のプロンプトを無効にします。このオプションを使用する場合、 [-D key1=value1 -D key2=value2...] オプションで必要な値をすべて指定する必要があります。そうでない場合、コマンドはエラーとなります。

詳細については、 snow init コマンドリファレンスをご参照ください。

  • デフォルトリポジトリの example_snowpark テンプレートからプロジェクトを初期化します。

    snow init my_snowpark_test_app --template example_snowpark
    
    Copy

    以下のためのコマンドプロンプトが表示されます(角括弧内はデフォルト値)。

    Project identifier (used to determine artifacts stage path) [my_snowpark_project]:
    What stage should the procedures and functions be deployed to? [dev_deployment]: snowpark
    Initialized the new project in my_snowpark_test_app
    
  • ローカル・テンプレートからプロジェクトを初期化します。

    snow init new_streamlit_project --template-source ../local_templates/example_streamlit -D query_warehouse=dev_wareshouse -D stage=testing
    
    Copy

    この例では、 query_warehousestage 変数が -D オプションで指定されているので、コマンドは以下のプロンプトだけを表示します。

    Name of the streamlit app [streamlit_app]:
    Initialized the new project in new_streamlit_project
    

カスタムフィルターの作成

テンプレートレイアウト

プロジェクト・テンプレートには、snow init コマンドがテンプレートをどのようにレンダリングするかを説明するデータを含む template.yml ファイルが必要です。ファイルがテンプレートのルート・ディレクトリに存在しない場合、 snow init はエラーで終了します。詳細については、 template.yml syntax をご参照ください。

テンプレート構文

テンプレート変数と式は:codenowrap:<! ... !> で囲む必要があります。 Snowflake CLI は、例えば基本的な jinja2 式とフィルターもサポートしています。

some_file_spec:
  filename: <! file_name !>
  size: "<! [ max_file_size_mb, 4 ] | max !> MB"
Copy

Snowflake CLI プロジェクト・テンプレートは以下の予約変数とフィルターもサポートしています。

  • project_dir_name 変数は、作成されたプロジェクトのルート・ディレクトリに自動的に解決されます。

    例えば、 snowflake.yml ファイルに次のものが含まれているとします。

    definition_version: "1.1"
    snowpark:
      project_name: <! project_dir_name !>
      ...
    
    Copy

    次に以下のコマンドを実行して、カスタム・テンプレートからプロジェクトを初期化します。

    snow init examples/new_snowpark_project --template-source my_example_template/
    
    Copy

    snow init コマンドは、 snowflake.yml ファイルを以下のようにレンダリングします。

    definition_version: "1.1"
    snowpark:
      project_name: new_snowpark_project
      ...
    
    Copy
  • to_snowflake_identifier フィルターは、ユーザーから提供された文字列を正しくフォーマットされたSnowflake識別子にフォーマットします。

    Snowflakeでは、変数がSnowflakeオブジェクトを参照する場合にこのフィルターを使用することを強く推奨しています。

    例えば、 snowflake.yml ファイルに次のものが含まれているとします。

    definition_version: "1.1"
    streamlit:
      name: <! name | to_snowflake_identifier !>
      ...
    
    Copy

    次に以下のコマンドを実行して、カスタム・テンプレートからプロジェクトを初期化します。

    snow init examples/streamlit --template-source my_example_template2/ -D name='My test streamlit'
    
    Copy

    snow init コマンドは、 snowflake.yml ファイルを以下のようにレンダリングします。

    definition_version: "1.1"
    streamlit:
      name: My_test_streamlit
      ...
    
    Copy

    文字列が有効なSnowlake識別子に変換できない場合、snow init コマンドはエラーで以下のように終了します。

    snow init examples/streamlit --template-source my_example_template2/ -D name=1234567890
    
    Copy
    ╭─ Error ────────────────────────────────────────────────────────────────────────╮
    │ Value '123456789' cannot be converted to valid Snowflake identifier.         │
    │ Consider enclosing it in double quotes: ""                                   │
    ╰────────────────────────────────────────────────────────────────────────────────╯
    

template.yml プロジェクト・テンプレート・ファイルについて

template.yml プロジェクト・テンプレート・ファイルには、プロジェクトのレンダリングに必要なすべてのデータが格納されています。例:

minimum_cli_version: "2.7.0"
files_to_render:
  - snowflake.yml
variables:
  - name: name
    default: streamlit_app
    prompt: "Name of the streamlit app"
    type: string
  - name: stage
    default: my_streamlit_stage
    prompt: "What stage should the app be deployed to?"
    type: string
  - name: query_warehouse
    default: my_streamlit_warehouse
    prompt: "On which warehouse SQL queries issued by the application are run"
    type: string
Copy

次の表は、 template.yml プロジェクト・テンプレート・ファイルのプロパティの一覧です。

テンプレートのプロパティ

プロパティ

定義

minimum_cli_version

オプション文字列 (デフォルト: None)

最小 Snowflake CLI バージョン。指定された場合、snow init コマンドはインストールされている Snowflake CLI のバージョンをチェックし、インストールされているバージョンが指定されたバージョンより低い場合はエラーで終了します。

files_to_render

オプション文字列リスト (デフォルト: []

snow init コマンドでレンダリングされるファイルのリスト。各パスはテンプレートルートからの相対パスでなければなりません。

注釈

このリストに含まれていないテンプレートファイルは新しいプロジェクトに追加されますが、その内容は変更されません。

変数

オプション, 変数リスト (デフォルト: []

テンプレート変数のリスト。プロンプトのカスタマイズ、オプション変数のデフォルト値の提供、基本的な型チェックをサポートしています。詳細については、以下の 変数プロパティ・パラメータ の表をご参照ください。変数の値は、このリストから順番に決定されます。

このリストから snowflake.yml ファイルで使用されている変数を省略すると、snow init コマンドは以下のエラーで終了します。

╭─ Error ─────────────────────────────────────────────────────────╮
│ Cannot determine value of variable undefinded_variable        │
╰─────────────────────────────────────────────────────────────────╯

以下の表に、変数プロパティのパラメータを示します。

可変プロパティ・パラメータ

プロパティ

定義

name

required, string

変数の名前。これは、 <! name !> のようなテンプレートファイルや、 -D name=value のような -D オプションで使用されます。

プロンプト

optional, string

値を取得するためにユーザーに表示するプロンプト。このパラメータを設定しないと、コマンドはパラメータ名をプロンプト・テキストとして表示します。

プロンプトを次のように定義します。

variables:
  - name: project_id
    prompt: The identifier for the project
Copy

snow init は、 project_id 変数に対してこのプロンプトを表示します。

The identifier for the project:

デフォルト

オプションstring/int/float

変数のデフォルト値。提供されない場合、変数は必須として扱われるため、ユーザーはプロンプトの後に値を提供するか、 -D コマンドラインオプションで指定する必要があります。

以下の例では、2つの変数をデフォルト値で定義しています。

variables:
  - name: max_file_size_mb
    default: 16
  - name: file_name
    default: 'default_file_name.zip'
Copy

実行すると、 snow init コマンドはこれら2つの変数に対して以下のプロンプトを表示します。

file_name [default_file_name.zip]:
max_file_size_mb [16]: 5
Copy

この例では、 file_name 変数にデフォルト値があるため、コマンドはデフォルト値(default_file_name.zip)を使用し、 max_file_size_mb にユーザーから提供された値(5)を設定します。

タイプ

optional, string

変数のデータ型。有効な値には、 stringintfloat が含まれます。指定がない場合、コマンドは値を string と見なします。

以下の例では、 int データ型として変数を定義しています:

variables:
  - name: max_file_size_mb
    type: int
Copy

実行時、snow initコマンドは、ユーザーが間違ったデータ型の値を入力した場合、以下のエラーを表示します。

max_file_size_mb: not an int
Error: 'not an int' is not a valid integer.
max_file_size_mb: 14.5
Error: '14.5' is not a valid integer.
max_file_size_mb: 6
Initialized the new project in example_dir