※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。
動作確認環境:Python 3.11 / pandas 2.x / yfinance 0.2.x / requests 2.x
結論から言うと
- LINE Notifyのトークンを取得すれば、Pythonからスマートフォンに通知を送れます
requests.post()の数行だけでLINE通知の実装が完了します- 株価の条件判定(上限・下限)と組み合わせて自動アラートとして機能させられます
LINE Notifyとは
LINE Notifyは、LINEが提供するWebhookサービスです。個人のLINEアカウントに対して、外部サービスやプログラムから通知を送れます。率直に言うと、無料でAPIトークンが発行でき、Pythonとの組み合わせが簡単という点が最大のメリットという仕組みです。
ただし、2025年3月末をもってLINE Notifyは正式にサービス終了となりました。現在は後継としてLINE Messaging APIへの移行が推奨されています。本記事ではLINE Notifyの基本的な仕組みを解説しつつ、代替手段も紹介します。
LINE Notifyのトークン取得手順
(2025年3月以前に発行済みのトークンは引き続き使用できる場合があります)
- LINE Notify公式サイトにアクセス
- LINEアカウントでログイン
- 「マイページ」→「トークンを発行する」をクリック
- 通知先のトークルームを選択(1対1でも可)
- 発行されたトークンをコピーして保存
また、トークンは発行直後に一度しか表示されないため、安全な場所に保存してください。コードに直書きするのではなく、環境変数や設定ファイルで管理するのが適切です。
PythonからLINEに通知するコード
import requests
LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN" # 取得したトークンを設定
def send_line(message):
url = "https://notify-api.line.me/api/notify"
headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
data = {"message": message}
resp = requests.post(url, headers=headers, data=data)
return resp.status_code
# テスト送信
status = send_line("\nテスト:Python から LINE 通知が届きました")
print(f"送信結果: {status}") # 200 なら成功
環境変数でトークンを管理する場合は以下のようにします。
import os
import requests
LINE_TOKEN = os.environ.get("LINE_NOTIFY_TOKEN", "")
def send_line(message):
if not LINE_TOKEN:
print("LINE_NOTIFY_TOKEN が設定されていません")
return None
url = "https://notify-api.line.me/api/notify"
headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
data = {"message": message}
return requests.post(url, headers=headers, data=data).status_code
株価アラートの条件設定
import requests
import yfinance as yf
import pandas as pd
LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN"
def send_line(message):
url = "https://notify-api.line.me/api/notify"
headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
data = {"message": message}
requests.post(url, headers=headers, data=data)
def check_alert(ticker, threshold_low, threshold_high):
df = yf.download(ticker, period="1d", auto_adjust=True)
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.droplevel(1)
if len(df) == 0:
print(f"{ticker}: データなし(休場日の可能性)")
return
price = float(df["Close"].iloc[-1])
if price < threshold_low:
send_line(f"\n⚠️ {ticker} アラート\n終値: {price:,.0f}円\n下限({threshold_low:,}円)を下回りました")
elif price > threshold_high:
send_line(f"\n📈 {ticker} アラート\n終値: {price:,.0f}円\n上限({threshold_high:,}円)を超えました")
else:
print(f"{ticker}: {price:,.0f}円(範囲内)")
# 監視設定
check_alert("7203.T", 2500, 3500) # トヨタ
check_alert("6758.T", 10000, 15000) # ソニー
check_alert("9984.T", 8000, 12000) # ソフトバンクG
毎日自動でアラートを実行するコード
import schedule
import time
from datetime import datetime
def daily_alert():
print(f"\n{datetime.now().strftime('%Y-%m-%d %H:%M')} アラートチェック開始")
check_alert("7203.T", 2500, 3500)
check_alert("6758.T", 10000, 15000)
check_alert("9984.T", 8000, 12000)
print("チェック完了")
# 毎日15:35に実行(終値確定後)
schedule.every().day.at("15:35").do(daily_alert)
print("株価アラート監視を開始しました")
while True:
schedule.run_pending()
time.sleep(60)
VPSで24時間稼働させる方法
アラートは24時間365日動かしてこそ意味があります。自宅PCでは電源オフ時に止まってしまうため、VPSの利用が現実的です。また、cronを使えばPythonスクリプトを常時起動する必要もなく、指定時刻だけ起動する設計にできます。
筆者の検証メモ
トヨタ(7203.T)、ソニー(6758.T)、ソフトバンクG(9984.T)の3銘柄で1週間アラートを稼働させました。
- トヨタ(7203.T):設定した閾値(下限2,500円)に接近した日があり、アラートが正常に届くことを確認。通知遅延は数秒以内でした
- ソニー(6758.T):閾値の設定が難しく、過去1年の高安値を参考に上限・下限を設定。レンジ内で動いたため実際のアラートは発生しませんでしたが、動作確認用のダミーメッセージで送信を確認しました
- ソフトバンクG(9984.T):ボラティリティが高いため、閾値設定を緩めにしないと頻繁にアラートが届く状況になりました。率直に言うと、アラート設計はその銘柄の特性に合わせて調整が必要という仕組みです
※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

