📈Pythonで作る株価チャートアプリ|API×matplotlib×tkinterで“自分専用ツール”を完成させる

IT・テクノロジー
目次
  1. 📈 “自分専用”の株価チャートアプリを動かす興奮
  2. 🧭 完成までの3ステップを俯瞰する
  3. 🌐 ステップ1:Alpha Vantage APIで株価を取得
  4. 📊 ステップ2:matplotlibでグラフ化
  5. 🖥️ ステップ3:tkinterでデスクトップアプリ化
  6. 🛒 アプリ開発の学習を加速させる相棒アイテム
  7. ❓ よくある質問(FAQ)
  8. 🌟 まとめ:ライブラリの組み合わせがあなたの武器になる

📈 “自分専用”の株価チャートアプリを動かす興奮

「ネット上の株価データをサクッと取ってきて、好きなレイアウトでグラフを眺めたい」——そんな願いを叶えてくれるのが、Pythonとライブラリのコンビネーションです。Web APIでデータを取得し、matplotlibで描画し、tkinterでデスクトップアプリに仕立てる。それぞれは別々のスキルですが、組み合わせた瞬間に「自分の手で世の中のサービスを再現できた!」という達成感が押し寄せてきます✨

市販の株アプリが高機能なのは事実ですが、自作には自作にしかない学びがあります。シンボルを入力 → ボタンを押す → グラフが切り替わる、という一連の動作が自分のコードで動いた瞬間、Pythonの世界がぐっと広がる感覚を味わえるはずです。

🧭 完成までの3ステップを俯瞰する

いきなり完璧なコードを書こうとすると挫折しがち。処理を3つのステップに分解して、1つずつ確実に動かしていくのが成功への最短ルートです。

  • 🌐 ステップ1:Web API(Alpha Vantage)で株価データを取得する
  • 📊 ステップ2:取得したデータをmatplotlibでグラフとして描画する
  • 🖥️ ステップ3:tkinterでデスクトップアプリのUIに組み込む

🌐 ステップ1:Alpha Vantage APIで株価を取得

🔑 APIキーを無料で取得して環境変数に登録

Alpha Vantageは無料で使える株価系Web APIの定番。公式サイトの「GET YOUR FREE API KEY」から、職業・組織・メールアドレスを入力するだけでAPIキーが発行されます。取得したキーはソースコードに直書きせず環境変数に登録するのがセオリーです。

macOSならexport ALPHA_VANTAGE_KEY=取得したキー、Windowsならset ALPHA_VANTAGE_KEY=取得したキーでOK。PyCharmを使っているなら「実行構成の編集」→「環境変数」から登録すれば、デバッグ実行時にも自動で読み込まれます。

🐍 requestsでAPIを叩いてJSONで受け取る

import os
import requests
import pprint

def main():
    api_key = os.environ["ALPHA_VANTAGE_KEY"]
    url = (
        "https://www.alphavantage.co/query"
        "?function=TIME_SERIES_DAILY"
        "&symbol=MSFT"
        f"&apikey={api_key}"
    )
    response = requests.get(url)
    data = response.json()
    pprint.pprint(data)

if __name__ == "__main__":
    main()

パラメータのfunctionで「日次データ」、symbolで「銘柄シンボル(MicrosoftならMSFT)」を指定。返ってきたJSONをresponse.json()でPythonの辞書に変換すれば、もう自由に料理できます🍳

📊 ステップ2:matplotlibでグラフ化

🗓️ 日付(X軸)と終値(Y軸)を抽出

daily_data = data["Time Series (Daily)"]
date_list = list(daily_data.keys())
close_list = [float(v["4. close"]) for v in daily_data.values()]

終値(4. close)の値はAPIから文字列で返ってくるため、float()で数値に変換するのを忘れずに。これを忘れると、グラフがスケール無視で大暴れします😅

📐 横長フィギュアで“見やすい”チャートに

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax = plt.subplots(figsize=(12, 4))
ax.plot(date_list, close_list)
ax.xaxis.set_major_locator(mdates.DayLocator(interval=15))
ax.grid()
fig.savefig("stock.png")

Alpha Vantageの日次データは過去100日分。そのまま描画するとX軸の日付ラベルが密集してしまうので、DayLocator(interval=15)で15日おきに表示するのがコツです。

↔️ 時系列を“過去→未来”の順に反転

APIから返ってくる辞書は新しい日付が先頭にあるため、グラフが右から左に流れる不自然な見た目になります。reversed()で順番を反転させてあげれば、右に行くほど未来になる自然なチャートに🎯

daily_data = dict(reversed(list(daily_data.items())))

🖥️ ステップ3:tkinterでデスクトップアプリ化

🪟 アプリの土台とフレームを作る

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master, width=680, height=280)
        self.master = master
        self.pack()
        self.pack_propagate(0)
        self.create_widgets()

    def create_widgets(self):
        pass

def main():
    root = tk.Tk()
    root.title("株価チャートアプリ")
    root.geometry("700x320")
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()

🎛️ 入力欄・実行ボタン・グラフ領域を配置

シンボル入力用のエントリ、実行ボタン、グラフを描くキャンバスをcreate_widgets()に追加していきます。matplotlibのfigureをtkinterに埋め込むには、matplotlib.backends.backend_tkaggFigureCanvasTkAggを使うのがポイント。

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

def create_widgets(self):
    self.symbol_entry = tk.Entry(self, width=10)
    self.symbol_entry.pack()

    submit = tk.Button(self, text="実行", command=self.display_graph)
    submit.pack()

    self.fig, self.ax = plt.subplots(figsize=(12, 4))
    self.canvas = FigureCanvasTkAgg(self.fig, master=self)
    self.canvas.get_tk_widget().pack()

🔁 ボタン押下でグラフを更新する

def display_graph(self):
    self.ax.clear()  # ← これが超重要!
    symbol = self.symbol_entry.get()
    url = (
        "https://www.alphavantage.co/query"
        "?function=TIME_SERIES_DAILY"
        f"&symbol={symbol}"
        f"&apikey={os.environ['ALPHA_VANTAGE_KEY']}"
    )
    data = requests.get(url).json()
    daily_data = dict(reversed(list(data["Time Series (Daily)"].items())))
    date_list = list(daily_data.keys())
    close_list = [float(v["4. close"]) for v in daily_data.values()]

    self.ax.plot(date_list, close_list)
    self.ax.xaxis.set_major_locator(mdates.DayLocator(interval=15))
    self.ax.tick_params(labelsize=7)
    self.ax.grid()
    self.canvas.draw()

self.ax.clear()を入れ忘れると、新しい銘柄を入力しても古いグラフが上書きされず重なってしまいます。完成後はMSFTでMicrosoftのチャートを表示し、続けてAAPLでAppleのチャートに切り替わる気持ちよさを体感してみてください🎉

💡 動作確認できたら、次はチャート種類の切り替え(週次・月次)、移動平均線の追加、複数銘柄の同時表示など、自分なりの拡張に挑戦してみるのがおすすめです。

🛒 アプリ開発の学習を加速させる相棒アイテム

Web API・グラフ描画・GUIと幅広いスキルが交差するプロジェクトだからこそ、手元の環境と教材を整えておくと学習スピードが段違い。集中できる環境とリファレンス本を揃えれば、アイデアを形にするまでの時間がぐっと短くなります💪

📕 まずはこの一冊:『Python実践入門』

クラス設計・標準ライブラリ・パッケージ管理など“Pythonらしい書き方”を体系的に解説してくれる定番書。今回作ったアプリのコードを「もっと美しく」リファクタリングするヒントが詰まっています。

📗 データ可視化を極めるなら:『Pythonによるデータ分析入門』

matplotlib・pandas・NumPyを使ったデータ分析と可視化の決定版。株価データの加工や移動平均の計算、相関分析まで一気に学べるので、自作アプリの表現力が一段階アップします。

📘 Web API活用のバイブル:『RESTful Web APIの設計』系

Alpha Vantageのような外部APIを“正しく”使いこなしたい人に。レート制限・エラーハンドリング・認証など、実務で役立つ知見がぎっしり詰まっています。

Web API: The Good Parts
オライリージャパン
¥2,420(2026/05/15 12:39時点)

🖥️ 開発効率が一気に上がるモバイルモニター

左にコード、右に実行中のアプリ&APIドキュメントを並べると、tkinterのレイアウト調整がストレスなく進みます。USB-C一本で接続できるモバイルモニターは、机が狭い在宅環境でも気軽に2画面化できる頼れる相棒です。

⌨️ 長時間コーディングを支える静音メカニカルキーボード

UI調整は試行錯誤の連続。指への負担を減らしてくれる静音赤軸のメカニカルキーボードがあれば、集中時間が伸びてアプリ完成までの距離もグッと縮まります。

❓ よくある質問(FAQ)

🤔 Q1. Alpha Vantageの無料プランで何回までAPIを叩けますか?

無料プランは1分間に5リクエスト・1日500リクエスト程度の制限があります(変更される可能性あり)。学習用途なら十分ですが、頻繁に銘柄を切り替えてテストするときはレート制限エラーに注意してください。

🙋 Q2. 新しい銘柄を入力してもグラフが重なってしまいます

描画前にself.ax.clear()を呼び出しているか確認してください。matplotlibの軸オブジェクトはデフォルトで重ね描きするため、明示的にクリアしないと前の線が残り続けます。

🧐 Q3. tkinterではなくPyQtやFlaskで作るのとどう違う?

tkinterは標準ライブラリだけで動くのが最大の魅力。追加インストール不要で“手軽に試せる”のが学習段階に向いています。本格的なアプリやWebに発展させたくなったらPyQt(デスクトップ)やFlask/Streamlit(Web)への移行を検討するのがおすすめです。

🛡️ Q4. APIキーを誤ってGitHubに公開してしまったら?

すぐにAlpha Vantageの管理画面でキーを再発行し、コミット履歴からも該当ファイルを削除してください。今後の対策としては.envファイル+python-dotenvや、OS環境変数の利用が安全です。.envは必ず.gitignoreに追加しておきましょう。

📚 Q5. 学習を続けるならどんな順番で進めるのがいい?

「requestsでAPI操作 → JSON操作 → matplotlibで可視化 → tkinterでGUI化 → クラス設計の整理」の順がおすすめ。1ステップずつ自分の興味あるテーマ(株価・天気・ニュースなど)で再現してみると、知識が“使えるスキル”として定着していきます。

🌟 まとめ:ライブラリの組み合わせがあなたの武器になる

Web APIでデータを取り、matplotlibで可視化し、tkinterでアプリ化する——たったこれだけの組み合わせで、世の中の便利サービスに匹敵する“自分専用ツール”が作れてしまうのがPythonの面白さ。完成したアプリは小さくても、コードのどこに何が書いてあるかを完全に把握できるという安心感は、市販ツールにはない大きな価値です✨

まずは今日紹介したコードを写経して動かしてみて、そのあと「移動平均を重ねたい」「銘柄候補を選択式にしたい」など、自分のこだわりを少しずつ追加してみてください🐣 そのうえで書籍やデバイス環境への投資を組み合わせれば、学習スピードはさらに加速します。今日紹介したアイテムが、あなたの“ライブラリを組み合わせるチカラ”を磨く頼れる相棒になりますように!

コメント

タイトルとURLをコピーしました