FediMeteo: €4のFreeBSD VPSがグローバル気象サービスに変貌した
概要
- FediMeteoは、天気予報をActivityPubタイムラインに自動投稿するプロジェクト
- インスピレーションは祖父と個人的な天気への関心から
- FreeBSD jailsとsnacを活用した設計、国ごとに分離管理
- アクセシビリティ重視、多言語・絵文字・テキストブラウザ対応
- 2025年12月時点で38カ国に拡大、安定運用中
FediMeteoの誕生と背景
- 天気が生活に与える影響を実感した経験、特にスポーツ時代や通学の判断
- 祖父が家庭の気象予報士、その影響を受けてプロジェクトを発案
- ふとしたきっかけでドメイン取得、計画を開始
- 目標:自分のタイムラインで定期的に天気情報を受け取る仕組み
設計思想と選択
- 国ごとにインスタンスを分離、FreeBSD jailによる管理
- VPSは低コスト(4ユーロ/月)のものをイタリア・ミラノで利用
- 各国を分離することで管理性・セキュリティ・移設性を確保
- 天気データはwttr.inまたはOpen-Meteoから取得
- アクセシビリティ重視
- 地元言語対応、テキストブラウザ閲覧可、絵文字で直感的理解
- JavaScript不要、母語での情報提供
- UNIX哲学:小さな部品の連携でシンプルに構築
- インスタンス管理はsnacを採用
- ActivityPub対応、RSS出力、低リソース消費、安定性
- 開発者の対応力も高評価
- 自己満足のためにも運用、反響がなくても継続する心構え
技術的実装
- 各jailが全て内包、Pythonスクリプトで都市ごとにデータ取得・Markdown生成
- 都市座標はgeopyで計算し、APIコールで天気取得
- ローカル保存なし、都度取得・投稿
- snacのsnac noteコマンドで直接投稿、APIキー管理不要
イタリア用セットアップ
- 主要都市リストを正規化(例:La Spezia→la_spezia、Forlì→forli)
- スクリプトで都市ごとにsnacユーザー作成、プロフィール自動設定
- 都市追加もスクリプトで簡単に対応、cities.txtに自動反映
コアアプリ開発
- Pythonアプリで都市名・国コードを受け取り、現在・12時間後・7日間の天気を取得
- Markdownで出力、snacに直接渡して投稿
- 更新用のpost.sh(shスクリプト)で全都市巡回・自動投稿
- Uptime-Kumaで監視、失敗時はアラート通知
- cronで6時間ごとに自動実行、都市ごとに順次投稿
拡大と反響
- イタリア全都市でテスト、調整を重ねて運用安定化
- 投稿の言語設定問題もsnac開発者の迅速な対応で解決
- 他国展開を開始し、多言語・絵文字でアクセシビリティ確保
- ユーザーからのフィードバックで翻訳ミスや多言語対応を改善
- FediFollowsによる紹介で一気に認知度拡大、追加要望も増加
- **非公開投稿(unlisted)**要望もsnac開発者の対応で実現
スケール課題とグローバル対応
- 新規国追加で単位系(C/F)・タイムゾーン・同名都市問題が発生
- 都市名__州名の形式で都市区別(例:new_york__new_york)
- VPSリソースの限界に挑戦、snacとFreeBSDの効率性を実感
- Open-MeteoのAPI制限も、運営側の協力で専用キーを取得
北米展開と運用状況
- アメリカ・カナダ主要都市1200超をカバー
- 初期の米国での反応は意外にも低調、カナダ・ドイツ・英国で人気
- VPSは安定稼働、日本・オーストラリア・ニュージーランドにも展開
- 2025年12月末時点で38カ国対応、安定した自動運用体制
今後の展望
- ユーザー要望・多国語対応の継続的改善
- VPS・APIリソースの監視と最適化
- シンプルかつ堅牢な設計を維持しつつ、さらなる拡大を模索