🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
フック
一銭もかけず、APIキーを探す手間もなく、Pythonでリアルタイムの天気ダッシュボードを構築できます。美しいインタラクティブなチャートでリアルタイムの天気データを表示し、すべてオンラインで動作するアプリの作成方法を解説します。
2026年にこれが重要である理由
現在(2026年6月30日)、データ可視化ツールは非常に身近なものとなり、基本的なPythonを知っている人なら誰でもプロ並みのダッシュボードを構築できるようになりました。Streamlitのようなツールにより、Web開発を学ぶハードルが取り払われました。HTML、CSS、JavaScriptを知る必要はありません。手軽なアイデアを素早く形にしたい人々にとって、これは大きな利点です。また、Open-Meteo APIは登録不要で利用できる無料の天気データの定番ソースとなっており、このようなプロジェクトを真にストレスなく進めることができます。
作成するもの
以下を実行する天気ダッシュボード:
- 任意の場所の現在の状況(気温、湿度、風速)を表示する
- 今後数日間の気温推移を示す美しいチャートを表示する
- 地球上の任意の都市を選択し、リアルタイムデータを即座に表示できる
- Streamlit Cloud(Streamlitのホスティングサービス)上で無料で動作する
すべてがWebアプリとして動作し、URLにアクセスするだけでブラウザ上で操作できます。管理するバックエンドも、心配するサーバーもありません。
必要なもの
- コンピューターにインストールされた Python 3.7 以降
- テキストエディタ(VS Code、Sublime、お好みのもの)
- 無料の GitHub アカウント
- 無料の Streamlit Cloud アカウント(同じ GitHub ログインを使用)
- これだけです。APIキーも、クレジットカードも、サブスクリプションも不要です。
仕組み(コンセプト)
StreamlitはPythonスクリプトを自動的にWebアプリに変換します。Pythonを記述し、インタラクティブにするための特別なコマンドをいくつか追加するだけで、StreamlitがそれをWebサイトに変換してくれます。Plotlyはチャートを作成します。これらはインタラクティブであるため、データポイントにホバーしたりズームインしたりできます。Open-Meteoはボランティアによって運営されている無料の天気APIで、認証や(常識的な範囲内での)レート制限を必要としません。
この3つの要素が組み合わさります。Open-Meteoからデータを取得し、Pythonで処理し、Streamlitで表示し、Plotlyで可視化します。
ステップ1:ツールのインストール
ターミナルを開いて以下を実行します:
pip install streamlit plotly requests pandas
これにより、必要なライブラリがインストールされます。 requests はインターネットからデータを取得し、 pandas はデータの整理をサポートし、 streamlit と plotly が残りを処理します。
ステップ2:Pythonスクリプトの作成
という名前の新しいファイルを作成し、 app.py 以下を貼り付けます:
import streamlit as st
import plotly.graph_objects as go
import requests
import pandas as pd
from datetime import datetime
st.set_page_config(page_title="Weather Dashboard", layout="wide")
st.title("Live Weather Dashboard")
city = st.text_input("Enter a city name:", "London")
if city:
try:
geo_url = f"https://geocoding-api.open-meteo.com/v1/search?name={city}&count=1"
geo_response = requests.get(geo_url).json()
if geo_response["results"]:
location = geo_response["results"][0]
lat, lon = location["latitude"], location["longitude"]
name = location["name"]
weather_url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}¤t=temperature_2m,humidity,weather_code,wind_speed_10m&hourly=temperature_2m&daily=temperature_2m_max,temperature_2m_min&timezone=auto"
weather_response = requests.get(weather_url).json()
current = weather_response["current"]
daily = weather_response["daily"]
col1, col2, col3, col4 = st.columns(4)
col1.metric("Temperature", f"{current['temperature_2m']}°C")
col2.metric("Humidity", f"{current['humidity']}%")
col3.metric("Wind Speed", f"{current['wind_speed_10m']} km/h")
col4.metric("Location", name)
df = pd.DataFrame({
"Date": pd.to_datetime(daily["time"]),
"Max": daily["temperature_2m_max"],
"Min": daily["temperature_2m_min"]
})
fig = go.Figure()
fig.add_trace(go.Scatter(x=df["Date"], y=df["Max"], name="High", mode="lines+markers"))
fig.add_trace(go.Scatter(x=df["Date"], y=df["Min"], name="Low", mode="lines+markers"))
fig.update_layout(title="Temperature Forecast", xaxis_title="Date", yaxis_title="Temperature (°C)")
st.plotly_chart(fig, use_container_width=True)
except Exception as e:
st.error(f"Could not fetch data: {e}")
このスクリプトは以下を行います:
- ユーザーが都市名を入力できるようにする
- 都市の緯度と経度を検索する
- Open-Meteoから現在の天気と予報を取得する
- 主要な指標(気温、湿度、風速)を大きなボックスに表示する
- 翌週の最高気温と最低気温を示すチャートをプロットする
ステップ3:ローカルでのテスト
ターミナルで、 app.py があるフォルダに移動し、以下を実行します:
streamlit run app.py
Streamlitがブラウザウィンドウを開きます。都市名を入力して動作を確認してください。リアルタイムデータが即座に表示されます。「Tokyo」、「New York」、または地球上の任意の都市を入力してみてください。Open-Meteoにはすべてのデータが揃っています。
ステップ4:GitHubへのプッシュ
新しいGitHubリポジトリ(公開、README不要)を作成します。その後、以下を実行します:
git init
git add app.py
git commit -m "Initial weather dashboard"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/REPO_NAME.git
git push -u origin main
の YOUR_USERNAME と REPO_NAME を、実際のGitHubユーザー名とリポジトリ名に置き換えます。
ステップ5:Streamlit Cloudへのデプロイ
にアクセスします Streamlit Cloud (無料であり、GitHubログインを使用します)。「New app」をクリックし、リポジトリを接続します。Streamlitが自動的に app.py ファイルを検出してデプロイします。1分以内に、誰とでも共有できるライブURLが発行されます。
GitHubでコードを更新すると、Streamlitが自動的に再デプロイします。サーバーを操作する必要は一切ありません。
ステップ6:カスタマイズ(任意)
機能を簡単に追加できます:
- 複数の都市を一度に表示する
- より多くのチャートタイプを追加する(時系列の湿度、風のパターン)
- 異常気象のアラートを表示する
- お気に入りの都市を保存する
Streamlitのドキュメントは素晴らしく、初心者にも分かりやすいものです。重要なポイント:Pythonを書くことができれば、Web開発を学ぶことなくStreamlitでWebアプリを構築できます。
まとめ
天気ダッシュボードの構築は、もはやサーバー、データベース、またはAPI認証と格闘することを意味しません。Streamlitが面倒な部分を処理し、Plotlyがチャートを美しく仕上げ、Open-Meteoが無料でデータを提供します。アイデアからデプロイされたアプリまで、1時間未満で到達できます。これは、データの可視化がいかに身近になったかを示す真の変革です。
メリット
- 完全無料—コストなし、APIキーなし、隠れた費用なし
- 迅速な構築—全体で約1時間しかかかりません
- デフォルトで美しい—Plotlyのチャートは調整なしでプロ並みの見栄えになります
- インタラクティブ—開発側で追加の作業をしなくても、ユーザーはクリック、ホバー、ズームが可能です
- 自動デプロイ—GitHubにコードをプッシュすると、Streamlitが即座に再デプロイします
- 実際のプロジェクトへ拡張可能—同じアプローチが数千のデータポイントを持つダッシュボードにも機能します
- Web開発スキル不要—純粋なPythonのみ
デメリット
- Streamlit Cloudにはレート制限とリソースの上限があります(無料プランは控えめです)
- Open-Meteoの無料プランには稼働率の保証がありません(障害の可能性は低いですが、SLAによる保証はありません)
- ユーザーが操作するたびにStreamlitはスクリプト全体を再実行します(重い計算の場合は遅くなる可能性があります)
- UIデザインのカスタマイズ制限(完全にブランディングされたデザインではなく、Streamlitの外観になります)
- デフォルトでバックエンドデータベースがない(別途構築しない限りデータは永続化されません)
- 大規模な過去のデータセットを取得しようとするとパフォーマンスが低下します
注意点
上記のコード例では、プレースホルダーとサンプルのAPIエンドポイントを使用しています。デプロイする前に、ローカルでテストし、実際のデータで動作することを確認してください。Open-Meteoは無料で信頼性がありますが、レート制限があります。1秒間に数千回も呼び出さないでください。ユーザーデータの保存を必要とする機能を追加する場合は、適切なバックエンドデータベースを設定することを忘れないでください(Streamlit CloudはPostgreSQLなどのサービスに接続できますが、ここでは対象外です)。自己責任で進め、リンクを公開共有する前に十分にテストしてください。
よくある質問
- Open-Meteoがダウンした場合はどうなりますか?
- ユーザーアカウントを追加してお気に入りの都市を保存できますか?
- 一度に何人のユーザーがダッシュボードを使用できますか?
- 都市を追加して並べて比較することはできますか?
- データはリアルタイムですか、それともキャッシュされていますか?
- さらにチャートや可視化を追加するにはどうすればよいですか?
- 色やフォントをカスタマイズできますか?
- 自分の用途に対して Streamlit Cloud が遅すぎる場合はどうすればよいですか?
タグ
#streamlit #datavisualization #python #plotly #weather #webapps #datascience #opendata
Docker Security Checklist
Lock down your containers from build to runtime — 29 practical controls covering images, runtime flags, secrets, and the daemon. Enter your email — you'll get the PDF instantly, plus new posts on Docker, Linux & security.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.