◉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-26上級

Rorkのアプリで音をバックグラウンド再生し、ロック画面から操作できるようにする

Rorkが生成したExpoアプリで音楽やヒーリング音をバックグラウンド再生し、ロック画面・コントロールセンターから操作できるようにするまでを、expo-audioの実装コードと落とし穴つきでまとめます。

Rork577Expo213expo-audio4React Native238バックグラウンド再生4

✦ プレミアム記事

癒し系のアプリを作っていて最初に裏切られるのは、「プレビューでは完璧に鳴っていた音が、ホームに戻った瞬間や画面ロックで止まる」場面です。私自身、個人開発で長く運営している Relaxing Healing という睡眠・瞑想向けの音アプリを Rork で作り直してみたとき、生成直後のコードはフォアグラウンドでしか鳴りませんでした。就寝前に使うアプリで画面を消した瞬間に無音になるのは、用途として致命的です。

Rork が出力するのは React Native(Expo)のコードなので、この問題は Rork 固有ではなく Expo の音声まわりの設定で解けます。ただし公式の最小サンプルをそのまま貼っても、ロック画面の再生ボタンは出てきませんし、Android では数分で勝手に止まります。ここでは expo-audio(Expo SDK 54 系)を使って、バックグラウンド再生とロック画面操作の両方を成立させるまでの実装を、つまずいた順に並べます。

なぜ生成直後のコードでは背景で止まるのか

audio を「ただ再生する」のと「アプリが背景にいても鳴らし続ける」のは、OS から見ると別の許可が要る行為です。前者は音声セッションの初期状態でも動きますが、後者には次の3つが揃って初めて成立します。

OSごとに要る「3つの許可」

まず iOS では、バックグラウンド実行モードに audio を申告していないと、背景に回った瞬間に音声セッションが停止されます。次に、音声セッション自体を「背景でも鳴らす」モードに切り替える必要があります。そして Android では、ロック画面の通知(メディア通知)を能動的に出さないと、OS が約3分でプロセスの音声を止めます。生成直後のコードはこの3つのうち、たいてい1つも満たしていません。

1. expo-audio を入れて、背景モードを申告する

Rork からエクスポートしたプロジェクトに expo-audio を追加し、app.json(または app.config.js)のプラグイン設定で iOS のバックグラウンド音声を有効にします。プラグイン経由で書くと、ネイティブの Info.plist に手を入れずに UIBackgroundModes が設定されます。

{
  "expo": {
    "plugins": [
      [
        "expo-audio",
        {
          "microphonePermission": false
        }
      ]
    ],
    "ios": {
      "infoPlist": {
        "UIBackgroundModes": ["audio"]
      }
    },
    "android": {
      "permissions": ["android.permission.FOREGROUND_SERVICE", "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"]
    }
  }
}

ここを入れずに開発ビルドを作ると、iOS シミュレータでは一見動くのに実機で背景に回した途端に止まる、という再現性の低いバグに変わります。私はこの差で半日溶かしたので、最初に申告しておくことを強く推奨します。設定変更後は npx expo prebuild と再ビルドが必要です(Expo Go では UIBackgroundModes は反映されません)。

✦

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

この記事の続きを読む

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

この記事で得られること
✦画面ロックで音が止まってしまう癒し系・音楽アプリを、ロック画面操作つきの安定再生に作り替えられる
✦expo-audioのsetAudioModeAsyncとsetActiveForLockScreenの正しい組み合わせを、動くコードで手に入れられる
✦iOSとAndroidで挙動が分かれる箇所(3分で止まる問題・割り込み復帰)を、事前に潰した状態でリリースできる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-08-31
画面ロックから3分後、expo-audio の環境音は静かに止まっていました
expo-audio の音が画面ロックで止まる原因を、ビルド設定・オーディオセッション・ロック画面連携の三層に分けて切り分けます。Android で約3分後に止まるのは、ドキュメントに書かれた止まり方です。
⬡ 開発ツール2026-05-05
Rork のポッドキャストアプリを本番運用へ — expo-audio への移行・割り込みからの復帰・ダウンロード再開
Rork のポッドキャストアプリを実運用に耐えさせるための実装メモ。SDK 55 で消える expo-av からの移行、着信割り込みからの復帰、中断されたダウンロードの再開、iCloud バックアップと容量予算の設計まで、動くコードで扱います。
⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます