# 天気チェック

天気、雨雲レーダー、警報・注意報、地震、津波、台風、生活指数をまとめて確認するための個人向け天気ダッシュボードです。

このアプリは Weathernews、Yahoo天気、tenki.jp、気象庁、国土地理院、Open-Meteo などの公式サービスそのものではありません。防災上の判断や避難判断には、必ず気象庁、自治体、各公式サイトの最新情報を確認してください。

## 使い方

公開URL: <https://weather-dashboard-aub.pages.dev/>

このURLをスマホまたはPCのブラウザで開いて使います。

1. 公開URLを開く
2. 必要に応じて「現在地」を許可する
3. 地名検索やお気に入り登録で確認したい地域を選ぶ
4. スマホではブラウザの共有メニューから「ホーム画面に追加」しておく

位置情報を使う場合は、ブラウザの仕様上 `https://` または `localhost` / `127.0.0.1` で開く必要があります。スマホで使う場合は上の公開URL (HTTPS) を使ってください。

表示が古い、または更新されない場合は、アプリ内の「すべて更新」を押してください (警報・地震・津波・台風・雨雲・天気・各社予報をまとめて取り直します)。それでも変わらない場合は、ブラウザで再読み込みするか、ホーム画面から開いている場合はいったん閉じて開き直してください。

## Androidホーム画面ウィジェット

`android-widget/` には可変サイズの「12時間天気」ウィジェットが入っています。横4マス程度では1ページに4時間ずつ、横2マス程度まで狭めると1ページに2時間ずつ表示します。

| 大きさ | 1ページ | ページ数 |
| --- | --- | --- |
| 縦2マス×横4マス程度 | 4時間 | 3 |
| 縦2マス×横2マス程度 | 2時間 | 6 |

- 上段に天気、中央に気温の折れ線と降水量の棒グラフ、下段に時刻を表示
- 左右の矢印でページを送り、合計12時間を確認
- Androidの永続バックグラウンドジョブで4時間ごとに自動更新し、更新ボタンでも最新予報を取得
- 更新ボタンはジョブを介さずその場で通信するため、押したまま止まることがない
- 省電力モードで通信を止められている場合は「省電力で更新不可」と原因を表示
- 通信失敗時は失敗時刻を表示し、バックグラウンドで再試行
- アプリで登録したお気に入り地域をウィジェット設定から選択
- 予報部分をタップするとアプリの天気タブを起動
- 通信できない場合も前回取得した予報を残して表示

Androidのホーム画面ウィジェットは横方向のスクロール表示に対応していないため、左右の矢印でページを送る方式です。

省電力モード中は、電池最適化の対象アプリの通信がAndroid側で遮断され、ウィジェットを更新できません。アプリを起動すると電池最適化からの除外を案内するので、常に更新したい場合は許可してください。

現在の構成は個人・非商用利用で有料契約を必要としません。Android SDKとGradleは無料で、予報はAPIキー不要のOpen-Meteo無料枠、公開先はCloudflare Pagesの無料枠を想定しています。有料APIや課金SDKは使用しておらず、自動的に料金が発生する設定もありません。Open-Meteo無料枠の利用上限やCloudflare Pagesの用途制限を超える使い方、商用利用を行う場合は条件が変わる可能性があります。

### ビルドとインストール

Android Studioで `android-widget` フォルダーを開いて実行するか、PowerShellで次を実行します。

```powershell
cd android-widget
.\gradlew.bat :app:assembleDebug
adb install -r app\build\outputs\apk\debug\app-debug.apk
```

インストール後、Androidのホーム画面を長押しし、「ウィジェット」から「天気チェック」→「12時間天気」を追加します。追加時に「現在地を使う」または「東京を使う」を選びます。幅はホーム画面上で後から調整できます。

ウィジェットから開くWebアプリのURLは `android-widget/app/build.gradle` の `WEB_APP_URL` で指定しています。公開先を変更した場合は、このURLも変更してAPKを再ビルドしてください。

### ローカルで確認する場合

`index.html` をブラウザで開くか、ローカルサーバーで配信して使います。

ローカルファイルとして直接開くと、位置情報や一部のPWA機能が使えないことがあります。動作確認では次のようにローカルサーバーを使ってください。

```powershell
python -m http.server 8765 --bind 127.0.0.1
```

起動後、ブラウザで次を開きます。

```text
http://127.0.0.1:8765/
```

## 公開 (Cloudflare Pages)

Web版は Cloudflare Pages で公開しています。GitHub の `main` ブランチにプッシュすると自動でビルド・公開されます。

| 設定項目 | 値 |
| --- | --- |
| Production branch | `main` |
| Build command | `sh build.sh` |
| Build output directory | `dist` |

`build.sh` は、公開するファイル (`index.html`、`sw.js`、`manifest.webmanifest`、`README.md`、`LICENSE`、`NOTICE.md`、`icons/`) だけを `dist/` にまとめます。Androidアプリのソースは公開されません。

手元で公開後と同じ状態を確認する場合は、次のようにします。

```powershell
sh build.sh
python -m http.server 8765 --bind 127.0.0.1 --directory dist
```

公開先を変えた場合は、`android-widget/app/build.gradle` の `WEB_APP_URL` も合わせて変更し、APKを再ビルドしてください。

## 配布について

このリポジトリ内のアプリ本体は MIT License で配布できます。詳しくは [LICENSE](LICENSE) を確認してください。

ただし、アプリが利用する外部データ、外部API、地図、ライブラリにはそれぞれ別の利用条件があります。配布時は [NOTICE.md](NOTICE.md) も同梱してください。

個人利用、家族・友人への無償配布、小規模な非商用利用を想定しています。商用利用、広告付きサイトでの公開、社内外への大規模配布、継続的な高頻度アクセスを行う場合は、各サービスの利用規約や商用プランの条件を確認してください。

## 位置情報とプライバシー

現在地機能を使うと、ブラウザから取得した緯度・経度を使って天気や地域情報を取得します。

位置情報は主に次の用途で使われます。

- Open-Meteo から予報・現在天気を取得
- 国土地理院の逆ジオコーダで地域情報を取得
- 国土地理院の逆ジオコーダで得た自治体コードから、気象庁の警報・注意報の対象地域を判定

位置情報や設定はブラウザの `localStorage` に保存されます。このアプリ独自のサーバーへ位置情報を送信する処理はありませんが、外部APIへの問い合わせ時には緯度・経度などが各サービスへ送信されます。

共有端末で使う場合は、ブラウザのサイトデータ削除や現在地設定の解除を行ってください。

ホーム画面に追加したPWA表示でも、位置情報や設定は同じブラウザの保存領域を使います。共有端末で使ったあとは、ブラウザのサイトデータ削除、位置情報許可の解除、またはホーム画面アイコンの削除を行ってください。

## 出典・外部サービス

主な出典と利用サービスは次の通りです。

- 気象庁: 警報・注意報、地震、津波、台風、高解像度降水ナウキャスト
- 国土地理院: 地理院タイル、住所検索、逆ジオコーダ
- Open-Meteo: 予報・現在天気データ
- Leaflet: 地図表示ライブラリ
- Weathernews / Yahoo天気 / tenki.jp: 関連情報への外部リンク

詳しい表記とライセンスは [NOTICE.md](NOTICE.md) を確認してください。

## 注意事項

- 表示内容は速報性・完全性を保証しません。
- 予報、生活指数、一致度などは目安です。
- 災害時や警報発表時は、気象庁、自治体、防災無線、放送などの公式情報を優先してください。
- 外部APIの仕様変更、停止、アクセス制限により、表示できなくなる場合があります。
