概要
テレビ天気時計は、Windowsデスクトップ上にテレビ風の時計と天気情報を常駐表示するWPFアプリです。
時計表示を最優先機能とし、天気取得、ログ出力、キャッシュ読み書き、設定保存などの周辺処理に失敗しても、可能な限り時計表示を継続します。
アプリ表示名は「テレビ天気時計」です。
日本語以外の表示では、アプリ名は TVWeatherClock と表示します。
基本情報
| 項目 | 内容 |
|---|---|
| アプリ表示名 | テレビ天気時計 |
| プロジェクト名 | TvWeatherClock |
| 実行ファイル名 | TvWeatherClock.exe |
| ルート名前空間 | TvWeatherClock |
| UI方式 | WPF |
| 対象フレームワーク | net8.0-windows10.0.19041.0 |
| 対応OS | 64bit版 Windows 10 / Windows 11 |
| 配布基本形式 | Portable ZIP版、MSIインストーラー |
| 設定保存形式 | JSON |
| 天気取得元 | Open-Meteo |
技術仕様
- 言語はC#を使用します
- 対象フレームワークは
.NET 8系のWindows向けWPFです - UIはWPFを使用します
- タスクトレイは
System.Windows.Forms.NotifyIconを使用します - JSON処理は
System.Text.Jsonを使用します - HTTP通信は
HttpClientを使用します - Windows位置情報はWindowsの位置情報APIを使用します
- アプリアイコンはアプリ同梱のアイコンを使用します
起動仕様
アプリ起動時は、単一起動制御を行います。
同じユーザーセッション内ですでにアプリが起動している場合、新しいプロセスは起動処理を続けず終了します。
起動時には、設定、ログ、キャッシュ、天気取得サービス、時計サービス、メイン時計画面、タスクトレイなどを初期化します。
設定により起動時表示が有効な場合、起動直後にメイン時計ウィンドウを表示します。
天気取得は起動後に非同期で実行し、起動処理を待たせません。
キャッシュ使用が有効で直近キャッシュがある場合、起動後の最新天気取得を待たずにキャッシュを先に表示します。
表示したキャッシュの取得時刻が、設定された天気更新間隔内で十分新しい場合、起動直後の最新天気取得は省略します。
起動後の最新天気取得に失敗しても時計表示は止めません。
単一起動
アプリは同じユーザーセッション内での多重起動を防ぎます。
すでに起動している状態で再度起動した場合、新しいプロセスは終了します。
これにより、設定保存、天気取得、タスクトレイアイコンが重複して動作することを防ぎます。
メイン時計画面
メイン時計画面は、枠なし、透明背景対応、タスクバー非表示の常駐ウィンドウです。
表示する主な要素は次の通りです。
- 時刻
- 日付または曜日
- 地域名
- 天気テキスト
- 天気アイコン
- 気温
- 詳細天気情報
- 日別予報
- テロップ形式の天気詳細
表示モードによって、地域名、天気、詳細、テロップの表示有無が変わります。
時計のみ表示モードでは、天気欄を表示しません。
詳細表示モードでは、現在天気の詳細と日別予報行を表示します。
テロップ表示モードでは、天気詳細を横スクロールするテロップとして表示します。
時計表示仕様
時計は24時間表記です。
秒表示が有効な場合は HH:mm:ss 形式で表示します。
秒表示が無効な場合は HH:mm 形式で表示します。
日付と曜日は、表示言語に合わせた形式で表示します。
コロン点滅が有効な場合、時刻のコロンが周期的に点滅します。
天気表示仕様
天気表示が有効な場合、現在天気、気温、地域名、天気カテゴリ、日別予報、データ提供元を保持します。
天気表示が無効な場合、天気関連テキスト、アイコン、気温、予報行、テロップは表示しません。
現在天気として表示する主な内容は次の通りです。
- 地域名
- 天気テキスト
- 天気カテゴリ
- 天気アイコン
- 気温
- 降水確率
- 湿度
- 風速
- 取得元
- 最終更新日時
- 警告メッセージ
日別予報は画面表示用の行として表示します。
表示言語により、日付、曜日、天気文言、数値表記、単位前スペースなどを調整します。
天気アイコン仕様
天気アイコンは画像ファイルではなく、WPFの描画で生成します。
天気カテゴリに応じて次のような図形を描画します。
- 晴れ系
- 曇り系
- 雨系
- 雪系
- 雷系
- 霧系
- 不明
天気アイコンは表示領域に合わせて拡大縮小します。
天気取得仕様
天気取得はProvider方式で行います。
現在の取得元はOpen-Meteoです。
Open-Meteoは緯度経度指定により、世界各地の天気取得に対応します。
天気取得に失敗し、キャッシュ使用が有効な場合は、直近キャッシュを読み込んで表示します。
起動時は最新天気取得の前に直近キャッシュを読み込み、取得待ちの間も前回の天気を表示できるようにします。
天気取得に失敗し、キャッシュも使えない場合は、天気情報を取得できない旨の警告を表示します。
天気取得に成功した場合は、最新の予報をキャッシュへ保存します。
天気取得に失敗した場合はログに警告を記録します。
Open-Meteo取得仕様
Open-MeteoのProvider名は Open-Meteo です。
緯度と経度を指定して天気を取得します。
タイムゾーンは対象地域に合わせます。
現在天気として、気温、湿度、天気コード、風速などを取得します。
日別予報として、天気コード、最高気温、最低気温、降水確率などを取得します。
Open-Meteoのタイムアウト秒数は設定値を使用し、一定範囲に丸めます。
手動更新仕様
タスクトレイメニューから天気を手動更新できます。
手動更新は60秒に1回までです。
60秒以内に再度手動更新した場合、取得処理を行わず、しばらく待ってから更新するよう案内します。
自動更新はこの60秒制限の対象外です。
自動更新仕様
天気自動更新はタイマーで行います。
更新間隔は設定値を使用します。
選択できる主な更新間隔は次の通りです。
- 15分
- 30分
- 60分
設定画面で更新間隔を変更した場合、設定適用後にタイマーを再作成します。
表示モード仕様
表示モードは DisplayMode として保存します。
主な表示モードは次の通りです。
- Standard
- TelevisionSubtitle
- SoftDisplay
- CompactClock
- Detail
- DetailTicker
- HighVisibility
- NightCalm
- BrightWallpaper
- PanelDisplay
- LiveStreaming
- SecondsClock
- ClassicOutline
各表示モードは、秒表示、日付表示、曜日表示、コロン点滅、天気表示、太字、文字色、縁取り色、縁取り太さ、背景表示、背景色などのプリセットを持ちます。
縁取り太さ設定は、時計、日付、地域、現在天気、気温、詳細情報、日別予報、ティッカー表示のすべてに反映されます。
縁取り太さは描画上の装飾として扱い、文字本体の計測幅、日別予報行の高さ、ティッカーのスクロール幅は押し広げません。
文字、テロップ、天気アイコンには、描画処理内で薄いソフトシャドウを付けます。文字とテロップはソフトシャドウ、縁取り、文字本体の順に描画します。
縁取り太さが0の場合も、通常設定では縁取りを有効として保存し、描画時に最小の細い縁取りへ丸めます。
表示モードを選択すると、対応するプリセットの見た目設定が設定画面へ反映されます。
多言語仕様
対応言語は次の通りです。
- システム
- 日本語
- English (US)
- English (UK)
- 简体中文
- 繁體中文
- 한국어
- Español
- Deutsch
- Français
- Italiano
- Português
既定の言語設定はシステムです。
システムを選択した場合、OSの表示言語を対応言語へ正規化して表示に使います。
OSの表示言語が対応言語にない場合は英語 (US) として表示します。
言語設定は Language として保存します。
日本語以外の表示では、地名は英語表示にそろえます。
日本国内の市区町村名は同梱自治体データの読み仮名から簡易ローマ字表記へ変換します。
設定画面仕様
設定画面には次のタブがあります。
- 表示
- 時計
- 天気
- 配置
- ライセンス/出典
設定画面の変更は、基本的に自動保存されます。
設定画面を閉じるときにも、未反映の変更が保存されます。
表示タブ仕様
表示タブでは次の項目を設定できます。
- 表示モード
- アプリUIテーマ
- 言語
- Windows起動時にテレビ天気時計を起動
- フォント名
- サイズ
- 太字
- 文字色
- 縁取り色
- 縁取り太さ
- 半透明背景の表示
- 軽量な不透明ウィンドウで起動
- 背景色
時計タブ仕様
時計タブでは次の項目を設定できます。
- 秒を表示
- 日付を表示
- 曜日を表示
- コロン点滅
天気タブ仕様
天気タブでは次の項目を設定できます。
- 天気表示の有効無効
- 地域
- 個別地域設定
- 地域検索
- 表示名
- 都道府県
- 緯度
- 経度
- 更新間隔
- キャッシュ使用
配置タブ仕様
配置タブでは次の項目を設定できます。
- 常に最前面
- 最前面表示を定期的に再適用
- 移動ロック
- マウスカーソルを避ける
- 表示位置を左上に移動
- 表示位置を右上に移動
- 表示位置を左下に移動
- 表示位置を右下に移動
表示位置移動ボタンは、メイン時計画面をプライマリモニターの各隅へ移動します。
ライセンス/出典タブ仕様
ライセンス/出典タブでは次の情報を表示します。
- アプリアイコン
- アプリ名
- アプリバージョン
- ビルド表示
- 作者名
- 作者サイトリンク
- アプリ説明
- 天気データ提供元
- Open-Meteoリンク
- 無料配布、非商用利用前提である旨
- Copyright表記
外部リンクは既定ブラウザーで開きます。
リンクを開けない場合は警告メッセージを表示します。
タスクトレイ仕様
タスクトレイアイコンは常に作成します。
タスクトレイアイコンの左クリックで、メイン時計画面の表示と非表示を切り替えます。
タスクトレイアイコンの右クリックでメニューを表示します。
タスクトレイアイコンの左長押しでもメニューを表示します。
メイン時計画面の右クリックまたは左長押しでも、同じメニューを表示します。
タスクトレイメニューには次の項目を表示します。
- 表示/非表示
- 天気更新
- 移動ロック
- マウスカーソルを避ける
- ログを開く
- 設定
- 終了
表示位置保存仕様
メイン時計画面の位置、幅、高さ、最前面状態は設定へ保存します。
初回または位置未保存の場合、既定位置へ配置します。
保存された位置が現在のどのモニターにも収まらない場合、表示可能な画面内へ戻します。
ディスプレイ設定が変更された場合、保存位置を再適用し、必要に応じて画面内へ戻します。
最前面仕様
常に最前面が有効な場合、WPFの最前面設定を有効にします。
最前面表示の定期再適用が有効な場合、最前面状態を定期的に再適用します。
一部のフルスクリーンアプリやゲームの上では、Windows側の制限により最前面表示できない場合があります。
マウスカーソル回避仕様
マウスカーソルを避けるが有効な場合、マウス位置を監視します。
カーソルがメイン時計画面に近づいた場合、ウィンドウを一時的に透明化します。
透明化後は、マウス操作が背後のウィンドウへ通りやすくなります。
カーソルが離れた場合、ウィンドウを元の表示へ戻します。
UIテーマ仕様
UIテーマは UiTheme として保存します。
値は次のいずれかです。
- System
- Light
- Dark
System の場合、Windowsのアプリテーマ設定を参照します。
設定画面、色選択画面、フォント選択画面、タスクトレイメニューへテーマを適用します。
Windows自動起動仕様
設定画面の表示タブでWindows起動時の自動起動を有効にした場合、現在のユーザーのWindows自動起動へ登録します。
登録先はユーザー別のRunキーです。
自動起動を無効にした場合は、同じ登録を削除します。
この設定はWindows側のユーザー別自動起動として保存し、settings.json には重複保存しません。
設定保存仕様
設定ファイルは次のパスに保存します。
%APPDATA%\TvWeatherClock\settings.json
設定保存フォルダは次の通りです。
%APPDATA%\TvWeatherClock\
設定はJSON形式で保存します。
保存時は一時ファイルへ書き込み、既存設定ファイルを置き換えます。
設定ファイルの読み込みに失敗した場合、既定値で起動します。
設定ファイルが破損している場合、可能であれば破損ファイルを退避します。
主な設定項目
AppSettings は次の主な項目を持ちます。
- SettingsVersion
- Clock
- Weather
- Window
- SettingsWindow
- Tray
- DisplayMode
- UiTheme
- Language
ClockDisplaySettings は、時計表示、フォント、色、縁取り、背景、表示サイズなどを保持します。
WeatherSettings は、天気表示、地域、更新間隔、タイムアウト、キャッシュなどを保持します。
WindowPlacementSettings は、表示位置、最前面、移動ロック、マウスカーソル回避などを保持します。
TraySettings は、タスクトレイ関連の設定を保持します。
Windows起動時の自動起動はユーザー別Runキーに保存するため、AppSettings のJSON項目は持ちません。
既定値仕様
主な既定値は次の通りです。
| 項目 | 既定値 |
|---|---|
| 表示モード | Standard |
| UIテーマ | System |
| 言語 | System |
| 秒表示 | 無効 |
| 日付表示 | 有効 |
| 曜日表示 | 有効 |
| コロン点滅 | 無効 |
| フォント | System |
| 表示サイズレベル | 0 |
| 太字 | 有効 |
| 天気表示 | 有効 |
| 天気地域 | 現在地自動取得 |
| 天気更新間隔 | 30分 |
| キャッシュ使用 | 有効 |
| 常に最前面 | 有効 |
| 移動ロック | 無効 |
| マウスカーソル回避 | 無効 |
| 起動時表示 | 有効 |
キャッシュ仕様
キャッシュフォルダは次のパスです。
%APPDATA%\TvWeatherClock\cache\
天気取得成功時は、取得した天気予報をJSONとして保存します。
キャッシュ読み込みに失敗した場合、ログに警告を出力し、キャッシュなしとして扱います。
設定画面のキャッシュ削除ボタンでは、キャッシュフォルダ内の天気キャッシュを削除します。
ログ仕様
ログフォルダは次のパスです。
%APPDATA%\TvWeatherClock\logs\
ログには、起動、終了、天気取得失敗、キャッシュ読み込み失敗、表示位置復旧などを記録します。
ログ書き込みに失敗しても、アプリ本体の動作は止めません。
保存フォルダ作成仕様
アプリは必要に応じて次のフォルダを作成します。
%APPDATA%\TvWeatherClock\%APPDATA%\TvWeatherClock\cache\%APPDATA%\TvWeatherClock\logs\
配布仕様
配布形式は次の2種類です。
- Portable ZIP版
- MSIインストーラー
Portable ZIP版は、ZIPを展開したフォルダから TvWeatherClock.exe を直接実行する形式です。
MSIインストーラーは、Windows Installerで現在のユーザーへインストールする形式です。
配布ファイル名には、アプリバージョン、ビルド番号、配布形式を含めます。ランタイム、CPUアーキテクチャ、.NET配布方式はファイル名に含めません。
例:
TvWeatherClock-v1.x.x-buildxxxxx.x-portable.zip
TvWeatherClock-v1.x.x-buildxxxxx.x-installer.msi
Portable ZIP版には、publish出力一式と README.txt を同梱します。
MSIインストーラーはWiX Toolsetで作成します。
MSIインストーラーは日本語のウィザードUIを使用します。
配布物には README.md を含めません。
配布物は .NET 8 実行環境を同梱した self-contained 版です。別途 .NET 8 Desktop Runtime x64 をインストールしなくても利用できます。
インストール版仕様
インストール版の既定インストール先は次の通りです。
%LOCALAPPDATA%\Programs\TvWeatherClock\
インストール時には、スタートメニューショートカット、デスクトップショートカット、Windowsのアンインストール情報を作成します。
デスクトップショートカットは任意機能として扱い、機能選択画面で作成するか選べます。既定では作成します。
インストール完了画面では、インストール完了後にテレビ天気時計を起動するか選べます。
MSIインストーラーは、self-contained のアプリ一式をインストールします。.NET 8 Desktop Runtime x64 の有無はインストール前に確認しません。
アンインストールは、Windowsの「インストールされているアプリ」または「アプリと機能」から行います。
エラー処理方針
天気取得の例外は、時計表示を止めないように捕捉します。
起動後の初回天気取得も非同期で行い、失敗してもアプリを終了しません。
ログ出力失敗は無視します。
キャッシュ読み込み失敗は警告ログを出し、キャッシュなしとして続行します。
設定読み込み失敗は既定値で起動します。
表示位置が画面外にある場合は画面内へ復旧します。
外部リンクを開けない場合は警告を表示します。
非同期処理方針
ネットワーク通信は非同期で実行します。
天気取得時にはキャンセルトークンを使用します。
天気更新中は更新中状態を有効にし、完了時に解除します。
既知の制約
- 一部の設定モデルは互換性維持のため残っていますが、現在の設定画面では個別UIを持たないものがあります
- DirectX系フルスクリーンアプリ上での最前面表示はWindows側の制限により保証しません
- コード署名なしの配布版では、Windows SmartScreenの警告が表示される可能性があります
- Open-MeteoのAPI仕様や提供データは将来変更される可能性があります
検証方針
WPFアプリ全体に関わる変更では、Debugビルドを実行します。
天気取得、設定保存、キャッシュ、ログ、表示位置復旧に関わる変更では、例外時に時計表示が止まらないことを確認します。
配布物を作成した場合は、ZIP内に README.txt が含まれ、README.md が含まれないことを確認します。
Portable ZIP版では、ZIP直下に TvWeatherClock.exe が含まれることを確認します。
MSIインストーラーでは、.msi ファイルが作成され、サイズとSHA256を取得できることを確認します。
関連ページ
利用者向けの操作方法は、テレビ天気時計 利用マニュアル を確認してください。
配布ファイルの入手方法は、テレビ天気時計 ダウンロード を確認してください。
利用時によくある質問は、テレビ天気時計 FAQ にまとめています。



