RORK LABEN
EVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からですEXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれていますWAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきませんMAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところですSIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りませんSEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じていますEVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からですEXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれていますWAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきませんMAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところですSIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りませんSEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じています
記事一覧/開発ツール
開発ツール/2026-08-23上級

Android 16 の予測型「戻る」を、8月31日までに直すか後回しにするか

targetSdk 36 では予測型「戻る」が既定で有効になり、onBackPressed が呼ばれなくなります。期限までに必要な作業と、切り離してよい作業を分ける判断と、opt-out を config plugin に置くまでを書きました。

Android 164predictive backExpo203React Native236config plugin6

プレミアム記事

targetSdkVersion を 36 に上げたあと、プレビュー画面で端から内側へスワイプしたときの見え方が変わっていました。画面が少し縮んで、後ろが覗く。Android 側の予測型「戻る」のアニメーションです。

そこまでは知っていた変更でした。手が止まったのは、その先です。プレビューから一覧へ戻るつもりの操作が、アプリの終了として扱われる場面がありました。

React Native 側の告知には「BackHandler は引き続き動作します」と書かれています。実際、BackHandler は動いていました。それでも戻る操作の結果は変わっていた。この二つが同時に成り立つ理由を理解するまでに、少し時間がかかりました。

「BackHandler は動く」と「戻る操作が変わらない」は別の話です

Android 16 を対象にするアプリでは、予測型「戻る」が既定で有効になります。このとき OS 側で起きているのは、次の二つです。

従来(targetSdk 35 以下)targetSdk 36
onBackPressed() が呼ばれる呼ばれない
KeyEvent.KEYCODE_BACK が配送される配送されない

React Native 0.81 では、この変化を吸収して JS 側の BackHandler を動かし続けるための修正が入っています。コミュニティのアナウンスには、onBackPressed はもう呼ばれないが BackHandler は動作を続けるはずで、独自のネイティブ側の戻る処理を持っている場合は OnBackPressedDispatcher へ手で移行する必要がある、と書かれています。

ここで私が読み違えていたのが、「BackHandler が動く」の射程でした。動くのは、自分で hardwareBackPress に登録したハンドラです。ハンドラを登録していない画面 — つまりナビゲーションライブラリに戻る操作を任せている画面 — の挙動までが保証されているわけではありません。

そして React Navigation は、この記事を書いている時点で予測型「戻る」に追随しきれていません。公式ドキュメントは、システムの戻るジェスチャーを期待どおり動かすために android:enableOnBackInvokedCallbackfalse にする案内を出しています。Expo 側でも SDK 54 でスタック内の戻る操作が効かなくなる報告が上がっており、react-native-screens の新しいネイティブスタックで対応が進んでいる段階です。

つまり、壊れうるのは自分が書いた BackHandler ではなく、書かなかった箇所のほうでした。これが今回いちばん直感に反した点です。自分のコードを読み返しても、壊れる理由は見つかりません。

opt-out フラグが止めるものと、止めないもの

android:enableOnBackInvokedCallback="false" は、一時的な回避として公式に案内されているフラグです。ただしこのフラグの効き方には、把握しておかないと判断を誤る非対称があります。

対象フラグを false にしたとき
予測型「戻る」のシステムアニメーション無効になる
OnBackInvokedCallback無視される
OnBackPressedCallback値によらず呼ばれ続ける

OnBackPressedCallback はフラグの値に関係なく呼ばれます。ですので、AndroidX の作法で戻るを扱っている部分は、opt-out を入れても入れなくても動きます。フラグで戻せるのは、あくまで OS 側のアニメーションと新しいコールバック経路のほうです。

もう一点。このフラグは <application> にも <activity> にも書けます。両方に書いた場合は個別の指定が優先されるため、<application>false を入れたのに <activity> 側へ過去の検証で true が残っていると、その画面だけ挙動が揃いません。私はこの取りこぼしを機械で潰すことにしました(後述のスクリプトで <activity> 側も見ているのはこのためです)。

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

この記事の続きを読む

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

この記事で得られること
8月31日の期限に必要なのは targetSdk の引き上げだけで、予測型「戻る」への本対応は切り離せると判断できるようになる
手元の複数アプリのうちどれが戻る操作で壊れうるかを、実機を触る前に検査スクリプトで仕分けられるようになる
AndroidManifest への手書きが次の prebuild で消える事故を避け、opt-out を再現可能な形で残せるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-07-28
prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し
Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。
開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
開発ツール2026-09-01
expo-paste-input で画像を貼り付けられる入力欄を作り、消える file:// を documents へ逃がす
チャット入力に画像やGIFを貼り付けられるようにする expo-paste-input の実装手順です。onPaste が返す file:// は一時ファイルで、送信までの間に消えることがあります。保存先を移す実装と、実機で確かめる順番をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます