世界を動かす技術を、日本語で。

Show HN: RomM – オープンソースのセルフホステッドROMマネージャーおよびプレーヤー

概要

RomM は、レトロゲームのROM管理とブラウザ上でのプレイを可能にする 自宅ホスト型アプリ です。 自動メタデータ取得 やアートワーク表示、複数プラットフォーム対応が特徴。 エミュレータ連携 により、N64やPS1など多機種のゲームを直接ブラウザで遊べます。 コミュニティ主導開発 で、オープンソースかつAGPLv3ライセンス。 多様な拡張や連携 も進行中、ROM管理の決定版を目指すプロジェクト。

RomM(ROM Manager)とは

  • 自宅サーバーで動作 するレトロゲーム用ROM管理アプリ
  • PlexやJellyfinのROM版 としての位置付け
  • フォルダ内ROMを自動スキャン し、オンラインから メタデータやアートワークを取得
  • EmulatorJSやRuffleRS を利用し、ブラウザ上で直接ゲームプレイ可能
  • N64、Game Boy Advance、Nintendo DS、PlayStation 1 など多機種対応

主な機能

  • IGDB、Screenscraper、MobyGames などからのメタデータ自動取得
  • SteamGridDB からのカスタムアートワーク取得
  • Retroachievements による実績表示
  • 400以上のプラットフォーム に対応したメタデータカバレッジ
  • EmulatorJS/RuffleRS によるブラウザ内エミュレーション
  • フレンドへの共有機能 (アクセス権限設定可)
  • Playnite、muOS 向け公式アプリ提供
  • マルチディスク、DLC、MOD、ハック、パッチ、マニュアル の管理
  • タグ付きファイル名の解析・フィルタリング
  • Webブラウザ上でのゲーム追加・編集・削除操作

インストール・導入

  • クイックスタートガイド を公式ドキュメントで提供
  • トラブルシューティング ページで一般的な問題を解決
  • 最新デモ (動作はやや遅め):https://demo.romm.app/

コミュニティと貢献

  • オープンソース(AGPLv3) で開発
  • Discord での質問・アイデア投稿・交流・コレクション自慢
  • コントリビューションガイド で貢献方法を案内
  • Playnite(Windows)、muOS(Anbernic)、Decky Loader(Steam Deck) 連携
  • romm-comm(Discord Bot)・DeckRommSync(SteamOS同期)・CasaOSアプリ などコミュニティ製拡張

サポート・支援

  • GitHubリポジトリでのIssue投稿 による技術サポート
  • Open Collective での開発支援受付

参考プロジェクト

  • EmulatorJS :埋め込み型ブラウザエミュレータ
  • RetroDECK :SteamOS/Linux向けレトロゲーミング
  • ES-DE Frontend :Linux/macOS/Windows用エミュレータフロントエンド
  • Gaseous :Webエミュレータ搭載ROMマネージャ
  • Retrom :ゲームライブラリ一元管理サービス
  • Steam ROM Manager :Steam用ROM管理アプリ

特徴まとめ

  • 2年以上の開発実績、少人数の友人グループによる運営
  • 企業支援なし、純粋なコミュニティドリブン
  • 拡張性・カスタマイズ性 が高く、今後も新機能追加予定

Hackerたちの意見

AGPLv3でいてくれてありがとう!必要なディレクトリ構造を明確に示してくれたのも大感謝。時々、分かりにくいこともあるからね。全体的にドキュメントも素晴らしいよ!

それ聞いて嬉しいよ!

RetroArchやLakka.tv、Emulator Station、EmuDeck(これらのいくつかを包むSteam Deck用のラッパー)と比べて、これを使うメリットを教えてもらえる?個人的にはブラウザでプレイするのはちょっとマイナスに感じるんだよね。

これは自己ホスティングのソリューションだから、君が挙げたソフトウェアとは違うよ。Dockerを使ってサーバーにインストールして、クリーンなインターフェースでROMライブラリを管理できるんだ。Web UI自体でプレイできるのも追加機能で、emulatorjs(emulatorjs.orgから)を統合したばかりなんだ。

理想的には両方を使って、コミュニティがEmuDeckがサーバーからゲームを引っ張ってきて、セーブデータをサーバーに同期するような統合を作ってくれるといいね。私は普段WindowsでPlaynite(https://playnite.link/)を使ってプレイしていて、プラグイン(https://github.com/rommapp/playnite-plugin)を使うと、各システムのゲームリストを引っ張って表示してくれるから、プレイしたいゲームをPCにインストールできるんだ。

RomMは素晴らしいプロジェクトだね!統合が進んでいくのが楽しみだよ。たくさんのレトロボックスをセットアップしてきた者として、一度設定しておけば自宅のサーバーから他のデバイスにコレクションを配信できるのはすごく魅力的だ。ウェブベースのエミュレーションはかなり進化したけど、やっぱり個々のデバイスでプレイするのが好きなんだ。多くのデバイスはブラウザのサポートが良くないからね。それぞれのシステムを設定するのには何時間もかかるけど、BatoceraのインスタンスやES-DEのセットアップをサーバーに向けて、ROMやBIOSファイル、スクリーンショットなんかが自動でポップアップするのは夢のようだ。これがエミュレーションエコシステムの未来かもしれないし、すごくワクワクする!

君のビジョンと熱意が大好きだよ!もうしっかりしたセットアップができていて、RomMの未来バージョンにぴったりな使い方をしてるみたいだね。

以前アイデアを思いついたことがあるけど、作る時間もモチベーションもなかったんだ。ゲームデザインのデータベースで、ゲームプレイのスニペットへのリンクを含むもの。例えば、「2Dプラットフォーミング」についてのアーティクルがあって、スーパーマリオの実装を議論し、「デモ」ボタンを押すと特定のジャンプセクションを示すセーブステート付きのウェブエミュレーターが立ち上がるみたいな。法的には危険かもしれないけど、私の法律に詳しくない頭ではフェアユースだと思う、特にエミュレーターがフルゲームをプレイさせないなら。どうかな、でもこれはネット上でユニークなものになると思う。追記:これすごいね、私も個人用のインスタンスをすぐにセットアップするつもりだよ。

面白いアイデアだね、週末プロジェクトやPOCとして楽しそう!EmulatorJS(https://emulatorjs.org/)のチームは、静的なウェブサイトにプレイヤーを簡単に埋め込むことができるようにしてくれたし、事前にロードされたゲームやカスタム設定もできるんだ。

法的に危険かもしれないけど、法律の専門家じゃない私の頭では、それはフェアユースだと思う。特にエミュレーターがフルゲームをプレイさせない場合はね。よくわからないけど、インターネット上でユニークなものになると思う。私は法律の専門家じゃないけど、多くの人が理解していないのは、「フェアユース」は防御手段だってこと。つまり、裁判で主張する準備が必要ってことだよ。多くの潜在的なフェアユースは、その段階に至る前に潰されちゃうんだ。それに、バランスのテストでもあるから、事実や文脈に依存していて主観的なんだ。だから、多くのケースでは、実際に裁判に行くまでわからないことが多いんだよね。

MAME/MESSはそれにGIFファイルを使ってたよ。

ROMを削除すれば、フェアユースの主張がもっと強くなると思うよ。そんなに難しくないはず!数秒だけ動かして、メモリアクセスを全部記録して、ヒットしなかったものはゼロにしちゃえばいいんだ。

このアイデアは、Joël FranušićとAdam Smithによって探求されたよ。「ゲームボーイゲームのためのプレイ可能な引用」 - https://www.youtube.com/watch?v=z9JYOZWLMlo

データベースのアイデアは面白いけど、ウェブエミュレーター部分が何を追加するのか、ちょっと疑問だな。アニメーションGIFか、ボタンをクリックしてデモを見せるHTML5オブジェクト、例えば立った状態の横ジャンプの軌道と走った状態の横ジャンプの軌道を比べるだけなら、オーバーヘッドも少なくて、もっと直感的だと思う。

しばらくこれを追ってるけど、ROMの名前変更や検証(.datファイルを使って)に対応しないと「ROMマネージャー」とは呼べないよね。

1000%同意!実際、Hasheous(https://hasheous.org/)でそれをやる予定なんだ。これは「ROMやデジタルゲームのMD5やSHA1ハッシュをメタデータプロバイダーと照合する無料サービス」だよ。プロジェクトの作成者がホストしているクラウド版もあるし、自分でインスタンスを立てて.datファイルを使うこともできるよ。

あなたのコメントに興味をそそられたよ。これを使うには、その機能が必要なんだ。どうやら、Igirというツールと統合して、DATファイルを使ってROMの検証や名前付けをサポートしているみたいだね。https://docs.romm.app/latest/Tools/Igir-Collection-Manager/

主にGOGゲームの整理のために使ってるよ。GOGのアプリも使えるけど、完全オフラインのコピーを持つ目的は、買った人たちに管理されないことだからね。Rommはこれにすごく役立ってる。

インターネットから何かを取得するってことは、どこかのクラウドが自分がどのゲームをプレイしているかを知っているってことだよね。それってプライバシーのリスクだよ。プレイしたゲームは性格タイプを明らかにするし、他の個人情報もたくさん含まれてるから、データを集めて広告主に売る誘惑がすごく高いんだ。

それはオプションだよ。統合を設定しなければ、インターネットから何も取得しないからね。ただ、カバーアートがないと見た目がかなり地味になるけど。

なんてタイミングがいいんだ!次のリリースには、LaunchboxのGamesDB(https://gamesdb.launchbox-app.com/)をメタデータソースとして使う新しいローカル専用の「API」が含まれるよ。データベース全体がRedisに読み込まれて、ゲームは正確なファイル名で照合されるから、データはクラウドプロバイダーに送信されることはないんだ。https://github.com/rommapp/romm/pull/1515

インターネットから何かを取得するってことは、どこかのクラウドが自分がプレイしているゲームを知っているってことだ。プライバシーのリスクがあるよ。プレイしたゲームは性格タイプを明らかにするし、他にも個人情報がたくさんある。OPはすでにその懸念を完全に解消する機能について返信しているみたいだけど、クラウドサービスがあなたがプレイしているゲームを知っているわけじゃなくて、持っているゲームを知っているだけだから、実際にプレイしているゲームのリストとは大きく異なる場合が多いよ。特に、ライブラリへのアクセスを管理して簡素化するツールに興味があるほどの大きなROMコレクションを持っている人にはね。ほとんどの潜在的なユーザーは、実際にプレイしているゲームのリストよりもはるかに大きなコレクションを持っていると思うよ。多くの場合、「完全な」コレクションの一種だね。

2年前にPS4とSwitchのROM用に、自分でかなり mediocre なバージョンを作ったんだ。IGDBとかも使って。こんなに洗練されてプロっぽいものができて嬉しいよ!メンテナンスしてる人に聞きたいんだけど、これはサポートされているROMファイルからメタデータ(例えばタイトルIDやPKG ID)を直接取得するの?それともファイル名からだけ?READMEとDocsをざっと見たけど、はっきりした答えが見つからなかった。

こんにちは!Switchのようなプラットフォームでは、ゲームにタイトルIDがあるから、まずはRomMがすでに読み込んでいる静的ファイルと照合して、それがダメならメタデータプロバイダー(今のところIGDB、screenscraper、mobygames)を使ってファイル名で検索するよ。

最初に思ったのは、こういうプログラムが「ホスティング」されるって、どういう意味なんだろう?次に考えたのは、ROMをたくさんプレイする人たちは、普通のオンラインメタデータソースよりもそのゲームについて詳しいからやってるのか、あるいは大半が改造されたり完全に自作のものだったりするのかなってこと。

自分は、エミュレーターが自分自身を読み込むROMとして書かれているって意味だと思ったけど、たぶんそれは違うんだろうな。最近の子供たちは、いろんな意味で言葉を使いまくってるからね。

「ホスティング」というのは、自己ホスティングのことで、DockerやProxmox、Unraidを使ってサーバー上で動かして、ウェブブラウザからアクセスできるってこと。ローカルのデバイスで動かすのとは違うんだ。全ROMセットを持っている人には理想的な解決策ではないけど、コレクションを管理しやすいサイズに絞っている人には最高だよ。数百から数千のゲームまでいけるし、その規模だとメタデータソースもかなりしっかりしてる。

少なくとも自分にとってのキラーフィーチャーは、ブラウザでemulatorjsを使ってネットプレイの協力ゲームができることかな。 :)