ちかくのラジオ
現在地や選んだ街の近くにあるネットラジオ局を距離順に並べ、ワンタップで流すプレイヤー。近くに局が無ければ半径が25→1000kmまで自動で広がり、鳴らない局は自動でスキップして次へ。radikoは規約上対象外なので、Radio Browserに登録された局(コミュニティFMや海外局)が相手になる。旅モード「どこかの街」で世界の街の近くにも飛べる
制作メモ
- AIに任せた
- 実装前にユーザーストーリー5本とUX5階層を書き、そこから7件の実装を決めたこと(0件時の半径自動拡大/位置拒否時の都道府県フォールバック/エラー局の自動スキップ/固定プレイヤーのザッピング動線/クリック起点の再生/旅モード/座標送信の明示)/規約チェック。Radio Browser APIは有償/無償ソフトでの利用可と明記された完全オープンなAPIで、運営のお願い(クリック報告)も実装した。radikoは公式APIがなく非公式利用が規約NGのため対象外にした/距離順をAPIのorderに頼らず、クライアント側でhaversineを計算して並べ直す設計。lib/はfetchを注入できる純関数にして、ユニットテスト14件で固定した/再生失敗の扱い。4秒でcanplayしない局も失敗とみなし、NGマークを付けて距離順の次の局へ自動で進む。全滅したときは「範囲を広げる」「再試行」の導線を出す/APIミラー3つ(de1→nl1→at1)のfallback。5xxは次のミラーへ、4xxはリクエスト自体の問題なので繰り返さない/公開ゲートの適用。公開ページはHTTPSでhttp配信局は混在コンテンツとして止められるため、APIの段階でis_https=trueに絞り、整形時にもhttpsだけ通すようにした。ローカル検証用に残っていた「URLにerrorを含む局を失敗扱いにする」テストフックも、本番コードから外してテスト側のスタブに移した
- 自分でやった
- 「近くのネットラジオを距離順に、ワンタップで」という発案と、Day 021としての公開判断(当初はローカル専用の指定だった)/実機での聴取確認
- 失敗と修正
- 日本の在庫が想定よりずっと薄かった。Radio Browserの日本の局は登録213・動作127局で、座標を持つのは1桁。東京ですら25km圏で2局、秋田は300km圏で0局 → アプリ側で埋められる問題ではないので、0件時の半径自動拡大(25→100→300→1000km)と旅モードで「どこかは必ず鳴る」体験に振った。公開後に追加できる合法なデータ源も調べたが、radikoは規約NG、JCBAサイマルラジオは許諾制(非許諾アプリへの供給を実際に止めた実績あり)、NHKらじる★らじるも公式アプリ前提で、日本のラジオはオープンAPI側に局がいない構造だった
仕上げ中に実装担当のエージェントがクレジット切れで途中死した。編集が終わっているのか中断なのか、出力からは分からない → 現状のファイルを直接確認すると編集自体は完了しており、E2Eの再実行だけで完全性を確認できた。作業のやり直しは不要だった



















