2026年に動かなくなった古典的なJava RSSリーダーを、AIでWebに作り直した
開発者がAI(Claude Code)とVaadin 25を使って、メンテナンスが停止したJavaデスクトップRSSリーダーRSSOwlをWebアプリに再構築しました。UIの大部分は迅速に移行できましたが、AIの訓練データがVaadin 25のリリース前に切れていたため、存在しないAPIを生成する問題が発生。MCPサーバーで最新ドキュメントを参照し、手動でオリジナルと比較することで、マルチユーザー版が完成しました。ただし、プラグインメニューや埋め込みブラウザなど、移植不可能な機能もありました。
開発者は最近、AIを活用して古典的なJavaデスクトップRSSリーダー「RSSOwl」をモダンなWebアプリケーションに再構築した経験を共有しました。RSSOwlは、左側のフィードツリー、右上のソート可能な見出しテーブル、下部の記事リーダーという古典的な3ペインレイアウトで知られていますが、公式Mac版は32ビットのCarbonバイナリであり、2026年のMacでは起動すらしません。Rosettaも32ビットコードは変換できません。コミュニティがメンテナンスする64ビット版「RSSOwlnix」がRosetta経由で動作するものの、開発者はさらに一歩進んで、AI(Claude Code)とVaadin 25(JavaサーバーサイドUIフレームワーク)を使ってインターフェース全体をブラウザに移植することにしました。
移行プロセスは驚くほどスムーズでした。見出しテーブルの中核機能(ソート、右クリックメニュー、行の色分け)はほぼ自動的に変換されました。例えば、オリジナルでは306行のNewsComparatorと467行のNewsTableLabelProviderが必要だった部分が、約10行のGrid列コンパレータと10行のCSSに削減されました。Vaadin 25のSignalsメカニズムにより、マスター・詳細ビューの連携もエレガントになり、手動リスナーは不要でValueSignalだけで済みました。しかし、AIにも問題がありました。訓練データのカットオフ日がVaadin 25のリリースより前だったため、存在しないAPI(例えば、非推奨のコンストラクタや旧式のリスナー)を生成したのです。コードは一見正しく見えますが、コンパイルが通りません。解決策は、Vaadinが提供するMCPサーバーを使ってAIに最新ドキュメントを直接参照させることでした。それでもなお、いくつかのエッジケースが残りました。例えば、ドキュメントに記載されたCSSカスタムプロパティ「--vaadin-grid-cell-background」はAuraテーマでは効かず、!importantで上書きする必要がありました。AIはまた、オリジナルのRSSOwlとは異なるフィードカテゴリを勝手に作成し、保存する記事数の上限を独自に設定しました(オリジナルのソースコードを確認して1フィードあたり200件というデフォルトを発見しました)。
移植不可能な機能もありました。Eclipseのプラグイン可能なメニューアーキテクチャ(拡張レジストリでメニュー項目を追加)はWebに相当するものがなく、埋め込みブラウザはモダンなWebサイトのX-Frame-OptionsやCSPヘッダーによってブロックされます。Google Readerとの同期機能は、Google Reader自体が2013年に終了しているため使用できません。カスタム行色と選択ハイライトの組み合わせもCSS部分でうまくいかず、妥協を余儀なくされました。
それでも開発者は、ログイン、全文検索、フィルター、ラベル、キーボードショートカットを備えたマルチユーザーRSSリーダーを完成させました。AIが骨格を迅速に構築した(80%)ものの、残りの20%——オリジナルとの挙動の一致——は開発者自身による確認と調整が必要でした。同様のプロジェクトに取り組む人へのアドバイスとして、AIは構造の再現に優れているが、完全性のギャップは人間が埋める必要がある、特に見過ごされがちな細部において重要だと述べています。