プレイ可能である DOOM 用 MCP アプリ

2026/04/29 4:08

プレイ可能である DOOM 用 MCP アプリ

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本テキストでは、AI クライアントへの統合を目的とした簡素化され、プレイ可能な DOOM アプリケーションの成功裏なリリースが発表されています。プログレッシブ・エンハンスメントを活用することで、コアとなるゲームプレイは WebAssembly を用いてブラウザ内で直接実行され、高度なインターフェースは ChatGPT や Claude のような機能を持つホスト内でのみ表示されます。この安定性はアーキテクチャの簡素化によって達成されました:開発者は不安定なネストされた iframes を削除し、セーブゲームなど永続的なストレージ機能を排除することでバグのない体験を実現しました。システムは軽量な TypeScript サーバーを用いてセッショントークンを安全に管理しており、複雑な認証フローなしで Netlify でゲームを滑らかに実行できます。その結果、ユーザーはページから離れることなく既存の AI チャット環境内で即座に DOOM をプレイできるようになり、完全サポートを提供しないブラウザは自動的に標準 URL へフォールバックします。このアプローチは、企業が高機能かつ堅牢な簡素さを実現し、多様なデバイスとプラットフォームで即時アクセシビリティを確保しながら、レガシーエンジンを実行する近代的なアシスタント内部で実行するための再現可能なブループリントを提供します。

本文

2026 年 4 月 17 日 | ゲーム開発 | クリエイション

MCPI は、ChatGPT や Claude のような互換性のある AI クライアント内でインラインで起動可能となる、プレイ可能な DOOM MCP アプリを作成しました。一方、それ以外の環境では通常のブラウザ URL にフォールバックします。

Claude Web 上で動作する DOOM MCP アプリとは、「Claude Desktop」のような MCP ホスト内部でレンダリングされる「インタラクティブな UI アプリケーション」のことです。最終的なバージョンは意図的にシンプルに設計されています:

  • インラインで DOOM セッションを作成するための単一の MCP ツール
  • 単純な起動 URL を返すための単一の MCP ツール
  • /doom/play
    の 1 つのブラウザルート
  • インライン表示も通常の表示でも機能する、両方の環境で有効な署名付きトークン フロー

ツールと構造化された相互作用を目的としたプロトコルを用いて「DOOM を動かすことが可能か?」と問いかけたことに、ある種の心地よさがあります。

基本的なアイデア MCP アプリはプログレッシブ改善の手法です。そのため、このアプリには 2 つの役割があります:

  • ホストがインライン UI をサポートする場合、MCP アプリ表示内に DOOM セッションを起動する
  • ホストがそれをサポートしない場合、通常の起動 URL を返す

作業の大半は「DOOM をブラウザ内で動作させることができるか?」という点ではなく、そこにありました。その部分はすでに十分に探求済みのものでした。本当に大変だったのは、異なるイフレイム(iframe)、CSP(コンテンツセキュリティポリシー)、および UI レンダリングに関する独自の規則を持つ、さまざまなクライアントにおいて、同じセッションを動作させることに費やされました。そのため、アーキテクチャは比較的シンプルなものとなりました:

  • 小型の MCP サーバー
  • ブラウザ用の DOOM シェル
  • 起動 URL に渡される署名付きトークン
  • netlify
    のデプロイ上の
    /doom/*
    /doom/mcp

ブラウザ上で DOOM を開始する ブラウザ側では

cloudflare/doom-wasm
を使用し、エンジン全体をゼロから構築することなく、ブラウザ内で真正な DOOM ランタイムを実現しました。そのランタイムを自分のサイトに接続し、専用の
/doom/play
ルートを設定するとともに、プロジェクトが再配布可能であるようにするため、デフォルトコンテンツとして Freedoom Phase 1 を採用しました。

最初のバージョンはブラウザシェルであり、ランタイムを読み込み、キャンバスを取り付け、DOOM を起動するものでした。基本的なブラウザルートが機能し始めて以降、安定した基盤となりました:

  • ブラウザページ
  • 動作する DOOM ランタイム
  • 署名付き起動 URL の概念
  • Freedoom をデフォルトコンテンツとする

MCP の追加 ここから TypeScript ベースの MCP サーバーを追加しました。最初の目標は明快でした:DOOM セッションを作成し、署名付き起動 URL を返すツールを公開することです。それが

create_doom_session
となり、やがてインラインアプリ UI をレンダリングできないクライアント向けに、よりシンプルなフォールバックとして
get_doom_launch_url
も追加しました。

ここで重要な設計判断とは、起動パスを自己完結なものに保つことです。URL 内の署名付きトークンだけでゲームを起動できるため、ブラウザルートが遊び開始のためにサーバー側のセッション永続化に依存する必要はありませんでした。それが結果的に良き妥協点となったのです。

インラインアプリレンダリングにおいて変わった部分 URL の起動は容易です。問題は MCP アプリの内部で DOOM をインライン表示することです。ここが面白い部分でもありました。最初に埋め込まれたバージョンは混乱を招きました。一度は、紙の上では妥当に見えましたが、すぐにブラウザのセキュリティポリシー、ホストの CSP、埋め込み制限という現実と直面するネストされたイフレイム設定を採用しました。いくつかのホストではツールを正常に呼び出して URL を生成できても、インラインアプリ自体が失敗することがあり、その原因は DOOM には無縁で、ホストがコンテンツの表示方法を許容するか否かにありました。

そこで、MCP アプリの UI をより直接的に再構築しました。アプリ表示を別のフレームのシェルとして扱う代わりに、DOOM キャンバスをホストのイフレイムの内部で直接実行する方式に切り替えました。これにより以下の課題が解消されました:

  • ネストされたイフレイムに関する問題
  • frame-src に関する問題
  • 余分なナビゲーションの仮定
  • より脆弱なホスト固有の挙動

これはプロジェクトにおける最大級の概念的転換でした。ブラウザページを MCP アプリに埋め込むことにこだわらなくなり、MCP アプリそのものをブラウザページとして扱うようにしたことで、すべてがはるかにシンプルになりました。

Codex ターミナルから Web 上で動作する DOOM | Netlify とデプロイ経路 あらゆるものがメインサイトの下でホストされることを望んだため、デプロイ対象は以下のようになり:

  • /doom/play
  • /doom/mcp

その結果、プロジェクトを Netlify のモデルに適応させ、静的な DOOM アセットと MCP サーバーが円滑に共存するように確保しました。アプリは今や

chrisnager.com/doom/*
下に配置され、DOOM 固有の部分はそれぞれ名前空間を割り当てました。この整理は意味がありました。リポジトリをより容易に理解できるようになり、DOOM の仕事がサイト全体の他の部分と混在することを防ぎました。

つまらない部分のデバッグ 作業の多くは華やかではありませんでした。以下の点に関するデバッグが数回繰り返されました:

  • 起動オリジンが破損していること
  • WAD パスが誤った場所から解決されること
  • ブラウザ側のトークンブートストラップで誤ったコードをインポートすること
  • Netlify ファーンのパッケージング
  • 埋め込みホストにおける CSP の失敗
  • アプリイフレイム内のバレットバックされたプリロード挙動

特に面倒だった一类のバグはコンテンツパスから発生しました。アプリは一つの環境では正常に動作する一方で、別の環境では WAD を誤ったオリジンから、あるいは誤ったルートから読み込もうと試みました。結局、バレットバックされたプリロードパスを削除し、WAD/構成を直接 Emscripten ファイルシステムに記述しました。これにより可動部分が削減され、インラインアプリパスの信頼性が向上しました。

全体を簡素化する ある時期、プロジェクトはより多くの機能を備えていました:

  • 保存/読み込み
  • ステータス報告
  • スクリーンショット
  • 永続化アダプター
  • サーバー検証ブートストラップフロー

しかしそれらほぼ全てを削ぎ落としました。小さくなったことで、プロジェクトははるかに安定しています。最終的な形状は焦点が絞られています:

  • インライン対応ホスト向けに
    create_doom_session
  • フォールバッククライアント向けに
    get_doom_launch_url
  • ブラウザ再生用に
    /doom/play?token=...

これは、十分に楽しくて、技術的に面白く、実際に使いやすいものです。

Claude macOS 上で動作する DOOM | 現在機能していること 現在のバージョンは以下のことが可能です:

  • インライン対応ホストの MCP アプリ表示内でインラインで DOOM を起動する
  • それ以外の環境では通常のブラウザ URL を返す
  • 両方のケースにおいて、同じ署名付きトークン セッションモデルから動作する
  • ブラウザパスが何かを見せる以前にサーバー状態に依存している必要がないほど、自己完結性が高い

この最後の点は重要です。「DOOM をプレイする」というパスが、ユーザーが何も見せないでサーバーの状態を多数依存すれば、楽しさではなくインフラになり兼ねません。私は「楽しく」作りたいと思いました。

なぜこれを構築したのか MCP アプリは新しくて興味深いです。初期のコンピュータゲームデザインの制約に魅了され、常に DOOM が新しい表面へ移植される様子を見るのは楽しいことです。このサイドプロジェクトは、MCP アプリの正体を明確に考えることを強制しました。単に JSON を返すツールだけでなく、ウェブと同じすべての制約(レイアウト、フォーカス、アセット読み込み、入力、セキュリティ境界線)を持つ真正なインタラクティブ表面としてです。プロトコル設計とブラウザのクイックスの組み合わせは、解く面白い問題です。

ChatGPT Web 上で動作する DOOM | 最終的な想い このプロジェクトで最も気に入った部分は、単純な相互作用で終了することです。DOOM を求める。ツールがセッションを作成する。アプリは可能であればインラインで開く。不可能でも起動 URL が得られ、ゲームも正常に動作します。掲げた目的を達成しました:機能の最大化ではなく、そのアイデアが貫かれることでだけです。

このプロジェクトは、ChatGPT と Claude で DOOM が動作することを証明しています。ソースコードをご覧ください。

余計な効果 DOOM は部分的に ChatGPT や Claude iOS アプリで動作します。

同じ日のほかのニュース

一覧に戻る →

2026/04/29 4:44

Ghostty は GitHub から撤退します。

## Japanese Translation: GitHub ユーザー 1299 が 18 年にわたり作成・維持してきたターミナルエミュレータ Ghostty が、プラットフォーム上の重要なインフラ障害の発生により、創始者が現在それを重大な業務に不適切と見なし始めたことを受け、公式に GitHub を離れる予定である。最近の GitHub Actions の停電は数時間ほど PR レビューをブロックし、これは Git そのものの問題ではなく GitHub サービス自体の構造的な問題を浮き彫りにしている。同月中盤の主要な GitHub 障害(同日に Elasticsearch の障害も発生したが別の事件)と時期を同じくしてこの週に終了した議論が、プロジェクトの移行計画を見事に実現させながら、現在の URL で即時のコードアクセスのために読み取り専用ミラーを維持するという方針で進められた。創始者は、新たなホスティングソリューションを探す過程で、商業的およびフリーソフトウェアの複数のプロバイダーから依存関係を段階的に削除していくことを意図している。この動きは、不揃いなサービスレベルを持つ主要プラットフォームに依存するオープンソースプロジェクトの長期的な持続可能性に対する業界全体の懸念の高まりを示しており、維持者は利便性よりも安定性を最優先することを促している。

2026/04/29 8:54

ChatGPT も広告を表示しています。以下がその全体的な帰属循環のプロセスです。

## Japanese Translation: OpenAI は、ChatGPT に独自の広告システムを直接統合し、SSE ストリームに `single_advertiser_ad_unit` オブジェクトを注入し、クリエイティブ資産を独自ドメインである `bzrcdn.openai.com` 上にホストしています。ブラウザには OAIQ v0.1.3 という追跡用 SDK が実行されており、製品の閲覧情報を OpenAI のサーバーへ報告しています。このシステムは Fernet 暗号化されたトークン(例:`ads_spam_integrity_payload`, `oppref`, `olref`, `ad_data_token`)を使用しており、これらは公衆向けのヘッダーバイトを 9 文字含み、トークンの発行時刻の復元を可能にしています(例:2026 年 4 月 26 日)。クリックされたリンクは外部ではなく ChatGPT の内部ウェブビュー内(`open_externally: false`)で開かれるため、OpenAI はクリック後のナビゲーションを観察できます。アトリビューションチェーンには、720 時間の有効期限を持つファーストパーティcookieに格納されるフォワードトークン(`__oppref`)と、impression ログを記録する `olref` が使用されます。コンテキストターゲティングは、北京旅行、フライト、NBA など 6 つの異なる会話トピックで確認されています。広告出稿元には Grubhub や GetYourGuide があります。追跡を軽減するには、ドメイン `bzrcdn.openai.com` と `bzr.openai.com` をフィルタリングし、cookie(例:`__oppref`, `__oaiq_domain_probe`)を確認する必要があります。

2026/04/29 6:17

GitHub に至るまで

## 日本語訳: 中心的な論点是、GitHub が有用なツールから、オープンソースのアイデンティティに依存する脆弱で中央集権的なインフラへと進化しすぎているという点にある。この依存関係は危険であり、企業の管理不備と不安定性が、過去の記録と長年にわたって構築されたコミュニティへの信頼の双方を脅かしている。GitHub はコード共有を円滑化させ、事実上のプロジェクト放棄フォーク、イシュー、議論などのアーカイブとなったが、その台頭は npm エコシステムなどにおけるマイクロ依存関係の爆発的増加と同時期に起きたものである。 GitHub を以前に、オープンソースは評判、メーリングリスト、信頼できるメンテナ、そしてより多くの管理努力を要するが制御とコミュニティの文脈を保持できる自己ホスト化インフラ(例:Trac、Subversion)などに基づいていた。Git の分散型の性質が広く普及したにもかかわらず、GitHub はホスティングを単一の商用エンティティに集約し、これはソフトウェアコモンズの皮肉な中央集権化である。今日では、いくつかのプロジェクト(Ghostty、Strudel、Tenacity など)は、不安定なベンダーへの依存を回避するために、Codeberg などの独立したホスティングへ移行している。 今すぐ必要なのは、商業的モデルから完全に切り離された、公衆向けの資金を十分に得たアーカイブを作り、重要コード、リリースアソートメント、およびセキュリティ勧告や設計論争などを含む歴史的議論を保存することである。現在のようにプラットフォームの変更や急激な移行によって消えてしまう場合である。そのようなレジリエントなバックアップがない場合、業界は社会的歴史の不可逆的な損失に直面し、コミュニティが孤立しデータが脆弱になるリスクを抱えることになる。著者は GitHub の回復を望みつつも、オープンソースの歴史に対して単一のプラットフォームへの依存は無責任であると論じており、将来には pre-GitHub 時代の教訓と GitHub エポックの実態とのバランスが必要であるべきである。

プレイ可能である DOOM 用 MCP アプリ | そっか~ニュース