Raspberry Piは低消費電力・低コストで24時間365日稼働できる小型コンピュータです。自宅サーバーとして株価監視ツールを常時稼働させるのに最適です。
必要なもの
- Raspberry Pi 4(または3B+) ~5,000円程度
- microSDカード(16GB以上)
- 電源アダプター
- (オプション)モバイルディスプレイ
初期セットアップ
# Raspberry Pi OSを最新に更新
sudo apt update && sudo apt upgrade -y
# Python環境を準備
python3 --version # Python 3.9+ を確認
pip3 install yfinance pandas numpy matplotlib requests
# 仮想環境を作成(推奨)
python3 -m venv ~/stock-env
source ~/stock-env/bin/activate
pip install yfinance pandas numpy requests
24時間監視スクリプト
#!/usr/bin/env python3
"""stock_monitor.py - Raspberry Piで常時稼働する株価監視スクリプト"""
import yfinance as yf
import pandas as pd
import numpy as np
import time
import requests
import logging
import os
from datetime import datetime
# ログ設定
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler("/home/pi/stock_monitor.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# 設定
WATCHLIST = {
"7203.T": "トヨタ",
"9984.T": "ソフトバンクG",
"6758.T": "ソニー",
"AAPL": "Apple",
"NVDA": "NVIDIA",
}
CHECK_INTERVAL = 300 # 5分ごとにチェック
ALERT_THRESHOLD = 3.0 # 3%以上の変動でアラート
LINE_TOKEN = os.getenv("LINE_TOKEN", "") # LINE Notifyトークン
def send_line_notify(message):
"""LINE Notifyにメッセージを送信"""
if not LINE_TOKEN:
logger.warning("LINE_TOKEN not set")
return
headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
payload = {"message": f"\n{message}"}
try:
res = requests.post(
"https://notify-api.line.me/api/notify",
headers=headers, data=payload, timeout=10
)
return res.status_code == 200
except Exception as e:
logger.error(f"LINE通知エラー: {e}")
return False
def is_trading_hours():
"""取引時間内かどうかを確認(東証)"""
now = datetime.now()
if now.weekday() >= 5: # 土日
return False
hour, minute = now.hour, now.minute
# 9:00-11:30, 12:30-15:30
morning = (9, 0) <= (hour, minute) <= (11, 30)
afternoon = (12, 30) <= (hour, minute) <= (15, 30)
return morning or afternoon
prev_prices = {}
def check_stocks():
global prev_prices
alerts = []
for ticker, name in WATCHLIST.items():
try:
df = yf.download(ticker, period="5d", progress=False, auto_adjust=True)
if df.empty:
continue
current = float(df["Close"].iloc[-1])
if ticker in prev_prices:
change = (current / prev_prices[ticker] - 1) * 100
if abs(change) >= ALERT_THRESHOLD:
msg = f"[{name}({ticker})] 急変動: {change:+.1f}% (現値:{current:.0f})"
alerts.append(msg)
logger.warning(msg)
prev_prices[ticker] = current
logger.info(f"{ticker}: {current:.2f}")
except Exception as e:
logger.error(f"{ticker}取得エラー: {e}")
if alerts:
msg = "\n".join([f"【株価アラート】"] + alerts)
send_line_notify(msg)
def main():
logger.info("株価監視開始")
send_line_notify("【株価監視】起動しました")
while True:
try:
if is_trading_hours():
check_stocks()
else:
logger.info("取引時間外 - スキップ")
time.sleep(CHECK_INTERVAL)
except KeyboardInterrupt:
logger.info("監視を停止")
break
except Exception as e:
logger.error(f"予期しないエラー: {e}")
time.sleep(60)
if __name__ == "__main__":
main()
systemdサービスとして登録(自動起動)
# サービスファイルを作成
sudo nano /etc/systemd/system/stock-monitor.service
[Unit]
Description=Stock Price Monitor
After=network.target
[Service]
User=pi
WorkingDirectory=/home/pi
Environment="LINE_TOKEN=your_line_notify_token"
ExecStart=/home/pi/stock-env/bin/python3 /home/pi/stock_monitor.py
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
# サービスを有効化・起動
sudo systemctl daemon-reload
sudo systemctl enable stock-monitor
sudo systemctl start stock-monitor
# 動作確認
sudo systemctl status stock-monitor
tail -f /home/pi/stock_monitor.log
消費電力・コスト
Raspberry Pi 4の消費電力は最大7W程度。24時間365日稼働した場合:
- 年間電力: 7W × 24h × 365日 = 約61kWh
- 電気代: 61kWh × 25円 = 約1,500円/年
まとめ
Raspberry Piを使えば年間1,500円程度の電気代で24時間365日の株価監視システムが構築できます。LINE通知と組み合わせることで、急変動を即座に知ることができます。

