注:本記事は(2022年3月2日)に公開された(Democratizing Data Apps — Snowflake to Acquire Streamlit)を翻訳して公開したものです。

過去数年間で、BlackRock、Instacart、Laceworkなどの提供する大規模な消費者向けアプリを含めてSnowflake上に構築されたデータアプリの数が驚異的に増加しています。私たちは、Snowflakeプラットフォームが開発者によるスピーディーなアプリ開発と自由な拡張、さらには従業員、パートナー、顧客など全てのデータユーザー向けの充実したインサイトの提供に役立っていることをとても嬉しく思います。

ただし、Snowflakeの最終的な企業使命は世界全体のデータの価値を高めることであり、依然として何百万人ものデータサイエンティストやデベロッパーがフルスタックのエンジニアリングチームへのアクセスを持っていません。こうした個々のデベロッパーやデータサイエンティスト、機械学習エンジニアがそれぞれ自分の力で世界トップクラスのデータアプリを構築しシェアできるようにするにはどうすればよいか、私たちは考えました。

その実現に近づく一歩として、このたび世界最高のデータアプリケーション構築フレームワークであるStreamlitが、同じく世界最高のデータプラットフォームであるSnowflakeに加わることになりました。正式な契約締結はもう少し先で一般的な契約条件の満了を待たねばなりませんが、ここでプレビューを紹介したいと思います。

数年前から、複数のユーザー企業がStreamlitとSnowflakeの両方を使用してアプリを構築していたため、そのエクスペリエンスがスムーズなものになっているかどうかを確認するために私たちはStreamlitとの交流を始めました。昨年には内部ハッカソンも開催し、複数のチームがStreamlitを使用して、極めて高品質なアプリをわずか数日で、わずか数行のPythonでSnowflake上に構築することに成功しました。これをきっかけに、StreamlitとSnowflakeより緊密に結びつけることができれば、より多くの人々にデータアプリを利用してもらえるようになるのではないかと考えたのです。

どれだけ強力になるかというのは、簡単な例をお見せした方がわかりやすいでしょう。以下は、カリフォルニア州のとあるカウンティでの新型コロナ感染症の感染者数を示すStreamlit/SnowflakeアプリのPythonコードの全体像です。Snowflakeのデータマーケットプレイスで無料で入手できるデータセットを使用しています。現在プレビュー段階のSnowpark for Pythonを使用して、Pure Pythonでアプリを記述してデータフレームオペレーションでSQLを置き換えることもできます。

import streamlit as st
import pandas as pd
import snowflake.connector

# Open a connection to Snowflake, using Streamlit's secrets management
# In real life, we’d use @st.cache or @st.experimental_memo to add caching
conn = snowflake.connector.connect(**st.secrets["snowflake"])

# Get a list of available counties from the State of California Covid Dataset
# Data set is available free here: https://app.snowflake.com/marketplace/listing/GZ1MBZAUJF
# More info on the data set: https://www.snowflake.com/datasets/state-of-california-california-covid-19-datasets/ 
counties = pd.read_sql("SELECT distinct area from open_data.vw_cases ORDER BY area asc;", conn)

# Ask the user to select a county
option = st.selectbox('Select an area:', counties)

# Query the data set to get the case counts for the last 30 days for the chosen county
cases = pd.read_sql(f"SELECT date day, SUM(cases) CASES FROM open_data.vw_cases WHERE date > dateadd('days', -30, current_date()) AND area = %(option)s GROUP BY day ORDER BY day asc;", conn, params={"option":option})
cases = cases.set_index(['DAY'])

# Render a line chart showing the cases
f"Daily Cases in {option} over the last 30 days"
st.line_chart(cases)

実際のアプリではこのように表示されます。

ハッカソンの直後、Streamlit創設者であるAdrien、Thiago、Amandaの3名と、SnowflakeとStreamlitの併用を更に円滑化するにはどうすればよいかを話し合いました。その結果、デベロッパーやデータサイエンティストの支援という両社のビジョンが驚くほど一致していることがわかりました。SnowflakeもStreamlitも、美しく強力なデータアプリを簡単に構築できるようユーザーを支援し、それによってあらゆる種類のデータの価値を最大化することを目標としています。私たちはこうした話し合いを通じて、Streamlitの使い勝手、柔軟性、オープンソースコミュニティと、Snowflakeのスケーラビリティ、広範囲なデータ、ガバナンスを組み合わせれば、まったく新しいレベルのデータアプリの構築が可能になることに気づいたのです。SnowflakeとStreamlitそれぞれの共同創設者であるBenoitとAdrienは、SnowflakeのStreamlitのパートナーシップがデータサイエンティストとデベロッパーにとって至上の組み合わせである理由についてトークセッションの中で詳しく語っています。

買収の成立後、Streamlitの創設者やその優秀なチームだけでなく、Streamlitのコミュニティ全体とコラボレーションしていけるのを非常に楽しみにしています。数万人のStreamlitデベロッパーと百人以上のコントリビューターがオープンソースプロジェクトに参加しています。Streamlitコミュニティは現在のStreamlitを作り上げた重要な要素であり、今後のStreamlitのあり方を形成するうえでも重要な存在です。Streamlitの魅力の1つは、誰でも、どこでもアプリを作成できるだけでなく、ユーザー自らがStreamlitの一部になれることでもあります。Snowflakeは今後も彼らのオープンソースプロジェクトとコミュニティの支援と発展を後押しします。

これ以外にも新しい胸躍る展開が目白押しです。6月のSnowflake Summitではユーザーの皆さんとお会いできるのを楽しみにしています。今後皆さんと共にどのように協力してより簡単によりパワフルなデータアプリを構築していくのかを詳しくお話したいと考えています。

最後に、データアプリケーションの世界最高のプラットフォームを構築するSnowflakeとStreamlitにぜひご参加ください。アプリの作成、Streamlitフォーラムでのコミュニティのメンバーとのやり取りなど自由にお楽しみください、また、現在Snowflakeでは多くの人材を募集していますので、そちらも是非ご確認ください。

これから皆さんと共に何かを構築できるか、一緒に確かめる旅に出ましょう。