RORK LABEN
MAX — Rork MaxがネイティブSwiftアプリを生成し、iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDAR、Metalによる3D、Dynamic Island、Live Activities、HealthKit、Core MLなどに手が届きますPUBLISH — 2クリックでApp Storeへ提出でき、申請まわりの手間が大きく圧縮されていますPRICING — Rork Maxは月200ドル、元のRorkは無料で始められ有料は月25ドルからですFUNDING — Rorkがa16zから280万ドルを調達し、月間74万超の訪問・成長率85%と紹介されていますTOOL — 元のRorkはReact Native(Expo)でiOSとAndroidのアプリを自然言語から生成しますMAX — Rork MaxがネイティブSwiftアプリを生成し、iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDAR、Metalによる3D、Dynamic Island、Live Activities、HealthKit、Core MLなどに手が届きますPUBLISH — 2クリックでApp Storeへ提出でき、申請まわりの手間が大きく圧縮されていますPRICING — Rork Maxは月200ドル、元のRorkは無料で始められ有料は月25ドルからですFUNDING — Rorkがa16zから280万ドルを調達し、月間74万超の訪問・成長率85%と紹介されていますTOOL — 元のRorkはReact Native(Expo)でiOSとAndroidのアプリを自然言語から生成します
記事一覧/アプリ開発
アプリ開発/2026-07-01上級

Rork Max のネイティブ Swift で SharePlay を組む — 二人の画面を同じ状態で動かす設計

GroupActivities を使い、FaceTime 越しに二人の画面を同じ状態で動かす SharePlay を Rork Max のネイティブ Swift で組む実装メモです。GroupActivity の宣言、GroupSession への参加、GroupSessionMessenger での状態同期、遅延と競合の扱い、そして React Native 側から橋渡しするときの境界設計まで、実際に詰まった点を添えてまとめます。

SharePlayGroupActivitiesRork Max201iOS94SwiftUI58

プレミアム記事

離れて暮らす家族と電話をつなぎながら、同じ画面を一緒に眺めたい、という場面があります。写真を一枚ずつ送り合うのではなく、こちらがめくれば相手の画面も同じ写真になる。そういう「同じものを一緒に見る」体験は、実装してみると想像以上に難しく、そして一度動くと理屈抜きに楽しいものでした。個人開発でユーティリティ系のアプリをいくつか運営してきましたが、SharePlay は「一人で使う道具」を「二人で使う場」に変える数少ない仕組みだと感じています。

その土台になるのが GroupActivities です。FaceTime 通話の上に自分のアプリのセッションを重ね、参加者全員の端末で状態を揃えられます。ただしこの仕組みは完全にネイティブの領域で、JavaScript から素直に触れる API がありません。だからこそ、Rork Max がネイティブ Swift を生成するようになったことに意味があります。ここでは、二人の画面を同じ状態で動かす最小の SharePlay を組みながら、実際に詰まった箇所を順にまとめます。

なぜこれは React Native 版では現実的でないのか

最初にここを整理しておくと、後の設計判断が楽になります。SharePlay の中核は GroupActivities フレームワークで、GroupActivity プロトコルへの準拠、GroupSession の非同期な受け取り、GroupSessionMessenger による低レベルなメッセージ授受で構成されます。これらはいずれも Swift の型と async シーケンスに深く結びついていて、ブリッジ越しに扱うには相性が悪い部類です。

観点React Native(Expo)単体Rork Max のネイティブ Swift
GroupActivity の準拠JS の型で表現できないSwift の構造体で素直に宣言できる
GroupSession の受け取りasync シーケンスを橋渡ししづらいfor await でそのまま受ける
状態同期の粒度ブリッジ往復の遅延が乗るネイティブ内で完結し軽い
システム UI 連携共有ピッカーに出しにくいOS の SharePlay UI に自然に載る

私自身、最初は「Expo のネイティブモジュールで薄く包めば足りるだろう」と考えていました。ところが GroupSession の受け取りと Messenger の送受信を橋渡ししようとすると、境界を越えるたびに状態がずれ、同期のはずが同期にならないという本末転倒に陥りました。SharePlay に関しては、体験の中心をネイティブ側に置き、React Native からは「始める/終える」だけを叩く、という割り切りが現実的だと考えています。Rork Max がこの中心部分を Swift で生成してくれるので、その割り切りが実装として成立します。

一緒に動かす「活動」を宣言する

SharePlay は、まず「何を一緒にするのか」を型として宣言するところから始まります。ここでいう活動が、参加者の間で共有される単位になります。写真を一緒にめくる、という体験なら、めくっている対象を識別できる最小限の情報を持たせます。

import GroupActivities
 
struct SharedGalleryActivity: GroupActivity {
    // 一緒に見るギャラリーの識別子
    var galleryID: String
 
    var metadata: GroupActivityMetadata {
        var meta = GroupActivityMetadata()
        meta.title = "ギャラリーを一緒に見る"
        meta.type = .generic     // 動画や音楽でなければ .generic
        return meta
    }
}

type は用途に応じて選びます。動画同時再生なら .watchTogether、音楽なら .listenTogether を選ぶと、システムが再生制御まで面倒を見てくれますが、今回のように独自の画面を同期させるだけなら .generic が扱いやすいです。ここを .watchTogether にすると OS が再生 UI を期待してしまい、かえって噛み合わなくなります。私は最初にそこを取り違えて、余計なコントロールが画面に出てくる理由がしばらく分からず悩みました。

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

この記事の続きを読む

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

この記事で得られること
GroupActivity の宣言から GroupSession への参加、セッション破棄までの一連の流れを、動く Swift コードで追えます
GroupSessionMessenger で二台の状態を揃える最小設計と、遅延・競合・後から参加した人への追いつきをどう扱うかの判断基準が分かります
SharePlay がなぜ React Native 版では現実的でなく Rork Max のネイティブ生成が要るのか、その境界を実装レベルで説明します
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-07-01
Rork Max のネイティブ Swift で ShazamKit を使い、流れている曲を認識するアプリを作る
SHManagedSession を使って、周囲で流れている曲を認識するアプリを Rork Max のネイティブ Swift で組む実装メモです。旧来の AVAudioEngine 手回しとの違い、idle・prerecording・matching の状態設計、認識精度を上げる prerecording の使いどころ、Expo からの橋渡しの境界設計まで、実際にハマった点を添えてまとめます。
アプリ開発2026-06-28
Rork Max でバーコードとテキストを同時に読むスキャナを VisionKit で実装する
Rork Max のネイティブ Swift アプリに、バーコードとテキストをライブで読み取る画面を VisionKit の DataScanner で実装します。SwiftUI への組み込み、可用性判定、連続検出のスロットリング、実機検証までを実装コード付きで扱います。
アプリ開発2026-07-01
ブロック画面を自分のアプリらしく作り替える — Rork Max で ShieldConfiguration とボタン処理を実装する
スクリーンタイム系アプリで表示される灰色の遮蔽画面を、自分のアプリのトーンに作り替えます。ShieldConfiguration 拡張でUIを差し替え、ShieldAction でボタンの挙動まで制御する実装を、Rork Max のネイティブ構成に組み込む形でまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →