
2026/01/16 21:58
**Wii ニュースチャンネルをローカルニュース配信にパッチ適用(2025)**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
著者は、Wii コンソールのニュースチャンネルが Nintendo のオリジナルソースではなく「El Nuevo Día」RSS フィードから新鮮なプエルトリコのニュースを表示できるようにする完全なシステムを作成しました。チャネルの WAD ファイル(セクション)内にハードコードされた URL を0000000b.appに置き換え、WiiLink のオープンソースニュースジェネレーターに新しいフィードを追加することで、このパッチはホームブリュー対応システムで動作します。news.wiilink.ca
更新された RSS データは Go プログラムによって処理され、LZ10 で圧縮され、OpenSSL によって生成された秘密鍵で RSA スタイルに署名され、必要なファイル(プエルトリコのハードコード済み緯度/経度を含む)を書き出します。AWS Lambda 関数は EventBridge により毎時間トリガーされ、このプログラムを実行し、バイナリを S3 バケットにアップロードして Wii のニュースチャンネルを自動的に最新の状態に保ちます。news.bin.NN
このプロジェクトは 2013 年に Nintendo が廃止したサービスを復活させ、オープンソースツールとクラウド自動化がレガシー ハードウェアを拡張できることを示しています。ホームブリュー Wii ユーザーは最新のローカルニュースにアクセスでき、この手法は他の廃止サービスの復活にもインスピレーションを与える可能性があります。
本文
2025年8月25日
🎧 現在再生中: Menu (News Channel) – Nintendo Music App から
地元ニュース記事を意外な場所に表示することが好きだったので、Nintendo Wii の News Channel に最新のローカルニュースを表示させるには何が必要か試してみるのは面白いプロジェクトだと考えました。以下に成果物をちらっとご紹介します。
TL;DR – クリックで展開(ネタバレ)
- Go と wadlib を使って News Channel のハードコードされた Nintendo URL を S3 ストレージバケットへ向けるよう修正し、必要なバイナリファイルをメモリ上で抽出・編集。
- WiiLink のオープンソースニュース生成器を改変して 「El Nuevo Día」 をニュースソースに追加。
- AWS Lambda + EventBridge を設定し、毎時間必要なニュースバイナリファイルを再生成。
ソースコード: WiiNewsPR と WiiNewsPR‑Patcher。
Wii の News Channel
News Channel は北米で 2007年1月26日 にデビューしました。これは Wii 発売から約 2 か月後です。この日以来、Wii コンソールにプレインストールされ、世界中のニュースを読む新しい方法を提供してきました。他の「ユーティリティ」チャンネル(例:Forecast Channel)と並び、Wii を単なるゲーム機以上のものとして位置づけようとしました。
2013年6月27日にサービスが終了する直前の動画記録をご覧ください。
News Channel がコンテンツを取得する仕組み
カスタムニュースを表示できるかどうかを検討する前に、まず News Channel が実際にどのようにコンテンツを取得しているかを調べる必要があります。起動時に「Downloading…」というスプラッシュスクリーンが表示されるため、何らかの方法でニュースを取得しているはずです。
Wii はインターネット接続設定でプロキシ機能をサポートしています。つまり、ローカルマシンに mitmproxy をセットアップして HTTP の挙動を観測できます。
# スクリーンショットしやすい UI で mitmweb を起動: mitmweb --listen-port 8080
未修正の Wii で News Channel 用にミドルマンプロキシを実行すると、次の URL から
news.bin.00 ファイルを取得しようとします。
http://news.wapp.wii.com/v2/1/049/news.bin.00
URL パスの解説
| セグメント | 意味 |
|---|---|
| 「英語」(コンソール言語設定)。devkitPro の に可能な値が示されています。 |
| 米国の Wii 国コード。wiibrew.org で全リストが確認できます。 |
このファイル取得に失敗すると News Channel はエラーを表示します。バイナリファイルはおそらくニュースデータです。HTTP リクエストを行う様子を見ると、独自のデータをサーブできる可能性があります。
プロキシ設定を正しく構成した後にインターネット接続テストを実行すると、Wii が
に HTTP リクエストを送信するのが分かります。あのページはまだオンラインです!http://conntest.nintendowifi.net
コミュニティのホームブリューで News Channel を保存
12 年以上前に Nintendo は News Channel のオンライン機能へのサポートを終了しました。愛されるレトロコンソールとして、コミュニティはその機能を保全し、意図された寿命を超えても利用できるようにする努力を続けています。
この種の非公式ソフトウェアプロジェクトは一般的に ホームブリュー と呼ばれます。今回のプロジェクトでは特に重要なのが、WiiLink チームがサーバーを維持し、今日でも Wii のオンライン接続機能を体験できるようにしてくれることです。
Wii コンソールでホームブリューを始める方法に興味がある場合は https://wii.hacks.guide をご覧ください。
Thanks to WiiLink, we can revive the News Channel and browse up‑to‑date news – just not local news, which is our real goal.
WiiLink が News Channel をパッチする仕組み
WiiLink をインストールした後に mitmproxy を起動し、Wii が何をしているか確認すると、別のドメイン
からファイルを取得するようになります。news.wiilink.ca
news.bin.00 を取得でき、news.bin.23 まで要求し続けます。News Channel はこのサーバーから 24 時間分のニュースを正常に取得しています。
高レベル手順
- News Channel を自分が管理するドメインへリダイレクトさせる。
- 目的のコンテンツでバイナリファイルを生成する。
ステップ 1: News Channel のリダイレクト用パッチ
WiiLink のインストールガイドに従い、重要なステップは News Channel のパッチ版をインストールすることです。同組織の GitHub には WiiLink24‑Patcher が含まれています。
patch.cs で VCDIFF エンコードされた News_1.delta パッチへの参照が見つかります。
注:WiiLink ガイドは現在 CLI パッチャーではなく Python ベースの
を使用することを推奨しています。WiiLink-Patcher-GUI
.delta ファイルをローカルにダウンロードしたら、xdelta3 で確認できます。
xdelta3 printdelta News_1.delta
出力は
0000000b.app ファイルが必要で、パッチ後のバイナリを news.dol として保存することを示しています。WAD ファイル管理には libWiiSharp が使われていますが、ここでは Go の wadlib を使用します。
// 簡易抽出スクリプト(エラーハンドリングは省略) wad, _ := wadlib.LoadWADFromFile("news.wad") titleMetadata := wad.TMD contentMetadata := titleMetadata.Contents outputDir := "extracted_wad/" os.MkdirAll(outputDir, 0755) for i := 0; i < len(wad.Data); i++ { data, _ := wad.GetContent(i) contentID := contentMetadata[i].ID filename := filepath.Join(outputDir, fmt.Sprintf("%08x.app", contentID)) os.WriteFile(filename, data, 0644) }
公式(v7) News Channel WAD ファイルでこのスクリプトを実行すると、12 個の
.app ファイルが抽出されます。中には 0000000b.app が含まれています。
次にデルタパッチを適用します。
xdelta3 -d -s extracted_wad/0000000b.app News_1.delta news.dol
生成された
news.dol にはパッチ後のバイナリが格納されています。簡易的にヘックス検索すると、元の URL(http://news.wapp.wii.com/v2/%d/%03d/news.bin)が http://news.wiilink.ca に置き換えられていることが分かります。
メモリ上で URL を上書き
自分のドメインへリダイレクトするために、次のような小さな Go ユーティリティを書きました。
const OriginalURL = "http://news.wapp.wii.com/v2/%d/%03d/news.bin" const NewURL = "http://wii.rauln.com/news/%d/%03d/news.bin" wad, _ := wadlib.LoadWADFromFile(wadPath) content, _ := wad.GetContent(1) // ID 0000000b originalBytes := []byte(OriginalURL) newBytes := []byte(NewURL) padded := make([]byte, len(originalBytes)) copy(padded, newBytes) offset := bytes.Index(content, originalBytes) copy(content[offset:offset+len(originalBytes)], padded) wad.UpdateContent(1, content) os.WriteFile(outputPath, wadBytes, 0644)
実行例:
go build wiinewspr-patcher news.wad patched_news.wad
patched_news.wad は http://wii.rauln.com/news/%d/%03d/news.bin を指すようになっています。YAWM (ModMii Edition) で Wii にインストールし、再度 mitmproxy を起動してリクエストが自分のドメインへ向かっていることを確認します。
ステップ 2: News Channel 対応ニュースファイルの生成
WiiLink チームの
NewsChannel プロジェクトは Go で書かれており、news.wiilink.ca から配信されるバイナリニュースファイルを生成します。主な手順は次のとおりです。
- 国別設定を取得する。
- 設定されたソース(例:NHK)から記事とメタデータをフェッチ。
- データをバイトバッファに加工。
- LZ10 で圧縮し、RSA 署名を付与してディスクへ書き込み。
ファイル名は特定の補間パターンに従っています – これが News Channel のデータ URL に使用される言語/国コードを知る手がかりになりました。
面白い事実: LZ10 は Game Boy Advance、DS、Wii 系で使われている Nintendo 独自の LZ77 バリアントです。
に Go のソースコードがあります。wii-tools/lzx
WiiLink のジェネレーターを Puerto Rico ニュースに対応させる
私は
NewsChannel リポジトリを WiiNewsPR へフォークし、記事キャッシュとバイナリ出力パスのフラグサポートを追加しました。既存のソースはすべて削除し、新しい 「El Nuevo Día」(ENDI) を追加しました。フィードはスニペットのみですが、多くの記事には画像が付属しており、News Channel でカテゴリ分けする際に役立ちます。
最終設定要件
-
各バイナリニュースファイルをカスタム RSA キーで署名(Wii が処理できるように):
openssl genrsa -traditional -out Private.pem 2048 -
ソース用の低品質ロゴを作成(ImageMagick):
magick logo.svg -quality 30 -resize 200x200 -strip logo.jpg -
Go バイナリをビルドし、実行して
にニュースバイナリを生成:./v2/1/049go build ./WiiNewsPR -o ./output -c ./cacheこれにより
ファイルが作成されます。24 個(毎時間)必要です。一時的な対策として、現在の時間帯のファイルを他のすべての時間帯へコピーします。news.bin.NN
テスト
S3 バケットに 24 個のファイルをアップロードし、パッチ済み News Channel がカスタムドメインから取得するよう設定してチャネルを起動。リクエストが順次完了すると記事が表示されます – これで満足感が得られます!
ボーナスステップ: AWS Lambda で毎時間ニュース更新を自動化
ファイルを手作業で S3 バケットにコピーするのは便利ですが、自動でバイナリを生成してくれる仕組みが理想的です。
Lambda ハンドラ(簡略版)
func Handler(ctx context.Context) error { cmd := exec.CommandContext(ctx, "./WiiNewsPR", "-o", "/tmp", "-c", "/tmp/cache") // … _, err = uploader.Upload(ctx, &s3.PutObjectInput{ Bucket: aws.String(bucketName), Key: aws.String(fmt.Sprintf("%snews.bin.%s", keyPrefix, hour)), Body: file, ContentType: aws.String("application/octet-stream"), }) // … }
Serverless 設定(抜粋)
service: wiinewspr-generator provider: name: aws environment: TZ: America/Puerto_Rico # 正しい時間帯を確保 events: - schedule: rate: cron(30 * * * ? *) # 毎時間 30 分に実行 name: wiinewspr-every-30pasthour package: patterns: - bootstrap # コンパイル済み Lambda ハンドラ - WiiNewsPR # バイナリニュース生成器 - ../Private.pem
備考
- Puerto Rico のタイムゾーンで Lambda を実行し、
が期待通りの時間を返すようにします。time.Now() - デフォルトメモリより多めに割り当てることをおすすめします。LZ10 圧縮は低 CPU Lambda ではボトルネックになりやすく、30 秒でタイムアウトする可能性があります。
24 時間稼働させると、S3 バケットには常に最新ニュースが更新され続けます。
まとめ
これで朝起きてコーヒーを飲みながら、2007 年のように Nintendo Wii で地元ニュースを閲覧できるようになりました。
ご清聴ありがとうございました!
クレジット
この実験は Wii ホームブリューコミュニティ――特に RiiConnect24 Team、WiiLink Team、wiibrew.org の貢献者――の素晴らしい仕事がなければ失敗に終わっていたでしょう。