Tokyo Streamlit Meetupイベントリポート


この記事は[Snowflake Advent Calendar 2023](https://qiita.com/advent-calendar/2023/snowflake)シリーズ2の23日目です。  
みんなでアドベントカレンダーを埋め尽くそうぜ！  

## Tokyo Streamlit Meetupとは

[Streamlit](https://streamlit.io/)はPython向けのWebアプリケーションフレームワークです。  
Streamlitを使うとフロントエンドの知識ゼロでもデータを可視化するためのWebアプリケーションを簡単に作れます。  

Tokyo Streamlit MeetupはそのStreamlitをテーマにみんなでOSS貢献を体験してみよう！という野心的なイベントで、
Streamlitの共同創業者であるAmanda Kelly氏、[Streamlit Creators](https://streamlit.io/creators)(トップコントリビューター)のYuichiro Tachibana氏が講演をしてくれました。  

https://info.streamlit.io/december-tokyo-meetup

このイベントのお手伝いをしてきたので、その感想を書いてみたいと思います。  

## 参加した経緯

私はSnowflake国内ユーザグループであるSnowVillageにおいて、毎週土曜日の朝にStreamlit勉強会を開催しています。  
10月上旬、このStreamlit勉強会のメンバーに「Amandaが来日するからそのときにやるイベントを一緒に考えてみない？」というお声がけがありました。  
イベントなんてほとんど初めてだから何ができるか分からない、けどチャレンジしてみたい…！ということで参加させていただきました。  

イベントの内容については、AmandaやYuichiroさんから「OSS貢献する仲間をもっと増やしたい」「そもそもOSSというくくりでオフラインでイベントをやるのは世界的には珍しい」という意見をいただいたので、そこから考えていきました。  

ちなみに当初のイベント名は「全世界初！みんなでStreamlitのコントリビューションを体験しよう！Amandaも来るよ！」にしようと言っていたんですが、
英訳して確認してもらう過程を経るうちにいつの間にか普通のイベント名になっていました。無念。  

## 感想

間違いなく参加してよかったです！  
イベントに企画側で携わったのはすごくいい経験になりました。あと単純に講演が最高でした。  
トラブルもあったのですが、みんなで乗り越えられたので自信が持てました。  
成り行きで登壇もさせていただいたので、それをきっかけに参加者の皆さんに声をかけていただいたのも嬉しかったです。  

## 各セッションの内容紹介

### セッション1「OSS貢献からキャリアを模索する」

Yuichiroさん [@whitphx_jp](https://twitter.com/whitphx_ja) の講演。[スライドが公開されています](https://slides.com/whitphx/oss-career)、素晴らしいのでぜひ見てください！  

https://slides.com/whitphx/oss-career

#### セッション1の内容抜粋

- OSS貢献のやり方は色々。簡単に始められる！
  - OSS貢献する理由は千差万別。コーディングが好きだから、プロダクトが好きだから、Techが好きだから…
    - 記事を書くのも立派なOSS貢献
- YuichiroさんのOSS貢献
  - 最初のOSSはFuelPHPの簡単なプラグイン。やってみたからやったら結果としてスターをもらえたので励みになった
  - 最初は簡単で分量の少ないコードでもいい！
- OSS貢献するなら、まずは簡単なことから
  - **OSSへの文句を書きたくなったらOSS貢献のチャンス**！
  - issue/Pull Requestする
  - issueへのいいねも立派なOSS貢献。いいねをきっかけに便利な機能が実装される！
  - フォーラムやコミュニティに参加する
  - SNSで拡散する。「OSSは使っていることを公言するだけでも貢献になる」
    - どういうドメインで使われているのか？を開発者が知るきっかけになるのですごく有意義
- OSS貢献でメシを食うには
  - 事例がまだまだ少ないので再現性があるか分からない。とはいえOSSは盛り上がっている！
  - OSS貢献していたらそのOSSを使いたい企業から採用される、みたいなことはある
  - **英語ファースト**！マーケットサイズが全然違う

#### セッション1の感想

YuichiroさんはStreamlitとHugging Faceの両方で活躍。すごすぎる。  
ほんの少しのアウトプットでいいんだよ、という励ましをいただきました！  
あと英語でのアウトプットをちょっとづつ始めたい…いや今日から始めよう！と思いました。  
OSS貢献でメシを食うところを狙うかどうかは別としても、リーチできるところが多いと何かが起こりそうですよね。  

### ワークショップ：Streamlitのコントリビューションに挑戦してみよう

Streamlitそのもののコードを改造して遊んじゃおう！という企画です。  
[ワークショップ資料](https://github.com/THiyama/codespaces-st-contribute)はHiyamaさん [@toru_data](https://twitter.com/toru_data) がコツコツと作ってくれました。

https://speakerdeck.com/toru_data/streamlit-meetup-workshop-streamlitnokontoribiyusiyonnitiao-zhan-sitemiyou

https://github.com/THiyama/codespaces-st-contribute

私はHiyamaさんが当日に登壇できなくなったためピンチヒッターとして登壇させてもらいました。  
ドキドキハラハラでしたが、Hiyamaさんの素晴らしいワークショップ資料とサポーターの皆さんの手厚いフォローのおかげでやりきりました。  
今回の改造は「st.snow()があるならst.fires()も実装しちゃおう！」というネタでしたが、何名かは無事、アプリを炎上させることに成功していました！  

https://x.com/yuta3w/status/1737729030693199901?s=20

https://x.com/kkkida_twtr/status/1737722305953030574?s=20

手順通りにやったのになぜか動かないという方が数名いて、トラブルシューティングしきれなかったのは本当に申し訳ない…今後隙あらばリベンジしたいですね。
それにしても、フォークしてコードを書き換えてビルドして、までやったならもうissueを英語で書くなんてイージーゲームですよね！  

### セッション2「PyGWalker×Streamlitの可能性を探求！」

[Shimadaさん](https://www.linkedin.com/in/takafumi-shimada-b29096221/)による講演。PyGWalkerはTableau風のGUIでデータを探索・可視化できるPythonライブラリです。  

#### セッション2の内容抜粋

- この講演のきっかけ：PyGWalkerの創業者にこれ面白いね、Snowflakeのコミュニティで紹介してみるよ…と伝えたら本当にSnowflakeに対応しちゃった！
  - Streamlitを使っているみんなの声、つまりコミュニティの声は新しい価値を実現するきっかけになる！
  - ちょっとしたアイディアでもいいので伝えていこう！それが新しい価値の実現に繋がる
- このイベントをきっかけにコミュニティの声を伝えたらこんなことができた！という後日談もしたい

https://x.com/SnowflakeDB_jp/status/1737728408149483624?s=20

#### セッション2の感想

Yuichiroさんのセッションとメッセージが繋がっていて素晴らしい！  
このOSSいいよね、こういうことができるといいよね、という声を発信するというのはすごい可能性を秘めているんだと感動しました。  
あと、PyGWalkerのデモがめちゃめちゃ盛り上がっていました！Data Painterはかなりインパクトありますね。  

https://github.com/Kanaries/pygwalker-data-painter-demo

### セッション3「Streamlitコミュニティへのメッセージ」

Amandaによる講演！このイベントのメインコンテンツです！  

#### セッション3の内容抜粋

- 以前は自然言語処理をやっていた。新しいことをやるためのツールが課題に
  - データを理解するためにアプリケーションを作るんだけどとにかく大変
  - 後々共同創業者になるAdrienやThiagoは株式予測で遊んだりもしていた
- AdrienやThiagoはそれらの取り組みの中でPythonでVisualizationするフレームワークのアイディアを思いついてお互いに共感した
  - Amandaもそのアイディアの面白さを理解したので、Babyがいたがパートナーの協力でJOINすることに
  - そのBabyとStreamlitは同じ年に誕生！
- アイディア
  - データアプリって試行錯誤的に作るよね、という点にフォーカス
  - このアイディアがコミュニティの中でブラッシュアップされて今に繋がる。コミュニティの声が大事なのは今も変わらない
- データの実用化までのステップは10ステップ以上ある。それを3ステップにしたい！
  - Fast, fast and fast!
  - みんなデータに対して疑問を持って色々調べる。でも結果に繋がるのはほんの一部。なのでその過程が大変だと諦めちゃう
  - つまり、ステップを減らすということは、Streamlitはデータとチームのインタラクションを迅速化するということ！

![streamlit_traditional_steps](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/eda5996c-7385-72d0-ee17-99ae7e3d65eb.jpeg)

- データとチームのインタラクションが迅速化されたときに実現する世界とは
  - チーム：インシデントが増加しているっぽい
  - データとのインタラクション：じゃあインシデント数をグラフで確認しよう
  - チーム：その原因は？
  - データとのインタラクション：DataFrameでドリルダウンして原因を確認して、その原因にフラグを立てよう
  - チーム：インシデントが他チームに影響しているんじゃないの？
  - データとのインタラクション：じゃあサマリ統計を表示したり、そのインシデントに関するドキュメントへのリンクを表示したりしよう
- SnowflakeにJOINすることになったが、そのポイントは…
  - エンタープライズソフトウェアよりもOSSの方が楽しい
  - Snowflakeはそれに理解を示して後押ししてくれた！
- Streamlitのこれから
  - Magical Experiencesの実現を目指している。各機能領域でまだまだ足りないので改善していくよ
  - その原動力はコミュニティ！
- **プライベートプレビューな機能のデモ**
  - どういう機能がリリースされる予定なのかは[ロードマップ](https://roadmap.streamlit.app/)を確認して
- まとめ
  - Streamlitはコミュニティのために改善しているし、コミュニティがStreamlitに何をするべきかを教えてくれる
    - それはChatGPTが教えてくれないこと！

#### セッション3の感想

StreamlitのビジョンやOSSへの熱意がストレートに伝わってきてめちゃめちゃ最高でした。  
創業秘話からStreamlitのこれからまで、一貫したストーリーになっているのが素晴らしかったです。  
英語のセッションだったのにすごく分かりやすいんですよね。(SnowflakeのエヴァンジェリストであるKTさんも逐次通訳してくれた)  
あと、ふにゃふにゃのイラストがあちこちで使われているのもちょっと楽しかった。Adrienが描いたって言ってたかな。  

![streamlit_illustration](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/e2fcb060-7fe2-811f-e92e-46b808507bc6.jpeg)

懇親会では完全にAsk Me Anythingな状態でした。  
Streamlit in Snowflakeのバージョン違いや機能制約に起因するフラストレーションはよく理解しているということで、  
リリースタイミングにラグが生じるのは避けられないけど将来はラグの程度は安定するよ…ということでした。  
楽しみ！  

## おわりに

参加者の皆さんには感想をポストするだけでもOSS貢献になるというのがすごく伝わったんじゃないかなかと思います。  
ちなみに、年明けにさっそくStreamlitのイベントをやる予定です！  
ぜひ参加して「Streamlitってこういうことできそうだよね、できたらいいよね」という感想をポストしてください！  

https://techplay.jp/event/930024

応援うちわもきっとOSS貢献。  

https://x.com/SnowflakeDB_jp/status/1737732207572369674?s=20