Day 14。モダンなUIフレームワークを全部取っ払って、天気アプリをターミナルだけで作ったらどうなるか見てみたかった。
プロンプト#
“ASCIIアートの天気シーン、アニメーション天気エフェクト、複数ロケーション対応のターミナル天気ダッシュボードを作って”
どうやって作ったか#
Watchfireを使ったら、作業が23個のタスクに分割された。天気アプリにしては多く聞こえるけど、ASCIIアートとアニメーションが入ってきた途端にスコープが一気に膨らんだ。
タスクリストはまず想定通りのところから始まった:プロジェクトのセットアップ、Open-MeteoとのAPI連携、基本レイアウト。そこから楽しい領域に入っていった:12種類のユニークなASCIIアート天気シーン(太陽、月、雨、雪、雷雨、霧、風、雲)、各天気条件に対応するパーティクルベースのアニメーションエフェクト、気温と降水量のチャート、時間別・日別の予報ビュー、複数ロケーションのダッシュボード、カラーテーマ、マウスサポート、スクロール可能なレイアウト。
23タスク。一つ一つ手動で進めたわけじゃない。Watchfireがキューに入れて、僕が他のことをしている間に処理してくれた。
出来上がったもの#
今回は予想以上に驚いた。

ASCIIアートが本当にすごい。 各天気条件ごとに専用のシーンがある。層状の雲が広がる曇り空、落ちてくる雨粒、漂う雪片、放射状の光線を出す太陽。アートは細かく、ターミナルを本物のキャラクターで埋め尽くす。よくある手抜きの「雨://」みたいなASCIIアートじゃない。シェーディングと奥行きのある本格的な複数行のシーンだ。
アニメーションが滑らか。 雨粒が落ちる。雪片が漂う。夜空で星がまたたく。風のパーティクルが画面を横切る。雷雨の時には稲妻が光る。これが全部ターミナルで起きている。キーを一つ押すだけでアニメーションの一時停止と再開ができる。

ダッシュボードがすっきりしている。 複数のロケーションがグリッド表示され、それぞれに小さなASCII天気アイコン、現在の気温、天気の概要が一目でわかる。カードをクリックするか数字キーを押すと、そのロケーションの詳細フォーカスビューに飛べる。

詳細ビューには全部揃っている。 大気質指数、日の出・日の入り時刻、色分けされたUVインデックス、湿度バー、風速と風向、雲量、降水量の内訳(雨vs雪)。さらに下部には各日ごとにミニASCIIアート付きの7日間予報。12時間の時間別ビューにも切り替えられる。


ロケーション管理がうまく動く。 世界中のどの都市でも検索して、ダッシュボードに追加、並べ替え、デフォルト設定ができる。ジオコーディング検索は素早く結果を返し、選択インターフェースもきれい。

4つのカラーテーマ。 デフォルト、オーシャン(ブルーとシアン)、サンセット(暖かいオレンジ)、フォレスト(グリーンとアーストーン)。tを押してテーマを切り替える。設定は設定ファイルに保存される。


APIキー不要。 無料のOpen-Meteo APIを使っているので、クローンして依存関係をインストールして実行するだけ。サインアップもトークンも設定も不要。
数字で見る#
- 12種類のユニークなASCIIアート天気シーン とそれぞれに対応するアニメーションエフェクト
- 4つのカラーテーマ と永続的な設定保存
- 23個のWatchfireタスク セットアップから最終仕上げまで
- PythonとTextualで構築(Textualizeが作ったTUIフレームワーク)
- 実際の作業時間: いろんな都市を試したりテーマを切り替えたりして約20分
試してみて#
リポジトリをクローンしてpython -m weather_tuiを実行するだけ。APIキー不要。矢印キーでナビゲーション、数字キーでロケーション間を移動、tでテーマ変更、?で全キーバインドの一覧が見られる。
Day 14の感想#
ASCIIアートだけでも手作業だったら何日もかかっていただろう。その上にアニメーション天気エフェクト?そもそも挑戦しようとも思わなかったはず。
感心するのは細部へのこだわりだ。7日間予報のカードにはそれぞれ小さなASCII天気アイコンがある。湿度はプログレスバーで表示される。風は速度とコンパス方向の両方を含む。UVインデックスは深刻度に応じて色が変わる。これらを明示的に指定したわけじゃない。天気ダッシュボードにはこういうものが必要だと理解して、全部作ってくれた。
ターミナルアプリはAIアシストコーディングのスイートスポットみたいだ。テキストベースのインターフェースの制約が、出力を制限するのではなく、むしろ集中させてくれる。
これは30 Days of Vibe Codingの14日目です。AIアシストコーディングで30日間に30個のプロジェクトを出荷する様子をフォローしてください。







