LASSIC Media らしくメディア
アプリにSharePlayで共同作業機能を実装、外注
LASSIC IT事業部|元請(プライムベンダー)としてシステム保守・運用を受託
この記事のポイント
- SharePlayは、FaceTime通話中に同じ画面やコンテンツをリアルタイムで共有・同期する体験の総称で、Appleは2021年のiOS15でGroup Activitiesフレームワークとして提供を始めました。
- 実装にはGroupActivity・GroupSession・GroupSessionMessengerという3つの型の役割分担を理解する必要があります。
- 遠隔サポートや共同レビュー、オンライン研修など法人向けアプリでの活用が検討でき、内製と外注の切り分けが判断材料になります。
目次
SharePlayとは、FaceTime通話中にアプリの体験を同期する仕組み
SharePlayとは、FaceTime通話や電話中に、同じ画面やコンテンツをリアルタイムで共有・同期できるようにする体験の総称です*1。Appleはこれを実現する土台として、Group Activities(共有体験をアプリに組み込むためのApple公式フレームワーク)を提供しています*1。
Group Activitiesは、動画・音楽の同時再生だけでなく、ボードゲームや資料の共同編集のように、アプリ固有の体験そのものを同期対象にできる点が特徴です*1。対応OSはiOS 15・iPadOS 15・macOS 12・tvOS 15以降で、visionOSにも対応しています*1。
本稿では、この仕組みを法人向けアプリの共同作業機能として実装する際の考え方を整理する方針です。遠隔サポートや資料・図面の共同レビュー、オンライン研修での画面同期など、業務アプリでの使いどころを想定して解説を進めます。
2021年のiOS15で登場、Group Activitiesフレームワークが土台
SharePlayは、Appleが2021年のWWDCで発表したGroup Activitiesフレームワークとともに登場しました*2。WWDC21のセッション「Meet Group Activities」では、Group ActivitiesとAVFoundation(音声・映像処理を担うApple標準フレームワーク)が連携して動作する仕組みが紹介されています*2。
Group Activitiesを利用するアプリは、FaceTime通話に参加している複数のデバイス間でグループを表現し、時間同期されたメディア再生やアプリ固有のデータ共有を実現します*2。対応はiOS・iPadOS・macOS・tvOSの複数プラットフォームにまたがり、後継のvisionOSにも拡張されました*1*2。
アプリで利用するには、Xcodeの「Signing & Capabilities」でGroup Activities機能を追加し、com.apple.developer.group-sessionエンタイトルメント(アプリが共有グループ体験を実装できることを示す設定値)を有効にする必要があります*5。この設定はアプリターゲットにのみ追加でき、既定値はYESです*5。
GroupActivity・GroupSession・GroupSessionMessengerの仕組み——画面共有や独自通信との違い
SharePlayの実装は、3つの型の役割分担で理解すると整理しやすくなります。GroupActivityは共有したい体験を定義するプロトコルで、参加者に表示するタイトルなどの説明情報を持たせます*6。ユーザーがこのアクティビティを起動すると、システムがGroupSessionという進行中のセッションを両方のデバイスに配信する仕組みです*3。
GroupSessionには、参加を待つwaiting・同期が有効なjoined・利用できなくなったinvalidatedという3つの状態があります*3。アプリ側はこの状態を監視し、joinedになった段階で画面やデータの同期処理を開始する設計になります*3。
実際のデータ送受信を担うのがGroupSessionMessengerです。既存のFaceTime通信チャネルを使ってアプリ固有のデータをやり取りするオブジェクトで、コメントやタグのような小さな情報の共有に向いています*4。この通信はエンドツーエンドで暗号化されており、Apple側もアプリのデータ内容を見ることができません*1。
ここで、既存の画面共有機能や自社構築のリアルタイム通信(WebSocketサーバーを自前で立てて複数クライアントの状態を同期する方式)との違いを整理しておきます。両者は前提条件と用途が異なるため、混同すると設計判断を誤りかねません。
| 項目 | SharePlay(GroupActivities) | 画面共有機能 | 自前のリアルタイム通信 |
|---|---|---|---|
| 前提条件 | アクティブなFaceTime通話が必須*8 | 通話・会議アプリ側の機能に依存 | 自社サーバー・ネットワーク環境 |
| 通信経路 | Appleが管理する暗号化チャネル*1 | 通話・会議ベンダーの配信経路 | 自社で構築・運用するサーバー |
| 同期対象 | アプリが定義した状態・データ*6 | 画面全体の映像 | 任意のデータ構造 |
| 開発負荷 | Apple提供APIに準拠すれば実装可*6 | OS標準機能を利用する場合が中心 | サーバー・クライアント双方を自前で設計 |
| 適した用途 | アプリ内の特定機能だけを同期したい場合 | 画面全体をそのまま見せたい場合 | FaceTime通話を前提にできない場合 |
要件整理から検証まで——SharePlay実装の5ステップ
Group Activitiesの実装手順は、公式ドキュメントの構成に沿って5段階に整理できます*6*7。段階を把握しておくと、外注する場合の依頼範囲も明確にしやすくなります。
ステップ1は、共同作業機能として何を同期するかの要件整理です。Appleは、動画ファイルそのものではなくURLを共有するなど、動作に必須な最小限のデータだけを持たせる設計を推奨しています*6。
ステップ2は、GroupActivityプロトコルに準拠した構造体の実装です。共有するデータをCodable(構造体をシリアライズ可能にするSwift標準プロトコル)に準拠させ、参加者に表示するタイトルなどのGroupActivityMetadataを用意します*6。
ステップ3は、アクティビティを起動するUIの実装です。GroupStateObserverのisEligibleForGroupSessionプロパティで、アクティブなFaceTime通話があるかどうかを判定します*8。通話中であれば直接起動し、そうでない場合はGroupActivitySharingControllerで招待を促す画面を表示します*7。
ステップ4は、セッションの状態同期です。GroupSessionのjoinedへの遷移を監視し、GroupSessionMessengerでアプリ固有のデータを送受信する処理を組み込みます*3*4。
ステップ5は、複数デバイス・複数プラットフォームでの動作検証です。iOS・iPadOS・macOSなど対応範囲全体で挙動を確認し、通話が切れた場合の挙動(invalidatedへの遷移)も含めて確認します*3。
実装で見落としやすい落とし穴——FaceTime通話前提とプラットフォーム差
SharePlayの実装で最も見落とされやすいのは、FaceTime通話が前提条件になっている点です。共同作業機能を使いたい場面でも、通話が始まっていなければアクティビティを起動できません*8。
この前提を踏まえずに開発を進めると、社内検証環境でしか動作しない、あるいは想定した業務フローで起動できないという事態を招きかねません*7*8。GroupStateObserverでの事前判定とUI分岐を、最初の設計段階から組み込む必要があります*8。
また、AirDropや共有シートでアクティビティを渡す場合は、GroupActivityをTransferable(AirDropや共有シートに渡せるようにするSwiftのプロトコル)にも準拠させることが欠かせません*6。この対応を後回しにすると、UI実装のやり直しが発生しやすくなります。
対応OSのバージョン差にも注意が必要です。Group Activitiesの基本機能はiOS 15・macOS 12以降が対象ですが、visionOS向けの空間機能のような追加機能はより新しいバージョンに依存します*1。利用者の端末バージョンによって使える機能に差が出る前提で仕様を決めなければなりません。
この作業を内製で担うには、Swiftの非同期処理、GroupActivities固有の状態遷移、AirDrop・共有シート連携など複数領域の知識が要ります*3*4*6。
内製と外注の分かれ目——法人向け共同作業機能の工数で判断する
法人向けアプリでSharePlayを使う場面として想定しやすいのは、遠隔サポートでの画面同期、資料や図面の共同レビュー、オンライン研修での教材同期、カスタマーサクセスでの操作画面共有などです。
いずれの用途も、FaceTime通話という前提を業務フローに組み込めるかどうかが検討の出発点になります。社内・取引先の双方がApple製デバイスとFaceTimeを利用できる環境かどうかも、事前に確認しておく必要があります。
専門パートナーに委託する場合は、要件整理からGroupActivity設計、起動UI実装、複数プラットフォームでの検証までを一括して依頼できるかが選定の分かれ目です*6*7。内製では既存の開発担当者が通常業務と並行して対応することになり、検証に割ける時間が限られる場合があります。
。同期したいデータの種類や対応プラットフォームの範囲によって、必要な工数は変わってきます。まずは想定する業務フローを整理したうえで、内製・外注の切り分けを検討することが実務的です。
まとめ:SharePlay共同作業実装で押さえる3つの判断軸
本稿ではAppleのSharePlayとGroup Activitiesフレームワークの仕組み、実装手順、法人アプリでの活用場面を整理しました。要点は3つに集約できます。第一に、SharePlayはFaceTime通話中の体験を、GroupActivity・GroupSession・GroupSessionMessengerという3つの型で同期する仕組みです*1*3*4。第二に、実装は要件整理からGroupActivity定義、起動UI、状態同期、検証までの5段階で進められます*6*7。第三に、FaceTime通話という前提を業務フローに組み込めるかどうかと、対応プラットフォームの範囲によって、内製と外注の判断が変わってきます。
よくある質問
SharePlayを使うにはFaceTime通話が必要ですか。
はい、SharePlayでアクティビティを開始するには、参加者間でアクティブなFaceTime通話が必要です*8。GroupStateObserverのisEligibleForGroupSessionプロパティで、通話中かどうかを事前に判定できます*8。通話が終了すると、セッションはinvalidatedの状態に移ります*3。
SharePlayはどのOS・バージョンから使えますか。
Group Activitiesフレームワークの対応OSは、iOS 15・iPadOS 15・macOS 12・tvOS 15以降です*1。visionOSにも対応しており、対応範囲は複数プラットフォームに広がっています*1。開発前に、想定する利用者の端末バージョンを確認しておくことが大切です。
SharePlayでやり取りするデータの通信は暗号化されていますか。
GroupSessionMessengerが使う通信チャネルはエンドツーエンドで暗号化されており、Appleもアプリのデータ内容を確認できません*1*4。ただし暗号化の仕組みに依存するだけでなく、アプリ側で送受信するデータの範囲を必要最小限に設計することも欠かせません*6。
画面共有機能とSharePlayはどう違いますか。
画面共有は画面全体の映像をそのまま見せる方式であるのに対し、SharePlayはアプリが定義した状態やデータだけを同期する方式です*1*6。同じ画面をそのまま見せたい場合は画面共有が向いており、アプリ内の特定機能だけを同期したい場合はSharePlayが向いています。
実装を外注する場合、何を確認すればよいですか。
同期したい体験の要件整理、GroupActivityの設計方針、対応するプラットフォームの範囲をまず確認します。加えて、FaceTime通話が前提になる制約を、委託先が業務フローに落とし込めるかどうかをすり合わせることが大切です。契約前に検証環境での確認範囲を明確にしておくと、実装後の手戻りを抑えやすくなります。
著者:テレリモ総研編集部 鈴木 亮佑
ご不明な点はお問い合わせフォームからもご連絡いただけます。
- *1 出典:Apple「Group Activities」(Apple Developer Documentation)(https://developer.apple.com/documentation/GroupActivities)
- *2 出典:Apple「Meet Group Activities」(WWDC21セッション)(https://developer.apple.com/videos/play/wwdc2021/10183/)
- *3 出典:Apple「GroupSession」(Apple Developer Documentation)(https://developer.apple.com/documentation/groupactivities/groupsession)
- *4 出典:Apple「GroupSessionMessenger」(Apple Developer Documentation)(https://developer.apple.com/documentation/groupactivities/groupsessionmessenger)
- *5 出典:Apple「com.apple.developer.group-session」(Apple Developer Documentation)(https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.group-session)
- *6 出典:Apple「Defining your app’s SharePlay activities」(Apple Developer Documentation)(https://developer.apple.com/documentation/groupactivities/defining-your-apps-shareplay-activities)
- *7 出典:Apple「Presenting SharePlay activities from your app’s UI」(Apple Developer Documentation)(https://developer.apple.com/documentation/groupactivities/promoting-shareplay-activities-from-your-apps-ui)
- *8 出典:Apple「GroupStateObserver」(Apple Developer Documentation)(https://developer.apple.com/documentation/groupactivities/groupstateobserver)