File Provider Extension: iOSファイルプロバイダーの概要と動作方法

著者: IT Sectr 公開日: 2026-06-15 読了時間: 9 分

File Provider Extensionは、クラウドサービスやアプリがシステムのFilesアプリにファイルを表示できるようにするiOSのメカニズムです。ユーザーは外部のドキュメントをローカルのドキュメントと一緒に統一されたインターフェースで表示し、追加のソフトウェアをインストールすることなく開いたり、移動したり、編集したりできます。Apple Developer Documentation(2025)によると、NSFileProviderManagerは増分同期を提供し、デバイス上の独自のキャッシュを通じてファイルバージョンを管理します。

重要ポイント

  • File Provider Extensionは、iOSのFilesアプリにクラウドストレージとファイルサービスを統合します
  • アーキテクチャは、データ同期のためにNSFileProviderExtensionプロトコルとNSFileProviderManagerに基づいています
  • 拡張機能は増分同期をサポートしています — ファイル全体ではなく、変更されたブロックのみが転送されます
  • 各ファイルは、メタデータ(サイズ、変更日、コンテンツタイプ、アクセス権限)を持つNSFileProviderItemオブジェクトで表現されます
  • ドメイン(NSFileProviderDomain)を使用すると、1つの拡張機能内で異なるアカウントを分離できます

iOSのFile Provider Extensionとは

File Provider Extensionは、Filesアプリに新しいドキュメントソースを追加するアプリ拡張機能です。クラウドサービス(Google Drive、Dropbox、OneDrive、または企業ストレージ)は、別のアプリを開くことなく、システムインターフェースに直接ファイル構造を表示できます。

ユーザーはリモートファイルをデバイスに保存されたファイルと同じように操作できます:フォルダの内容を参照し、ドキュメントをドラッグ&ドロップし、互換性のあるアプリで開き、変更をクラウドに保存できます。WWDC 2025によると、File Provider Extensionは最大1000の同時同期操作をサポートし、動的優先度管理を通じてネットワーク速度に適応します。

拡張機能はバックグラウンドで動作します — iOSは同期が必要なときに起動し、リソースが不足しているときに強制終了することがあります。すべての操作はべき等であり、チェックポイントからの再開をサポートする必要があります。

アーキテクチャとファイル同期メカニズム

File Provider Extensionは3層アーキテクチャを持っています:Files.appシステムプロセス、プロバイダー拡張機能、およびリモートサーバーです。システムは拡張機能にデータを要求し、拡張機能はリクエストをクラウドサービスAPIコールに変換し、NSFileProviderItemを介して結果を返します。

増分同期

毎回の更新で完全なファイル構造をロードする代わりに、拡張機能は変更されたアイテムのみを転送します。NSFileProviderManagerは増分更新を送信するメソッドを提供します — “ファイルAが追加されました”、“ファイルBが変更されました”、“フォルダCが削除されました”。これによりトラフィックが大幅に削減され、変更の表示が高速化されます。

Apple Engineeringによると、増分同期は完全な再読み込みと比較してデータ転送量を60–80%削減します。同期状態をマークし、重複リクエストを最小限に抑えるためにNSFileProviderSyncAnchorを使用することをお勧めします。

デバイス上のキャッシュ

File Provider Extensionは、オフラインアクセスのためにファイルをローカルにキャッシュできます。ファイルが開かれると、システムは拡張機能にリクエストを行い、拡張機能はサーバーからコンテンツをダウンロードするか、既にキャッシュされたバージョンを返すかを決定します。NSFileProviderItemは、isDownloadedおよびisUploadedフィールドを通じてキャッシュレベルを示します。

Appleはファイルサイズに基づいてキャッシュポリシーを設定することを推奨しています:画像やドキュメントの場合は完全キャッシュ、動画の場合はプレビューのみ、アーカイブの場合はユーザーリクエストに応じて。

NSFileProviderManager:ファイルプロバイダーの管理

NSFileProviderManagerは、拡張機能がシステムと対話するための中央クラスです。変更をシステムに通知したり、新しいアイテムを作成したり、ダウンロードを管理したり、エラーを処理したりするメソッドを提供します。各NSFileProviderManagerインスタンスは特定のドメインに結び付けられています。

主要メソッド

signalEnumerator(for:) — フォルダの内容が変更され、再読み取りが必要であることをシステムに通知します。reimportItem(_:) — サーバー側の変更後に指定されたアイテムを再インポートします。registerURLSessionTask:forItemWithIdentifier: — バックグラウンドダウンロードを特定のファイルに関連付けて進捗を追跡します。

重要な制限:NSFileProviderManagerは拡張機能プロセス内でのみ機能します。メインアプリはファイル構造を管理するためにそのメソッドを直接呼び出すことはできません — 同期は拡張機能またはシステムによって開始される必要があります。

swift
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
    if let error = error {
        print("Signal failed: \(error)")
    }
}

ダウンロード管理

バックグラウンドでのファイルダウンロードのために、NSFileProviderManagerはバックグラウンド設定のURLSessionを使用します。拡張機能はダウンロードタスクを作成し、それをマネージャーに登録すると、マネージャーは対応するアイテムに関連付けます。システムはユーザーのアクティビティに基づいてダウンロードの進捗と優先度を自動的に追跡します。

File Provider Extensionの実装

File Provider Extensionの作成は、XcodeでFile Provider Extensionテンプレートを使用して新しいターゲットを追加することから始まります。Xcodeは自動的にNSFileProviderExtensionを継承するクラスと、アイテムを操作するための最小限のメソッドセットを生成します。

NSFileProviderItemとメタデータ

ファイル構造内の各アイテム(ファイルまたはフォルダ)はNSFileProviderItemプロトコルを実装します。このプロトコルは必須フィールド(itemIdentifier、parentItemIdentifier、filename、typeIdentifier、capabilities)を定義します。さらに、サイズ、変更日、ダウンロードフラグを指定できます。

swift
struct CloudItem: NSFileProviderItem {
    let itemIdentifier: NSFileProviderItemIdentifier
    let parentItemIdentifier: NSFileProviderItemIdentifier
    let filename: String
    let typeIdentifier: String
    let capabilities: NSFileProviderItemCapabilities
    let documentSize: NSNumber?
}

列挙リクエストの処理

enumerator(for:)メソッドは、NSFileProviderEnumeratorを実装するオブジェクトを返し、システムのリクエストに応じてフォルダの内容を提供します。iOSはルートフォルダ、サブフォルダ、およびワーキングセットの列挙をリクエストすることがあります — 後者は最近のファイルやお気に入りのファイルを表示するために使用されます。

Appleは、一度に数千のアイテムをロードしないように、NSFileProviderPageを使用したページネーション付きの非同期列挙メソッドを使用することを推奨しています。50–100アイテムのページがパフォーマンスに最適です。

ドメインとマルチアカウントアーキテクチャ

NSFileProviderDomainは、1つの拡張機能内で異なるアカウントを分離するメカニズムです。ユーザーがアプリで複数のアカウント(個人用と企業用のGoogle Drive)を承認した場合、各アカウントが個別のドメインを作成し、Filesアプリで個別のソースとして表示されます。

各ドメインには一意の識別子、表示名、および状態があります。ユーザーは他のアカウントに影響を与えることなく、ドメインを一時的に無効にしたり削除したりできます。システムはアクティブなドメインごとに個別の拡張機能プロセスを起動し、アカウント間のデータ分離を保証します。

Appleによると、拡張機能あたり10を超えるドメインを作成しないことを推奨しています — 過剰な数はFilesアプリの起動を遅くし、メモリ消費を増加させます。多数のアカウントを持つサービスの場合は、拡張機能内でプロファイルを切り替える単一のドメインに集約するのが適切です。

swift
let domain = NSFileProviderDomain(
    identifier: "work",
    displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
    if let error = error {
        print("Failed to add domain: \(error)")
    }
}

よくある質問

File Provider Extensionをサポートしているクラウドサービスは?

どのサービスでも独自の拡張機能を実装できます。サポートしているサービスには、Google Drive、Dropbox、Microsoft OneDrive、Box、iCloud Drive、Nextcloudが含まれます。この拡張機能は任意のRESTまたはWebDAVストレージで使用できます。

拡張機能はどのようにサーバーと変更を同期しますか?

拡張機能はローカルファイルの変更に関する通知をシステムから受け取り、NSFileProviderManagerを介してサーバーに送信します。サーバーからの逆方向同期には、NSFileProviderSyncAnchor(最後の更新のマーカー)が使用されます。

拡張機能はオフラインでも動作しますか?

はい、ファイルがローカルにキャッシュされていれば可能です。NSFileProviderItemはダウンロードされたファイルをisDownloadedフラグでマークします。オフラインモードで行われた変更は、接続が復元されると自動的に同期されます。

ファイルサイズの制限はありますか?

直接的な制限はありません — サイズはサーバーの容量によって決まります。Appleは100 MBまでのファイルを自動的にキャッシュし、より大きなファイルにはプログレスバー付きのストリーミングダウンロードを使用することを推奨しています。

NSFileProviderExtensionとUIDocumentPickerViewControllerの違いは?

UIDocumentPickerViewControllerはモーダルウィンドウを通じて1回限りのファイル選択を提供します。File Provider Extensionは、バックグラウンド同期と長期的なアクセスを備えた永続的なドキュメントソースをFilesアプリに組み込みます。

まとめ

  • File Provider Extensionは外部ファイルサービスをFilesアプリに統合し、リモートドキュメントを統一インターフェースでアクセス可能にします
  • アーキテクチャはNSFileProviderExtensionとNSFileProviderManagerを使用してサーバーとの増分データ同期を実現します
  • NSFileProviderItemは、完全なメタデータと機能を備えた個々のファイルまたはフォルダを表します
  • ドメイン(NSFileProviderDomain)は、アカウント間のデータ分離を備えたマルチアカウントアーキテクチャを提供します
  • デバイス上のキャッシュにより、接続復旧後に自動同期されるオフラインファイル操作が可能です
  • 増分同期は、完全なファイル構造の再読み込みと比較してトラフィックを60–80%削減します

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください