魔法が楽しいものだと彼らは知らないでしょうから
Databricksでカオスな魔法を生成する話
「Databricksって、データ分析とか機械学習とかのための真面目なツールでしょ?」
確かにそうなんですが、たまには遊んでもいいんじゃないかなと思って、カオスな魔法生成アプリを作ってみました。
葬送のフリーレンに出てくる魔法使いメトーデの「魔法が楽しいものだと彼らは知らないでしょうから」という言葉が好きで、技術も同じだな(?)って思ったので、ビジネスのためだけに使うのはもったいない。もっと楽しんでいいはず。
作ったもの
ボタンを押すと、ランダムな数式で魔法みたいなものが生成されるアプリです。
アプリの全体画面。メトーデの名言と✨ボタンだけのシンプルなUI
- カオスな抽象魔法と幾何学的な美しいパターンがランダムに出現
- 毎回違う色とパターン
- SQLで数式を生成して、Unity Catalogのテーブルに保存
- Plotlyでビジュアライゼーション
幾何学魔法で生成されたパターン。魔法陣っぽい感じ。領域展開っぽくもある


カオスで生成された抽象魔法。複数の波形が干渉し合って予測不可能なパターンを作る
点描画みたいで素敵。魔法の軌跡っぽい


ちなみに、このアプリはDatabricksのエージェントモード(GenieCode)だけで作りました。自分でコードを一行も書いていません。「こういうの作りたい」って話すだけで、エージェントが全部やってくれました。
この記事執筆自体もかなりエージェントに頑張ってもらいました。
技術スタック
- Databricks Apps (Streamlit):UI
- Unity Catalog:データ保存
- SQL Warehouse:クエリ実行
- Plotly:ビジュアライゼーション
- Python:数式生成ロジック
Databricksの中だけで完結するので、外部サービス不要で動きます。
実装のポイント
1. 数式の生成
カオスな魔法は、複数の三角関数を組み合わせて作ります。
def generate_chaotic_art():
base_functions = [
"sin(id * {f})",
"cos(id * {f})",
"sin(id * {f1}) * cos(id * {f2})",
"exp(sin(id * {f})) - 2",
# ... その他いろいろ
]
# 1〜3層の関数を重ねる
chaos_level = random.choice([1, 2, 3])
# ランダムなパラメータで組み合わせ
for _ in range(chaos_level):
func = random.choice(base_functions)
amp = random.uniform(10, 150)
freq = random.uniform(0.005, 0.15)
# ノイズも追加...
幾何学的なパターンは、よりシンプルな定番の数式を使います。
def generate_geometric_art():
patterns = [
# バラ曲線
{
"name": "魔法陣",
"x": "{amp} * cos({k} * id * 0.01) * cos(id * 0.01)",
"y": "{amp} * cos({k} * id * 0.01) * sin(id * 0.01)",
},
# スピログラフ
# リサジュー曲線
# ... など
]
2. SQLでデータ生成
生成した数式をSQLに埋め込んで、テーブルに保存します。
query = f"""
CREATE OR REPLACE TABLE workspace.schema.table AS
WITH base_data AS (
SELECT id FROM range(10000)
)
SELECT
id,
{x_formula} AS x,
{y_formula} AS y,
sqrt(power({x_formula}, 2) + power({y_formula}, 2)) AS color_val
FROM base_data
"""
range(10000)で10,000点を生成して、それぞれの点に対して数式を適用。この方法だと、Databricksの分散処理の恩恵も受けられます(といっても1万点なので一瞬ですが)。
3. ミニマルなUI
StreamlitのUIは極限までシンプルにしました。
st.set_page_config(layout="wide", page_title="Data Art", page_icon="✨")
# メトーデの名言だけ表示
st.markdown("""
<p style='text-align: center; color: #9CA3AF; font-style: italic;'>
魔法が楽しいものだと彼らは知らないでしょうから。
</p>
""", unsafe_allow_html=True)
# ボタンは✨だけ
if st.button("✨", type="primary", use_container_width=True):
# 魔法を詠唱
軸もタイトルもカラーバーも消して、黒い背景に魔法だけが浮かぶようにしています。
fig_scatter.update_layout(
xaxis=dict(visible=False),
yaxis=dict(visible=False),
showlegend=False,
plot_bgcolor='#0a0a0a',
paper_bgcolor='#0a0a0a',
margin=dict(l=0, r=0, t=0, b=0),
)
fig_scatter.update_coloraxes(showscale=False)
4. カラースキームもランダム
Plotlyには15種類くらいのカラースキームがあるので、それもランダムに選びます。
colorscales = [
'viridis', 'plasma', 'inferno', 'magma',
'turbo', 'rainbow', 'twilight', 'hsv', ...
]
st.session_state['colorscale'] = random.choice(colorscales)
同じ数式でも色が違うだけで全然印象が変わるので、これも重要なバリエーション要素です。
使い方
- Databricks Appsとしてデプロイ
- ✨ボタンを押す
- 魔法が詠唱される(データが生成される)
- 魔法が表示される
- また押したくなる(無限ループ)
エージェントモードで作る体験
このアプリを作るとき、最初は「ダッシュボードを表示するアプリを作りたい」くらいの曖昧な要望から始まりました。
そこからエージェントと会話しながら、
- 「データをボタンで変更できるようにしたい」
- 「もっとバリエーションが欲しい」
- 「幾何学模様も出したい」
- 「UIをもっと魔法っぽくして」
みたいな感じで、どんどん改善していきました。
コードを書かないで済むのももちろん良いんですが、アイデアを形にする速度が圧倒的に速いのが一番の利点だなと感じました。思いついたらすぐ試せる。これが楽しい。
なぜこんなものを作ったのか
「楽しいから」です。
データエンジニアリングって、ETLパイプラインを組んだり、パフォーマンスチューニングしたり、真面目な仕事が多いですよね。もちろんそれも大事だし楽しいんですが、たまにはこういう意味のないことをやるのもいいなと。
数式をいじってると、「この係数を変えたらどうなるんだろう」とか「この関数を重ねたら面白いかも」とか、小学生が実験してるみたいな気持ちになります。それが楽しい。
ビジネス的な価値はないかもですが、技術的な好奇心は満たされます。
技術は本来楽しいもの
プログラミングを始めたきっかけって、たぶん「何か面白いものを作りたい」とか「こんなことができるんだ!」っていうワクワクだったと思うんです。
でも仕事にすると、どうしても純粋な楽しさを忘れがちになる。
たまにはこういう遊びをすることで、「そうだ、技術って楽しいものだった」って思い出せる気がします。
おわりに
Databricksで遊ぶ方法はいろいろあると思うんですが、今回は魔法生成をやってみました。
「ビジネスに役立つデータ基盤」としてのDatabricksも素晴らしいですが、「遊べるプラットフォーム」としてのDatabricksもなかなか良いものです。
魔法が楽しいものだと、もっと多くの人に知ってもらえたらと。

