UIDocumentInteractionController — Open Inとドキュメント

著者: IT Sectr 公開日: 2026-07-11 読了時間: 6 分

UIDocumentInteractionControllerは、ドキュメントのプレビューやアプリ間でのファイル共有を行うためのiOSコントローラーです。Open In機能を実装しており、ユーザーは互換性のある任意のアプリでファイルを開いたり、メールで送信したり、クラウドストレージに保存したりできます。Apple Developer Documentation(2025)によると、このコントローラーはPDF、画像、オフィスドキュメントを表示するための組み込みPreviewもサポートしています。

重要なポイント

  • UIDocumentInteractionController — 他のアプリにドキュメントを表示・送信するためのiOSコントローラー。
  • Preview — アプリを切り替えずにPDF、画像、オフィスドキュメントを表示する組み込みビューア。
  • Open In — 編集や表示のためにファイルを別のアプリに転送する機能。
  • UIDocumentInteractionControllerDelegateはアニメーション、メニューの位置、操作の完了を管理します。
  • UIDocumentPickerViewControllerとは異なり、このAPIはファイルを選択するのではなく、既存のファイルを転送します。

UIDocumentInteractionControllerとは?

UIDocumentInteractionControllerは、ドキュメントを扱うためのシステムインターフェースを提供するUIKitクラスです。ファイルを選択するUIDocumentPickerViewControllerとは異なり、このコントローラーはアプリの既存のファイルを操作し、プレビュー、他のアプリで開く、印刷、送信といったアクションをユーザーに提供します。

このコントローラーはViewControllerではありません — presentを使って呼び出すことはできません。代わりに、presentOptionsMenuまたはpresentPreviewメソッドを通じてシステムアクションメニューを表示します。メニューには、指定されたファイルタイプを処理するよう登録されたすべてのアプリが表示されます。

UIDocumentInteractionControllerはiOS 2.0から利用可能で、ドキュメントを扱うための最古のAPIの1つです。古さにもかかわらず、サードパーティライブラリなしでOpen In機能と組み込みプレビューを実装するために今でも重要です。

Previewモード:組み込みドキュメントビューア

Previewは、UIDocumentInteractionControllerが提供する組み込みドキュメントビューアです。PDF、画像、テキストファイル、オフィスドキュメント(.doc、.xls、.pptを含む)をサポートしています。Previewは標準のQuick Lookと同様のトランジションアニメーションで表示されます。

Previewを起動するには、presentPreviewメソッドを呼び出します。コントローラーには、ドキュメントを表示するためのUIViewControllerを返すpreviewControllerForDocumentInteractionControllerメソッドを実装するデリゲートが必要です。通常はselfまたはナビゲーションコントローラーを返します。

組み込みPreviewは追加のフレームワークやライセンスを必要としませんurlプロパティにURLが渡された任意のファイルで動作します。ユーザーはPDFページをスクロールしたり、画像を拡大したり、ドキュメントからテキストをコピーしたりできます。

Open Inモード:アプリ間のファイル転送

Open InはUIDocumentInteractionControllerの主要機能です。指定されたファイルタイプを開くことができるアプリのリストを表示します。ユーザーがターゲットアプリを選択すると、iOSはファイルをそのサンドボックスにコピーし、アプリを起動してドキュメントを扱います。

アプリリストは、他のアプリのInfo.plistに登録されたDocument Typeエントリに基づいて自動的に生成されます。アプリがPDFサポートを登録している場合、PDFファイルのOpen Inメニューに表示されます。システムは標準アクション(印刷、メール送信、ファイルに保存)も表示します。

Open Inはファイルをコピーします — ターゲットアプリは独自のコピーを受け取るため、変更は元のアプリに保存されません。保存を伴う編集が必要な場合は、セキュリティスコープ付きURLを使用してエクスポートモードでUIDocumentPickerViewControllerを使用してください。

代替としてのUIActivityViewController

iOS 6以降、UIActivityViewControllerが利用可能になり、ファイル共有もサポートしています。UIDocumentInteractionControllerとは異なり、UIActivityViewControllerはAirDrop、メール、メッセージ、カスタムUIActivityをサポートするシステムアクティビティシートを表示します。単純なファイル共有には、より近代的なAPIとしてUIActivityViewControllerが推奨されます。

コード例:SwiftでのOpen In

UIDocumentInteractionControllerを介したOpen Inの実装は、インスタンスを作成し、URLとデリゲートを設定し、presentOptionsMenuを呼び出すだけの数行のコードで済みます。コントローラーはファイルタイプに基づいて利用可能なアプリのリストを自動的に収集します。

swift
class DocumentViewController: UIViewController {

    lazy var interactionController = UIDocumentInteractionController()

    func shareFile(url: URL) {
        interactionController.url = url
        interactionController.uti = url.utiType()
        interactionController.delegate = self
        interactionController.presentOptionsMenu(
            from: self.view.bounds,
            in: self.view,
            animated: true
        )
    }
}

メニューの代わりにPreviewを起動

Open Inメニューの代わりに組み込みビューアを表示するには、presentPreviewメソッドを使用します。コントローラーはスクロール可能な全画面でドキュメントを表示します。デリゲートはpreviewControllerForDocumentInteractionControllerメソッドを実装し、表示用のUIViewControllerを返す必要があります。

UIDocumentInteractionControllerDelegateとライフサイクル

UIDocumentInteractionControllerDelegateは、メニューとPreviewの表示と非表示を管理します。デリゲートはオプショナルメソッドを実装します:表示アニメーション用のdocumentInteractionControllerWillPresentOpenInMenu、メニュー非表示後のリソースクリーンアップ用のdocumentInteractionControllerDidDismissOpenInMenu

Previewの重要なメソッドはpreviewControllerForDocumentInteractionControllerで、ドキュメント表示用のUIViewControllerを返す必要があります。メソッドが実装されていないかnilを返す場合、Previewは起動しません。通常はselfまたはselfを含むUINavigationControllerを返します。

コントローラーはdocumentInteractionController:didEndSendingToApplicationメソッドもサポートしており、ファイルが別のアプリに正常に送信された後に呼び出されます。これにより、一時ファイルのクリーンアップやアプリに戻った後のインターフェース更新が可能になります。

UIDocumentPickerViewControllerとの違い

UIDocumentInteractionControllerUIDocumentPickerViewControllerは、どちらもドキュメントを扱いますが、異なるタスクを解決します。主な違い:UIDocumentInteractionControllerは既存のファイルを別のアプリに転送するのに対し、UIDocumentPickerViewControllerは現在のアプリ用に外部ソースからファイルを選択します。

パラメータUIDocumentInteractionControllerUIDocumentPickerViewController
目的別のアプリにファイルを送信別のソースからファイルを選択
ソースアプリ自身のファイル任意のストレージ(iCloud、ファイル、サードパーティ)
モード受信者へのファイルのコピー現在のアプリ用のインポートまたはエクスポート
インターフェースシステムメニュー(Action Sheet)完全なファイルブラウザ
戻り値結果を返さないデリゲート経由で選択したファイルのURL

UIDocumentInteractionControllerは基本的な操作にデリゲートを必要としません — メソッドを実装しなくてもメニューは表示されます。デリゲートなしのUIDocumentPickerViewControllerは役に立ちません — 選択結果が処理されません。APIの選択はシナリオに依存します:ファイル送信 → UIDocumentInteractionController、ファイル受信 → UIDocumentPickerViewController。

よくある質問

iOSのUIDocumentInteractionControllerとは?

UIDocumentInteractionControllerは、Open In機能と組み込みPreviewを通じてドキュメントのプレビューとアプリ間のファイル転送を行うUIKitコントローラーです。

UIDocumentInteractionControllerを使って別のアプリでファイルを開くには?

インスタンスを作成し、ターゲットファイルにurlプロパティを設定し、デリゲートを指定してpresentOptionsMenuを呼び出します。システムは指定されたファイルタイプをサポートするアプリのリストを表示します。

PreviewとQuick Lookの違いは?

UIDocumentInteractionController Previewは、基本的な機能を持つ単一ドキュメント用の組み込みビューアです。Quick Look(QLPreviewController)は、バッチ表示、拡張機能、追加のファイル形式をサポートする独立したフレームワークです。

UIDocumentInteractionControllerにデリゲートは必要ですか?

デリゲートは基本的な操作にはオプショナルです — メニューはデリゲートなしでも表示されます。デリゲートはPreview(previewControllerForDocumentInteractionControllerメソッド)とファイル送信の完了追跡にのみ必須です。

UIDocumentInteractionControllerとUIDocumentPickerViewControllerの違いは?

UIDocumentInteractionControllerはアプリから別のアプリに既存のファイルを送信します。UIDocumentPickerViewControllerは外部ソースから現在のアプリにファイルを選択します。前者は送信用、後者は受信用です。

まとめ

  • UIDocumentInteractionController — iOS 2.0から利用可能な、アプリ間でファイルを表示・送信するためのiOSコントローラー。
  • PreviewはサードパーティライブラリなしでPDF、画像、オフィスドキュメント用の組み込みビューアを提供します。
  • Open Inは選択したアプリのサンドボックスにファイルをコピーします — 変更は元のアプリに戻りません。
  • UIDocumentInteractionControllerDelegateはデリゲートメソッドを通じてアニメーション、メニュー位置、送信完了を管理します。
  • presentOptionsMenuは指定されたファイルタイプで利用可能なアプリを含むシステムメニューを表示します。
  • UIActivityViewControllerはiOS 6以降のファイル共有のためのより近代的な代替手段です。
  • UIDocumentPickerViewControllerとの主な違い:前者はアプリからファイルを送信し、後者はアプリにファイルを選択します。

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

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

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

こちらもお読みください