「仮想通貨の価格変動、リアルタイムで追いたいけど難しそう…」そう思っているあなたに朗報です!🎉
Python・WebSocket・Reactを組み合わせると、ポーリングなしでビビッと動くトレーディングダッシュボードが作れちゃうんですよね。今回はその最小構成をわかりやすく解説します。
🔧 全体の構成をざっくり理解しよう

まず全体像を把握しておきましょう。イメージとしてはこんな流れです。
- ✅ Python側:Binance の WebSocket API からリアルタイム価格を取得
- ✅ シグナル生成:モメンタム(勢い)をもとに売買サインを簡易計算
- ✅ React側:WebSocket でデータを受け取り、画面をリアルタイム更新
ポーリング(定期的にサーバーへ問い合わせる方式)と違い、WebSocket はサーバー側から「変化があったよ!」と通知してくれる仕組みです。だから無駄なリクエストがなくなり、レスポンスも爆速になります。
🐍 Python:WebSocketで価格データを取得する
まずはPython側のコードです。websockets ライブラリを使ってBinanceのストリームに接続します。
# ライブラリのインストール
# pip install websockets asyncio
import asyncio
import websockets
import json
# Binance の WebSocket エンドポイント(BTCUSDTの1秒ティック)
URI = "wss://stream.binance.com:9443/ws/btcusdt@trade"
async def stream_price():
async with websockets.connect(URI) as ws:
while True:
msg = await ws.recv() # メッセージを受信
data = json.loads(msg)
price = float(data["p"]) # 現在価格を取得
print(f"BTC/USDT: {price}")
asyncio.run(stream_price())
ポイントをまとめるとこんな感じです👇
- asyncio + websockets の組み合わせで非同期処理が超シンプルに書ける
data["p"]が約定価格(price)を示すフィールド- 接続が切れても再接続ロジックを追加すれば本番運用にも耐えられる
⚛️ React:WebSocketでデータをリアルタイム表示
次はフロントエンドです。ReactのカスタムHookを使うと、WebSocket接続がスッキリ書けます。
// useCryptoStream.js(カスタムHook)
import { useEffect, useState } from "react";
export function useCryptoStream(url) {
const [price, setPrice] = useState(null);
useEffect(() => {
const ws = new WebSocket(url); // WebSocket接続を開く
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
setPrice(parseFloat(data.p)); // 価格をStateに保存
};
return () => ws.close(); // クリーンアップで接続を閉じる
}, [url]);
return price;
}
ここが重要です!useEffect の返り値でちゃんとWebSocketを閉じているのがポイント。メモリリーク防止に必須です。
📊 モメンタムシグナルの考え方
直近の価格リストを保持して、直前より上がっていたら「買いシグナル」、下がっていたら「売りシグナル」という超シンプルな判定も追加できます。つまり、データさえストリーミングできれば、あとはPythonのロジックを育てていくだけです。
まとめ
今回は Python + WebSocket + React を使ったリアルタイム仮想通貨ダッシュボードの最小構成を解説しました。難しそうに見えて、コアな部分は意外とシンプルですよね😊
まずはPython側だけ動かして価格が流れてくるのを確認するところから始めてみてください。「むずかしそう」が「できそう」に変わる瞬間、きっと楽しいですよ。ぜひ試してみてください!🚀





