RORK LABEN
BUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要ですBUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要です
記事一覧/アプリ開発
アプリ開発/2026-06-27中級

画面を離れてもアニメーションが回り続ける — Rork(Expo)アプリのフォーカス連動でバッテリーを守る

Rork が生成した Expo アプリで、別画面に進んだりホームに戻ったあともグラデーションや呼吸アニメーションが裏で回り続け、ジャンクとして表に出ないままバッテリーを静かに削っていく——その原因は Reanimated の withRepeat が UI スレッドで走り続けることと、ナビゲーションスタックが画面をマウントしたまま保持することにあります。useIsFocused と AppState を束ねたライフサイクル設計で、画面外とバックグラウンドのループを確実に止める実装を、動くコードで示します。

Rork539React Native227Expo175アニメーション10パフォーマンス33

プレミアム記事

癒し系アプリの「呼吸ガイド」を作っていたとき、画面のグラデーションがゆっくり伸縮するアニメーションを入れました。見た目は気に入っていたのですが、ある日ベータ版を一日持ち歩いた帰りに端末がほんのり温かく、バッテリーの内訳を見ると、このアプリが「バックグラウンドのアクティビティ」で妙に上位に来ていたのです。

不思議だったのは、フレーム落ち(ジャンク)としては一切表に出ていなかった点でした。スクロールはなめらかで、体感の不具合はゼロ。けれど呼吸アニメーションは、設定画面に進んでも、ホームに戻ってロックしても、UI スレッドの上で律儀に伸縮を続けていました。見えないところで回り続ける無音のループ——これがバッテリーを削る正体でした。

個人開発でいくつもの壁紙・癒し系アプリを運用してきて学んだのは、アニメーションの「重さ」よりも「いつ止まるか」を設計するほうが、電池持ちには効くということです。ここでは Rork が出力する Expo アプリを題材に、画面外とバックグラウンドのループを確実に止めるライフサイクル設計を共有します。

なぜ画面外でもアニメーションは止まらないのか

直感に反しますが、別画面に進んでもアニメーションは勝手に止まりません。理由は2つあります。

ひとつは、React Navigation のスタックは前の画面をアンマウントせずマウントしたまま残すからです。詳細画面に進んでも、その下のリスト画面は生きていて、そこで withRepeat のループが走っていればそのまま回り続けます。タブナビゲーターはさらに顕著で、タブを切り替えても各タブの画面は基本的にマウントされ続けます。

もうひとつは、Reanimated の withRepeat が UI スレッド(ワークレット)上で自走するからです。JavaScript スレッドのレンダリングが止まっても、UI スレッドのアニメーションは独立して進みます。これは滑らかさのための設計ですが、裏を返すと「JS から見えない場所で走り続ける」ことを意味します。

そして肝心なのは、これがジャンクとして検出されないことです。フレーム落ちは「描画が間に合わない」状態ですが、ここでの問題は「描画が間に合っているのに、見えない画面のために描き続けている」状態です。プロファイラのヒッチ表示には出ず、Energy Log(消費電力)にだけ静かに積み上がります。

アニメ手段ごとの「画面外で止まるか」

止め方を設計する前に、自分のアプリが使っているアニメーション手段が、画面外で自動的に止まるのか・止まらないのかを把握しておくと判断が速くなります。

手段画面外で自動停止止め方
Reanimated withRepeat止まらないcancelAnimation を明示的に呼ぶ
Animated(RN標準)の loop止まらないref を保持して .stop()
Lottie(lottie-react-native)止まらないref の pause() / autoPlay を外す
expo-video / expo-av止まらないplayer の pause()
CSS的な無限ループ(WebView)状況次第WebView の停止か非表示
FlatList セル内のループ仮想化で部分的に停止可視判定で個別制御

要点は、**ほとんどの手段は「自分で止めない限り止まらない」**ということです。FlatList の仮想化だけは画面外セルをアンマウントしてくれますが、ヘッダーやパララックス層は仮想化の外なので例外です。

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

この記事の続きを読む

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

この記事で得られること
withRepeat のループや Lottie/動画が画面外でも回り続ける理由を、ナビゲーションスタックのマウント保持と UI スレッド常駐から理解し、useIsFocused と AppState を束ねて確実に止められる
cancelAnimation で値が途中の位置に止まる事故を防ぐリセット手順と、useFocusEffect のクリーンアップで二重起動を起こさない実装パターンを手に入れられる
アニメ手段ごとに『画面外で自動停止するか』を一覧で把握し、呼吸アニメや壁紙プレビューの常時ループだけを狙って止める線引きを設計できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-08-16
グラフが壊れて見えるのは、データが多いときではなく最初の数日でした
記録アプリの折れ線グラフが、データの少ない最初の数日だけ線が消える。原因はY軸の幅が0になり座標がNaNになることでした。実測した挙動と、描画前に置く小さな正規化層を紹介します。
アプリ開発2026-08-06
壁紙の上の文字が読めるかを、端末ではなく取り込み時に決める — 判定指標を4つ測り比べた記録
壁紙の上に置くステータスバーや見出しが読めるかを、端末での画像解析ではなく取り込み時のメタデータで決める設計です。240枚のコーパスで判定指標を4つ実測し、縮小画像での判定が何と一致するのかまで記録しました。
アプリ開発2026-08-05
キー短縮で 19% 減らしても配信は 3% しか軽くならない — カタログ JSON の圧縮実測と配置換え
2万件の壁紙カタログJSONで5形式を実測。キー短縮はgzip後3.2%しか効かず、列指向への配置換えは26.8%減。Brotli・ページング・JSON.parse時間まで、配信サイズ設計の判断材料を数値で並べます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →