デプロイされたStreamlitアプリの編集¶
Snowsight でStreamlitアプリをデプロイした後、 Snowsight または SQL コマンドを使ってアプリコードと依存関係の両方を編集できます。変更がどのように有効になるかは、ランタイム環境とアプリの作成方法によって異なります。
注釈
ROOT_LOCATION パラメーターで作成されたアプリ(レガシーアプリ)は編集機能が限られています。 FROM パラメーターを使用して完全な機能を使えるよう変換する必要があります。詳細については、 さまざまなタイプのStreamlitオブジェクトについて理解する をご参照ください。
このページでは、 FROM パラメーターで作成されたアプリのみを説明します。
コンテナとウェアハウスの両方のランタイム環境は、複数の人が同時に同じアプリを編集すると、競合状態に陥る可能性があります。詳細とベストプラクティスについては、以下の 共同編集に関する考慮事項 セクションをご参照ください。
編集方法¶
Snowsight のブラウザー内エディターにより、または SQL コマンドを使用してファイルをアップロードすることにより、アプリを編集できます。
Snowsight にサインインします。
ナビゲーションメニューで、 Projects » Streamlit を選択し、Streamlitアプリを選択します。
右上隅の Edit を選択します。
ファイルエクスプローラーで、編集する新しいファイルを選択するか、作成します。
既存のファイルを編集するには、ファイルエクスプローラーから選択します。
新しいファイルを作成するには、 + (Add) » Create new file を選択し、ファイル名を入力して、 Create を選択します。ファイル名には、
subdir/new_file.pyのようにサブディレクトリを含めることができます。ローカルマシンからファイルをアップロードするには、 + (Add) » Upload file を選択し、アップロードするファイルを選んで、必要に応じてファイル名とパスを変更した後、 Upload を選択します。
エディターペインで変更を加えます。
数秒後に、変更がアプリのソース場所に自動的に保存されます。
オプション:Run を選択します。
変更が保存されるまで数秒を待ちたくない場合は、 Run を選択して変更をすぐにコピーできます。
アプリがウェアハウスランタイムを使用している場合、ビューアーは Run を選択してアプリインスタンスへの変更をコピーする必要があります。アプリがコンテナランタイムを使用している場合、変更はライブアプリのソースに直接保存され、次回アプリを操作するときにすべてのビューアーに表示されます。
ステージに編集されたアプリファイルがある場合は、次のコマンドを使用してアプリを CREATE OR REPLACE できます。
CREATE OR REPLACE STREAMLIT my_app
FROM '@my_stage/app_folder'
MAIN_FILE = 'streamlit_app.py'
QUERY_WAREHOUSE = my_warehouse
RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
COMPUTE_POOL = my_compute_pool
EXTERNAL_ACCESS_INTEGRATIONS = (pypi_access_integration);
代わりに、アプリファイルをその場で更新する場合や、アプリファイルのサブセットのみを更新する場合は、以下のコマンドを使用できます。
アプリのソース場所の URI を取得します。
DESCRIBE STREAMLIT my_app;
live_version_location_uri値は、アプリのソース場所です。これをコピーして次のステップで使用します。PUT または COPY FILES を使用して、1つ以上の更新されたアプリファイルをソース場所にアップロードします。
COPY FILES INTO '<live_version_location_uri>' FROM @my_stage FILES = ('streamlit_app.py');;
注釈
Snowflake CLI バージョン3.14.0以降が必要です。バージョン3.14以降は、デフォルトで最新の CREATESTREAMLIT 構文を使用します。
ローカルマシンに編集済みアプリファイル一式(Snow CLI 用の snowflake.yml を含む)がある場合は、以下のコマンドでアプリを再デプロイできます。
snow streamlit deploy --replace
ランタイムの動作の違い¶
編集内容がどのように有効になるかは、アプリのランタイムタイプによって異なります。
コンテナランタイム¶
コンテナランタイムアプリを編集する場合:
アプリのソースへの変更は、ライブアプリに直接影響します。
現在のビューアーには、次回アプリを操作して再実行をトリガーしたときに、更新内容が表示されます。(Streamlit 構成オプション
server.runOnSaveはデフォルトで無効になっています。)ビューアーは Run ボタンを使用できますが、現在の表示または編集セッションに変更を反映する必要はありません。
すべてのユーザーには、すぐに変更された同じアプリインスタンスが表示されます。
ライブアプリがビューアー間で共有されても、 Snowsight エディターのソースコードの表示は共有されません。そのため、コンテナランタイム上のアプリは、複数の人が同時にアプリを編集すると、競合状態に陥ることがあります。詳細とベストプラクティスについては、以下の 共同編集に関する考慮事項 セクションをご参照ください。
ウェアハウスランタイム¶
ウェアハウスランタイムアプリを編集する場合:
アプリのソースコードは、各ビューアーのインスタンスの起動時にコピーされます。
現在のビューアーは Run を選択して、セッション中にソースに加えられた更新をコピーする必要があります。
編集する人もプレビューペインに変更を表示するには、 Run をクリックする必要があります。
各ビューアーは、独自の隔離されたアプリインスタンスを取得します。
共同編集に関する考慮事項¶
複数の人が同じアプリを編集する場合は、競合の可能性があることに注意してください。複数の人が同時にアプリを編集すると、コンテナーとウェアハウスのランタイムアプリの両方が、以下の競合状態に陥ります。
競合状態¶
Snowsight エディターの仕組みは次のとおりです。
エディターを開くか、ファイルナビゲーターを使用してファイルを開くと、現在のソースコードがエディターペインにコピーされます。
エディターペインでファイルを表示している場合、他のユーザーが変更を加えても自動的に更新されることはありません。
エディターペインで変更を加えた場合、エディターペインを開いた後に他のユーザーが行った変更は自動保存により上書きされます。
競合する編集内容の自動マージはありません。
たとえば、次のシーケンスは変更を失う可能性があります。
開発者Aは PM 2:00にエディターを開きました。
開発者Bは PM 2:15に変更を加えて保存しました。
開発者Aは PM 2:30に変更を保存しました。
開発者Bの変更は失われます(開発者Aによって上書きされます)。
チーム編集のベストプラクティス¶
チームと連携する際の競合を避けるには、以下を行います。
編集を行う前にチームメンバーとコミュニケーションをとります。
ソースファイルをGitリポジトリに保存し、そこからコードをデプロイします。
変更のテストには、別の開発アプリを使用します。
Snowsight エディターをリロードして、変更を加える前に、すぐに最新バージョンを取得します。