◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/アプリ開発
◇ アプリ開発/2026-07-03中級

Rork Max アプリに PDF の表示と書き出しを組み込む — PDFKit と ImageRenderer の使い分け

Rork Max のネイティブ Swift で PDFKit を使い、PDF の表示・検索・書き出しを実装します。UIGraphicsPDFRenderer と ImageRenderer の使い分け、パスワード保護、共有シート連携までの実装手順です。

rork-max41pdfkitswift8imagerendererpdf-export

✦ プレミアム記事

メモ機能のあるアプリを運用していると、ある時期から同じ要望が繰り返し届くようになりました。「書いた内容を PDF で送りたい」。私自身、最初は共有シートにテキストを流すだけで十分だと考えていたのですが、仕事の記録として使ってくださっている方にとって、体裁の整った PDF はテキストの代わりにならない「成果物」なのだと気づかされました。

Rork Max はネイティブ Swift を生成するため、OS に同梱されている PDFKit をそのまま使えます。表示・検索・書き出しまで依存ライブラリの追加なしで完結する、という点が React Native 構成との最も大きな違いです。以下、PDF の表示から書き出し、パスワード保護、共有シート連携までを、動くコードで順に組み上げていきます。

なぜ Rork Max(ネイティブ Swift)で PDF を扱うのか

React Native 版の Rork で PDF を扱う場合、選択肢はサードパーティ製ライブラリか WebView 表示、生成側は expo-print のような HTML 経由のブリッジになります。動くことは動くのですが、依存の保守と表現の細かい制御に限界がありました。

手段表示検索・注釈生成依存追加
WebView 表示(RN)△ 簡易表示のみ✕✕不要
react-native-pdf 等(RN)◯△ ライブラリ次第✕必要
expo-print(RN)✕✕△ HTML 経由必要
PDFKit(Rork Max / ネイティブ)◯◯◯ UIGraphicsPDFRenderer 併用不要(OS 同梱)

個人開発では「依存を増やさないこと」自体が保守コストの削減です。PDF まわりを OS 標準の枠組みに寄せられるのは、ネイティブ生成を選ぶ実利のひとつだと考えています。

Rork Max へのプロンプトは、次のような一文から始めるのが実用的でした。

保存済みのメモを PDF として表示・書き出しできる画面を追加してください。
表示は PDFKit の PDFView、書き出しは UIGraphicsPDFRenderer を使い、
共有シートから送れるようにしてください。

生成されたコードを前提に、以下では各部品の要点と、手を入れるべき箇所を順に見ていきます。

PDFView で表示する — SwiftUI に載せる最小構成

PDFKit の中心は PDFView です。UIKit のビューなので、SwiftUI からは UIViewRepresentable で包みます。

import SwiftUI
import PDFKit
 
struct PDFViewer: UIViewRepresentable {
    let url: URL
 
    func makeUIView(context: Context) -> PDFView {
        let view = PDFView()
        view.autoScales = true                 // 画面幅に合わせて自動スケール
        view.displayMode = .singlePageContinuous
        view.usePageViewController(true)       // ページ単位のスワイプ感
        view.document = PDFDocument(url: url)
        return view
    }
 
    func updateUIView(_ uiView: PDFView, context: Context) {
        if uiView.document?.documentURL != url {
            uiView.document = PDFDocument(url: url)
        }
    }
}

最初のつまずきどころは autoScales です。指定を忘れると PDF が原寸で描画され、画面の隅に豆粒のような表示になります。生成コードに含まれていないことがあるため、表示が小さい場合はまずここを確認してください。

PDFDocument(url:) はページを遅延読み込みするため、数百ページの PDF でも初期表示は軽快です。一方で Data に全読みしてから PDFDocument(data:) に渡す実装は、大きなファイルでメモリを一気に消費します。ローカルファイルなら URL 初期化を使うことをお勧めします。

✦

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

この記事の続きを読む

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

この記事で得られること
✦PDFView を SwiftUI に載せる最小構成と、autoScales など初期設定でつまずかない勘所
✦UIGraphicsPDFRenderer と ImageRenderer の使い分け基準(ページ分割・解像度・実装コスト)
✦パスワード付き書き出しから共有シート連携まで、本番で踏んだ落とし穴と対処
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◇ アプリ開発2026-10-15
購読が切れても広告が戻りませんでした。「いま ad-free でなければ false」と書いていた、判定の向きを直した記録
購読が失効しても広告非表示のままになる不具合の原因は、判定の向きの逆転でした。二系統の購入確認を待って合成し、失敗した回は前回を保つ部品を、手元で動かして確かめた記録です。
◇ アプリ開発2026-10-15
adjustsFontSizeToFit で特定の1行だけ極小になるとき、疑うのは文字列ではなく枠の高さです
一覧の10行目だけ文字が4ptまで縮む。データも文字列も正常なのに起きる iOS の症状を、Yoga の丸めと縮小判定のソースで確かめ、Node で再現率を数えた記録です。
◇ アプリ開発2026-10-15
EAS Build だけ「No matching variant」で落ちるとき、まず疑う手元の android/build
手元の Gradle は通るのに、EAS Build の Android だけが「No matching variant of project」で止まる。GitHub の報告を読み比べ、Windows で生成した autolinking のキャッシュが Linux のビルド機へ渡っていた経路と、ビルドを投げる前に確かめる診断スクリプトをまとめました。