RORK LABEN
PLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっていますPLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっています
記事一覧/アプリ開発
アプリ開発/2026-07-14中級

壁紙を長押しして、プレビューと保存メニューを出す — Rork の Expo アプリで context menu を組む

壁紙ギャラリーのカードを長押ししても何も起きない。iOS利用者はプレビュー付きのメニューを期待します。Pressableだけでは届かない理由から、zeegoでのネイティブcontext menu実装、スクロールとの競合解消、保存・共有アクション、Android向けの自前フォールバックまで、動くコードでまとめます。

Rork547Expo192React Native233context menu壁紙アプリ28

プレミアム記事

実機で壁紙ギャラリーをスクロールしていて、ふとカードを長押ししました。何も起きません。iPhone を使い慣れた人ほど、写真アプリやホーム画面の感覚で「長押しすればプレビューとメニューが出るはず」と手が覚えています。その期待に沈黙で応えてしまうと、アプリが一段安っぽく感じられてしまう。個人開発で壁紙アプリを触っていて、この小さな段差が離脱につながる場面を、私自身、何度も見てきました。

Rork が生成する一覧画面は、多くの場合 Pressable にタップ遷移だけを載せた素朴な作りです。まずはそこから、なぜ長押しメニューだけは一手間必要になるのかを整理します。

Pressable の onLongPress で足りない部分

Pressable には onLongPress が用意されているので、長押しの検知そのものはすぐにできます。

<Pressable onPress={openDetail} onLongPress={() => setMenuOpen(true)}>
  <Image source={item.uri} style={styles.card} />
</Pressable>

ただ、これで出せるのは自前で描いたシートやモーダルです。iOS が標準で見せる「対象がふわりと浮き上がり、背景がぼけて、指を離す前にプレビューが見える」あの体験にはなりません。あの浮き上がりと背景ブラーは UIContextMenuInteraction というネイティブの仕組みで、JavaScript 側からビューを重ねても再現しきれない部分です。

つまり判断はこうなります。iOS 利用者に馴染みのある挙動を最優先するなら、ネイティブの context menu を橋渡しするライブラリを使う。細かなアニメーションや Android での見た目を自分で統一したいなら、onLongPress を起点に自前で組む。壁紙アプリのように「保存・共有・お気に入り」という定型の三択を出すだけなら、前者のほうが体験も実装量も有利でした。

二つの実装方針を先に決める

手を動かす前に、両方針の向き不向きを一枚にしておきます。

観点ネイティブ context menu(zeego)自前オーバーレイ(Reanimated)
iOS のプレビュー浮き上がり標準どおりに出る近づけられるが完全一致は難しい
Android の見た目統一Material のポップアップに従う自分で自由に設計できる
実装量少ない多い(ジェスチャと座標計算)
メニュー項目の動的制御やや制約あり柔軟

壁紙ギャラリーでは、iOS の体感を素直に取りに行きたかったので、まず zeego で組み、Android だけ挙動が気になる箇所を自前に寄せる二段構えにしました。zeego はネイティブの context menu を薄くラップし、対応していない環境では通常のメニューへ自動的に落ちてくれます。迷ったら zeego 起点で始めることを推奨します。

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

この記事の続きを読む

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

この記事で得られること
Pressable の onLongPress だけでは iOS 標準のプレビュー付きメニューにならない理由と、その分岐点
zeego でネイティブ context menu を組み、スクロールと長押しの競合を delayLongPress で解く実装
保存・共有・お気に入りを一つのメニューに束ね、Android では自前オーバーレイへ切り替える判断
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-08-16
グラフが壊れて見えるのは、データが多いときではなく最初の数日でした
記録アプリの折れ線グラフが、データの少ない最初の数日だけ線が消える。原因はY軸の幅が0になり座標がNaNになることでした。実測した挙動と、描画前に置く小さな正規化層を紹介します。
アプリ開発2026-08-06
壁紙の上の文字が読めるかを、端末ではなく取り込み時に決める — 判定指標を4つ測り比べた記録
壁紙の上に置くステータスバーや見出しが読めるかを、端末での画像解析ではなく取り込み時のメタデータで決める設計です。240枚のコーパスで判定指標を4つ実測し、縮小画像での判定が何と一致するのかまで記録しました。
アプリ開発2026-07-07
高さの異なる画像を2列で美しく並べる—Rork の Expo アプリで壁紙ギャラリーを段組みにする
縦横比のばらつく画像を numColumns では美しく並べられない理由から、列の高さを見て振り分ける段組みアルゴリズム、FlashList の masonry での仮想化、依存を増やさない実装まで、壁紙ギャラリーを実コードで組みます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →