FOR IT

IT管理者の方へ:スマートポインターのしくみ(1ページ資料)

スマホとPCを直接つなぐプレゼンリモコン。スマホとPCの接続にWi-Fi・サーバー・アカウント不要、拡張機能の権限は"storage"だけで、動くのはGoogleスライド™のページだけ。

版:2026-09-25(開発中の仕様にもとづく資料です。確認したアプリと拡張機能のバージョンは公開時に記載します) 問い合わせ:お問い合わせフォーム

1. 構成

データの流れ

iPhoneアプリペリフェラル。モーションセンサーでポインター位置を計算
Bluetooth Low Energy
iPhone→PCの一方向(通知)
PCのChrome拡張機能セントラル。接続ウィンドウで受信
ページ内で処理
ポインター表示/進む・戻る
Googleスライドのタブコンテンツスクリプトは docs.google.com/presentation/* だけ
  • 当方のサーバーなし
  • アカウント登録なし
  • アプリと拡張機能のコードはネットワーク接続を開きません
  • 機器は利用者が毎回Chromeの選択画面で選択
図:構成とデータの流れ。通信はiPhoneとPCの間のBluetoothだけです。データの内容は第2章、権限は第4章をご覧ください。
  • 当方のサーバーはありません。アカウント登録もありません。
  • iPhoneが周辺機器(ペリフェラル)、PCのChromeが接続する側(セントラル)です。接続にはChromeのWeb Bluetooth API を使い、利用者が毎回Chromeの選択画面で機器を選びます。

2. Bluetoothで流れるデータ

iPhone → PC(通知):1メッセージ20バイト以下

種類内容頻度
POINTER画面に対する相対座標 x・y(0〜65535)、表示/非表示フラグ、ポインターの大きさ、iPhone側の送信時刻(ミリ秒、65,536ミリ秒で一巡)、連番パッドを押している間、最大60回/秒
COMMAND次へ/前へ(先頭・最後・黒画面・白画面・スライド指定は将来用に予約、v1.0では未使用)操作のたび
HEARTBEAT電池残量(%)、本体の温度状態(4段階)、アプリが前面か、パッド押下中か1秒ごと

接続時に1回、PCが読み取る情報(INFO、iPhone→PC):200バイト以下のJSON。例:{"proto":1,"minor":1,"app":"1.0.0","platform":"ios","code":"SP-1A2B","caps":["rel","cmd.nav"]}

  • 流れないもの:スライドの内容、画面の映像、音声、カメラ映像、連絡先、位置情報、Apple ID、利用者の氏名。
  • PC→iPhoneのアプリケーションデータはありません。 PCが送るのは、通知の購読とINFOの読み取り要求だけです。
  • 接続待ちの間:iPhoneは、サービスUUID と表示用コード(SP- +ランダムな16進4桁、初回起動時に生成)を広告(アドバタイズ)します。PCから見つけられるのは、アプリが前面にあるときだけです(バックグラウンドでは、iOSが表示用コードを広告から外し、サービスUUIDもPCからは見えない「オーバーフロー領域」に移します)。
  • Chromeの選択画面:iPhone本体の名前(利用者が設定したもの)が表示されることがあります。これはiOSが公開するもので、アプリは送っていません。

3. ネットワーク通信

  • アプリと拡張機能のコードは、ネットワーク接続を一切開きません。 fetch、XMLHttpRequest、WebSocket、URLSession、アクセス解析SDK、クラッシュ収集SDK、サードパーティSDKは含みません。
  • 例外(利用者の操作によるもの):ヘルプ、ポリシー、ご意見フォーム、「登壇で使いました」フォームへのリンクは、利用者がクリック/タップしたときにブラウザで開きます。レビュー依頼はAppleの標準機能(StoreKitのレビュー依頼)です。アンインストール時にページを開く設定(setUninstallURL)は使いません。
  • OSとブラウザ自身の通信:Chrome ウェブストアとApp Storeによる更新確認、Googleスライド自体の通信は、通常どおり行われます。Googleスライドはインターネット接続が必要です(オフラインアクセス設定時を除く)。

4. 権限

Chrome拡張機能(Manifest V3)

求めるもの

  • storage
  • サイトへのアクセス:docs.google.com/presentation/* だけ

求めないもの

  • host_permissions
  • tabs
  • scripting
  • debugger
  • webRequest
  • <all_urls>
  • その他のサイト

拡張機能が求める権限は storage だけで、動くのはGoogleスライドのページだけです。

iPhoneアプリ

求めるもの

  • Bluetooth
  • モーションセンサー(iOSでは許可不要)
  • bluetooth-peripheral

求めないもの

  • カメラ
  • マイク
  • 位置情報
  • 連絡先
  • 写真
  • ローカルネットワーク
  • 通知

Bluetoothは接続ごとに利用者が選ぶ

Web Bluetoothは、利用者がChromeの選択画面で機器を選んだときだけ接続します。OSのペアリングは行いません。iPhoneは最初に接続したPC1台にだけ送信し、2台目の接続には警告を出します。

対象求めるもの求めないもの
iPhoneアプリBluetooth(NSBluetoothAlwaysUsageDescription)。モーションセンサー(iOSでは許可不要)。バックグラウンドモード bluetooth-peripheral(短いアプリ切替の間、接続を保つため。バックグラウンドではポインターを送りません)カメラ、マイク、位置情報、連絡先、写真、ローカルネットワーク、通知
Chrome拡張機能(Manifest V3)permissions: storage だけ。コンテンツスクリプトは https://docs.google.com/presentation/* だけで動作host_permissions、tabs、scripting、debugger、webRequest、<all_urls>、その他のサイトへのアクセス
  • インストール時の表示:コンテンツスクリプトがGoogleスライドで動くため、Chromeは「docs.google.com 上のデータの読み取りと変更」といった趣旨の確認を表示します。拡張機能がそこで行うのは、スライドショーの判定、スライド番号の読み取り、ポインターの描画、矢印キーのイベント送出だけです。スライドの本文や画像は読み取りません。
  • App Storeのプライバシー表示:「データの収集なし」。プライバシーマニフェストでは UserDefaults(理由コード CA92.1)だけを申告。輸出規制:ITSAppUsesNonExemptEncryption = NO。
  • ストア版の範囲:自己テスト機能や動作記録機能は社内ビルドだけにあり、App Store版・Chrome ウェブストア版には含みません。設定画面の「詳細設定」は通常の設定項目です。

5. 端末に保存されるデータ

場所内容消えるとき
iPhone(UserDefaults)設定、表示用コード、接続成功回数アプリの削除
PCのChrome(chrome.storage.local)設定、接続ログ(時刻、受信数、遅延統計、電池・温度、操作履歴。スライドの内容は含まない)ログは24時間。拡張機能の削除で全部

6. 無線区間についての事実と制限

  • 通信は暗号化されていません。OSのペアリング(ボンディング)も行いません。ペアリングの確認画面を出さないための設計です。
  • 近くの第三者が受信できるのは第2章の内容です。スライドの内容は含みません。
  • v1.0 には接続相手の認証がありません。なりすまし機器が同じ名前を名乗った場合、利用者がそれを選ぶと、スライド送りやポインター表示を操作される可能性があります。対策は、利用者がアプリに表示された自分のコードを選ぶことです。iPhoneは最初に接続したPC1台にだけ送信し、2台目の接続には警告を出します。
  • 将来、QRコードで共有する鍵によるメッセージ認証を、今の方式と互換のまま追加できるよう、形式を予約しています(提供時期は未定)。

7. 組織のポリシーとの関係(Chrome)

ポリシー影響対応
DefaultWebBluetoothGuardSetting = 2(ブロック)Web Bluetoothが全面的に使えず、スマートポインターは接続できません3(確認して許可)または未設定が必要です。Web Bluetooth には、特定のサイトや拡張機能だけを許可するポリシーがありません(2026-09-25時点、Chromiumのポリシー定義で確認)
ExtensionInstallBlocklist = *拡張機能を入れられませんExtensionInstallAllowlist に拡張機能のIDを追加(IDは公開時に掲載します)
ExtensionInstallForcelist配布したい場合に使えます値:拡張機能のID;https://clients2.google.com/service/update2/crx(IDは公開時に掲載します)
ExtensionSettings上記と同じ設定が可能。runtime_blocked_hosts に docs.google.com を含めると動作しません。blocked_permissions に storage を含めると動作しません必要に応じて除外
ExtensionAllowedTypes種類を制限している場合extension を含める
  • Microsoft Edge:Chrome ウェブストアからインストールできますが、動作確認はしていません。Edgeにも同名のポリシーがあると考えられますが、未確認です。
  • OS・MDM:PCのBluetoothが無効化されている場合や、MDMで会社支給iPhoneのApp StoreやBluetoothが制限されている場合は使えません。
  • v1.0 には、管理者が設定を事前配布する機能(chrome.storage.managed)はありません。

8. 既知の制限

  • 対象はPCのChromeで開いたGoogleスライドだけです(PowerPoint、Keynote、Safari、Firefoxは非対応)。
  • PC:macOS、Windows 10(1703以降)・11 のChrome。Windowsは、3台のWindowsノートPCで動作報告がそろうまで「ベータ」です。LinuxのChromeはWeb Bluetoothが実験的機能のため非対応です。PCにBluetooth LEが必要です(デスクトップPCはUSBアダプターが必要な場合があります)。
  • iPhone:iOS 17以降。アプリが前面にないとPCから見つかりません。
  • 切断されると拡張機能は約15秒間、自動で再接続を試みます。それより長い中断のあとは、選択画面で選び直しが必要です(iOSのアドレス変更とChromeの仕様のため)。
  • 遅延は、PCのOSが決める接続間隔に左右されます。
  • Googleスライドの公開されていない動作に依存しています。Googleの変更で操作が効かなくなった場合も、ポインターは使い続けられる設計で、修正はストアの更新で配布します。
  • 一度に接続できるのは、iPhone 1台とPC 1台です。
  • 接続ウィンドウは発表中も開いたままにする必要があります(最小化は可)。

9. ご自身で確認する方法

  • 拡張機能:chrome://extensions の「詳細」で権限とサイトへのアクセスを確認できます。コードはビルドなしのJavaScriptなので、インストールされたフォルダでそのまま読めます。接続ウィンドウでデベロッパーツールの「ネットワーク」を開くと、通信が発生しないことを確認できます。
  • iPhoneアプリ:App Storeのプライバシー表示と、iPhoneの「設定」>「プライバシーとセキュリティ」>「Appプライバシーレポート」(オンにした後の、アプリごとのネットワーク通信先を表示)で確認できます。

関連資料:プライバシーポリシー/利用規約/確認済み環境/チームでのご利用