RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/AIモデル
AIモデル/2026-04-27上級

Rork × OpenAI Apps SDK:ChatGPT 内で動くアプリを Rork のコードベースから配信する実装ガイド

Rork で作ったモバイルアプリのビジネスロジックを ChatGPT 内のミニアプリとして配信する完全実装ガイド。MCP サーバー設計、UI Resource、OAuth 認証共有、Universal Link での会話継続、課金一貫性まで本番運用ノウハウを解説します。

Rork515OpenAI5Apps SDKChatGPTMCP3配信戦略

プレミアム記事

「ChatGPT の中で動くアプリ」という配信チャネルが、2025 年秋に静かに開かれました。これまでは App Store と Google Play がモバイルアプリの主戦場で、その外側にいるユーザーには SEO や広告でしか届かなかったわけですが、Apps SDK の登場によって ChatGPT を日常的に使う数億人の会話画面に直接アプリを差し込む選択肢ができました。問題は、Rork で開発しているアプリのコードベースをそのまま再利用できるのか、認証や課金が二重管理にならないか、本番でつまずきやすい場所はどこか、という実装側の生々しい疑問が公式ドキュメントだけでは解像度が荒いまま残ってしまうことです。

私はこのガイドで、Rork で動いている既存のアプリに Apps SDK 配信レイヤーを追加するときに発生する設計判断を、サンプルコードと一緒にひととおり通してみます。「ChatGPT 内とモバイルで同じユーザーを識別する」「会話の途中でモバイルに飛ばして続きを完結させる」「課金経路を分けても収益データを一本化する」といった、後回しにすると痛い目を見る部分を中心に扱います。

ChatGPT 内アプリと Rork アプリの「共通基盤」をどう設計するか

最初に決めるべきは、Apps SDK 用のサーバーを Rork のバックエンドと同じ場所に置くか、別プロジェクトにするか、です。私は Rork のバックエンドと同じ Cloudflare Workers / tRPC ベースのリポジトリの下に /mcp ルートを切る方式を好みます。理由は、ユーザー DB・課金状態・利用ログを一箇所に集中させるとデータ分析と運用が楽になるからです。

具体的には、次のレイヤー構造で考えます。共通基盤として、ドメインロジック(タスク作成・検索・更新といったビジネスルール)は core パッケージに置き、それを呼び出す入口として「Rork アプリ向けの REST/tRPC ハンドラー」と「Apps SDK 向けの MCP ハンドラー」を並列に配置します。これによりロジック修正は一箇所で済み、配信チャネルが増えても保守が破綻しません。

packages/
  core/                 # ドメインロジック(純粋関数)
  mobile-api/           # Rork アプリが叩く REST/tRPC エンドポイント
  apps-sdk/             # MCP サーバー (ChatGPT から叩かれる)
  shared/               # 認証・課金・ユーザー識別子の共通型定義

この構造の最大の利点は、ChatGPT 内アプリで生じる仕様変更(ツールの追加、UI Resource の変更)が Rork アプリのリリースサイクルから独立する点です。Apps SDK は MCP サーバーを更新するだけで反映されますが、Rork アプリは App Store の審査を経由します。サイクルが大きく違うので、最初から疎結合にしておくことが本番では効きます。

Apps SDK の MCP サーバーを Cloudflare Workers で 30 分で立ち上げる

Apps SDK は Model Context Protocol(MCP)の上に構築されています。ChatGPT は MCP クライアントとしてあなたのサーバーにツール呼び出しをかけてきます。Cloudflare Workers でホストする場合、最小構成は驚くほどシンプルです。

// apps-sdk/src/server.ts
import { Hono } from "hono";
import { McpServer } from "@modelcontextprotocol/sdk/server/index.js";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
import { z } from "zod";
import { createTask, listTasks } from "@core/tasks";
 
type Env = { DB: D1Database; OPENAI_APPS_SHARED_SECRET: string };
 
const app = new Hono<{ Bindings: Env }>();
 
app.post("/mcp", async (c) => {
  // Apps SDK からのリクエストの署名を検証
  const sig = c.req.header("x-openai-apps-signature");
  if (!verifySignature(sig, await c.req.text(), c.env.OPENAI_APPS_SHARED_SECRET)) {
    return c.json({ error: "invalid_signature" }, 401);
  }
 
  const server = new McpServer({ name: "task-app", version: "1.0.0" });
 
  // ツール定義: ChatGPT が呼び出せる関数
  server.tool(
    "create_task",
    {
      title: z.string().describe("タスクのタイトル"),
      due_date: z.string().optional().describe("YYYY-MM-DD 形式の期日"),
    },
    async ({ title, due_date }, ctx) => {
      const userId = await resolveUserId(ctx, c.env.DB);
      const task = await createTask(c.env.DB, { userId, title, dueDate: due_date });
      return {
        // ChatGPT 側に返す UI Resource
        content: [
          { type: "resource", resource: { uri: `ui://task-card/${task.id}` } },
        ],
        structuredContent: { taskId: task.id, title: task.title },
      };
    }
  );
 
  // 既存タスクの一覧
  server.tool("list_tasks", {}, async (_, ctx) => {
    const userId = await resolveUserId(ctx, c.env.DB);
    const tasks = await listTasks(c.env.DB, userId);
    return {
      content: [
        { type: "resource", resource: { uri: `ui://task-list?count=${tasks.length}` } },
      ],
      structuredContent: { tasks },
    };
  });
 
  const transport = new StreamableHTTPServerTransport({});
  await server.connect(transport);
  return transport.handle(c.req.raw);
});
 
export default app;

ここで意識すべき点は二つです。第一に、署名検証を最初から入れること。OpenAI 側は x-openai-apps-signature ヘッダーで HMAC を送ってきますので、共有秘密鍵を Cloudflare Workers の Secrets に入れて毎リクエストで検証します。これを後回しにすると、本番デプロイ後に「誰でも MCP サーバーを叩ける」状態が露出します。第二に、ツールの戻り値は structuredContentcontent を両方返すこと。前者は ChatGPT のモデルが推論で使い、後者はユーザーに見える UI として描画されます。両方を返さないと、会話文脈にデータが残らず、続きの質問でモデルが無駄に再取得しに行きます。

私は最初、structuredContent を省いていたのですが、ユーザーが「さっき作ったタスクの期日を変えて」と言った瞬間にモデルがタスク ID を見失うバグに遭遇しました。設計時から両輪で返すと決めておくと、こういう罠を踏みません。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
「ChatGPT 内アプリも作りたいが、何から手をつけていいかわからなかった」読者が、Rork のコードベースを最大限再利用しながら今日から実装を始められる
MCP サーバー・UI Resource・OAuth 共有・Universal Link 連携の動くサンプルコードを手に入れ、ChatGPT 内とモバイルアプリで「同じユーザー・同じ状態」を維持する設計パターンを習得できる
ChatGPT の数億ユーザーへ自分のアプリを露出させる新しい配信チャネルを開拓し、ASO だけに頼らない流入経路を構築できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

AI モデル2026-04-02
Rork × MCP(Model Context Protocol)実装ガイド — AIツールを自在に統合する次世代モバイルアプリ開発
Anthropic が提唱するMCP(Model Context Protocol)をRorkアプリに統合する完全ガイド。アーキテクチャ設計からストリーミング対応・認証・プロダクション運用まで、実装コード付きで体系的に解説します。
AI モデル2026-07-17
3分の動画だけが失敗する — Rork の動画解析をワーカー経由から端末直送に引き直す
Gemini Files API に動画を渡す経路を、Cloudflare Workers 中継から端末直送へ引き直した記録です。128MB のメモリ上限に当たる仕組み、resumable upload の発行だけをサーバーに残す実装、解像度とフレームレートで請求を決める判断までをまとめます。
AI モデル2026-07-05
家計アプリのAI分類が『その他』に飲まれていくとき — 静かに崩れる支出仕分けを計測して立て直す運用メモ
Rork で作ったAI家計アプリの支出自動分類は、リリース直後は当たっていても数ヶ月かけて静かに精度が落ち、月末アドバイスまで狂わせます。確信度と分類分布を計測してドリフトを先回りする運用手順を、動くコードとともにまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →