◉RORK LABEN
●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主
記事一覧/開発ツール
⬡ 開発ツール/2026-06-27上級

無料プレビューがスクショで丸ごと持ち出される前に — Rork/Expo でスクリーンショットと画面収録を検知して目隠しする設計

Rork/Expo アプリで有料プレビュー画像をスクリーンショットと画面収録から守る実装。expo-screen-capture の限界、isCaptured のネイティブ監視、iOS/Android の差を踏まえた目隠し設計を解説します。

Rork577Expo213React Native238セキュリティ13個人開発215

✦ プレミアム記事

無料プレビューとして1枚だけ見せたかった有料の壁紙が、スクリーンショットで原寸のまま持ち出される。画像を主役にしたアプリを個人開発で長く運営していると、この「気軽な持ち出し」は避けて通れない悩みになります。私自身、プレビュー画質を落として対策したつもりでも、Retina 解像度のスクショは実用に十分な品質で、ほとんど無意味だったという経験があります。

ここで考えたいのは、完璧な防御ではありません。撮影そのものを技術的に封じ込めるのは、少なくとも iOS では不可能です。それでも「ワンタップで全部持っていける」状態を、「少し手間がかかる」状態に変えるだけで、漏れの大半は減らせます。ここで整理するのは、Rork が生成する Expo アプリに後付けできる、スクリーンショットと画面収録の検知・目隠しの実装です。本番運用で詰まった箇所、つまり実際の落とし穴まで含めて見ていきます。

守れるのは「気軽な持ち出し」まで、と最初に割り切る

実装に入る前に、期待値を正しく置くことが何より大事だと感じています。これは DRM ではありません。本気で画像を抜こうとする人は、別の端末で画面を物理的に撮影すれば、こちらが何をしようと止められません。

ですから目的は「悪意のない、あるいはごく軽い気持ちの持ち出しを思いとどまらせること」に絞ります。私の場合、守りたいのは収益のうちの数パーセントの漏れであって、要塞を建てることではありません。この線引きを最初にしておかないと、検知をすり抜ける方法をいくつも想像しては実装が肥大化し、個人開発の時間が溶けていきます。抑止としての費用対効果が成り立つ範囲に留める、という判断をまず固めておきます。

iOS と Android で「できること」がまるで違う

最初に混乱したのは、iOS と Android で取れる手段が対称ではない点でした。整理すると次のようになります。

やりたいことiOSAndroid
撮影・録画そのものを止める不可(OS が許可していません)可(FLAG_SECURE)
スクショされた「事実」を受け取る可(システム通知)原則不可
録画・ミラーリング中を検知可(isCaptured)限定的

つまり Android は「そもそも撮れなくする」方向が素直で、iOS は「撮られたら気づいて反応する」方向しか選べません。この非対称を踏まえると、両プラットフォームで同じコードに寄せようとするのは筋が悪く、それぞれの土俵で別の手を打つのが結局いちばん簡潔になります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦expo-screen-capture では拾えない『録画・ミラーリング中』を、isCaptured のネイティブ監視でリアルタイムに目隠しできるようになる
✦iOS と Android で『検知できること・できないこと』を切り分け、FLAG_SECURE と検知オーバーレイを適材適所で使い分けられる
✦個人開発のプレミアム画像アプリで、無料プレビューの流出を『DRMではなく現実的な抑止』として実装する判断軸が手に入る
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-09-03
リンクを押してもアプリが開かないとき、疑うのは assetlinks.json の置き場所より先に署名鍵です
Android App Links が検証されずブラウザに吸われる原因の多くは指紋の食い違いです。keytool の実出力と、手元で照合できる小さな検査スクリプトの実行結果を添えて整理しました。
⬡ 開発ツール2026-09-01
expo-paste-input で画像を貼り付けられる入力欄を作り、消える file:// を documents へ逃がす
チャット入力に画像やGIFを貼り付けられるようにする expo-paste-input の実装手順です。onPaste が返す file:// は一時ファイルで、送信までの間に消えることがあります。保存先を移す実装と、実機で確かめる順番をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます