◉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-05-03上級

Rork × PencilKit で Apple Pencil 対応の手書きノートアプリを作る実装ガイド

PencilKit を使った手書きノートアプリを Rork で本番品質まで仕上げる方法を解説します。Apple Pencil Pro の Squeeze・Barrel Roll・Hover、PKDrawing の保存と CloudKit 同期、Vision での手書き文字認識まで実装パターン付きで掘り下げます。

Rork585PencilKitApple PenciliPad アプリSwiftUI66手書きノート

✦ プレミアム記事

iPad で手書きノートアプリを作ろうとした方なら、一度は PencilKit に触れてみて「思ったより簡単だな」と感じた直後に「保存ってどうやるの? Apple Pencil Pro の Squeeze はどう取るの? クラウド同期はどうする?」で手が止まった経験があるのではないでしょうか。

私自身、3年ほど前から iPad 向けの手書き系アプリを何本か運用していますが、PencilKit は「最低限の動くもの」と「App Store で勝負できるもの」の差が想像以上に大きいフレームワークです。PKCanvasView を 1 行貼るだけでお絵かきはできますが、そこから先で多くの方が挫折します。

ここでは Rork(とくに Rork Max のネイティブ生成)を使って PencilKit ベースの手書きノートアプリを設計するときに、私が実際に踏んできた地雷とその回避策を体系的にまとめます。Apple Pencil Pro の新機能(Squeeze・Barrel Roll・Hover・Haptic)への対応、PKDrawing の永続化、CloudKit を介した端末間同期、そして手書き文字を検索可能にする OCR レイヤーまで、本番投入できるパターンとして整理しています。

なぜ PencilKit を選ぶのか — 自前描画と比べた損得勘定

最初に避けて通れない設計判断があります。手書きアプリの描画レイヤーを「PencilKit」「Metal で自前」「サードパーティ(DrawsanaKit、PSPDFKit など)」のどれにするか、です。

私は迷ったら PencilKit を選びます。理由は次の3つです。

第一に、Apple Pencil Pro の新機能(Squeeze・Barrel Roll・Hover)に追加実装ほぼ無しで対応できます。自前描画でこれを実装すると、UIPencilInteraction と UIHoverGestureRecognizer、PHASE のハプティクス制御をすべて自前で書くことになり、Pro 非対応端末の検出ロジックも組まなければなりません。

第二に、Apple が毎年 PencilKit を磨き続けており、PKToolPicker の見た目や挙動が iOS 純正の「メモ」「フリーボード」と揃います。ユーザーは標準アプリの操作感を期待してくるので、これに沿うこと自体が UX の競争力になります。

第三に、Scribble(手書き文字の自動テキスト変換)や PKDrawing.image() による高速ラスタライズが無料で手に入ります。自前で書くと OCR と PDF 変換の品質を担保するだけで数ヶ月かかります。

逆に PencilKit を避けるべきケースもあります。漫画・イラスト制作のように複雑なレイヤー機能・カスタムブラシエンジンが核になるアプリでは、Metal で自前実装する方が結果的に早いです。本記事の対象は「ノート・議事録・学習・PDF 注釈」といった汎用ノート系アプリなので、PencilKit が最適解になります。

アーキテクチャ全体像 — Rork で組むときの責務分離

Rork で作るときに最初に決めておきたいのが、SwiftUI レイヤーと UIKit レイヤーの責務分離です。PKCanvasView は UIKit ベースなので、UIViewRepresentable で SwiftUI に橋渡しする必要があります。

私が現在使っている構成は、ざっくり以下の4層です。

  • View 層(SwiftUI): ノート一覧、ツールバー、ページサムネイル
  • Canvas 層(UIViewRepresentable): PKCanvasView と PKToolPicker の橋渡し
  • Document 層(@Observable): PKDrawing と Page の状態管理、そして Undo/Redo の集約先
  • Persistence 層: ローカル(FileManager)と CloudKit を抽象化したリポジトリ

Rork Max にプロンプトを投げるときも、この4層を明示してあげると生成コードがブレません。「PKCanvasView を SwiftUI で扱える CanvasRepresentable を作って、PKDrawing を @Bindable の Document に流し込んでください」という指定の仕方をすると、後段の同期実装まで一貫性が保てます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦PencilKit を導入してすぐ「線がカクつく」「ツールパレットが意図通り出ない」で詰まっていた人が、Apple Pencil Pro の Squeeze・Hover まで使える本番品質の実装を今日手に入れられる
✦PKDrawing の保存・差分同期・iCloud 経由の端末間同期を、CloudKit + CKAsset の現実的な構成で動かせるコードを習得できる
✦手書きノートアプリで安定した収益を上げるための、Apple Pencil 対応・サブスク導線・OCR 検索という3点セットを自分のアプリに移植できる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-04-23
Rork アプリに Siri と Shortcuts を統合する — App Intents の Expo 実装と失敗しない設計
Rork で作った React Native アプリに Siri Shortcuts と App Intents を組み込む実装ガイド。Expo Config Plugin で native モジュールをブリッジし、AppShortcut・Entity Query・Donations・Control Center ウィジェットまで本番運用を見据えて解説します。
⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。
⬡ 開発ツール2026-10-13
リリース前に、書き出した Expo バンドルの中から自分の鍵を探してみる
ソースに鍵がなくても、出来上がったアプリの中に鍵が残ることがあります。Expo SDK 57 で実際に expo export を実行し、バンドルの中身を grep と 60 行ほどの Node スクリプトで調べて、見つかる鍵と見つからない鍵の違いを確かめました。