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-05-04中級

Rork でマイク・音声録音が動かない——よくある原因と修正法を症状別に整理

Rork で生成したアプリでマイクや音声録音が機能しない場合の原因を症状別に解説。パーミッション設定・expo-audio の状態管理・iOS/Android の挙動差・シミュレーター制限まで、実際に詰まりやすいポイントを網羅しています。

マイク音声録音expo-audio4expo-av5パーミッショントラブルシューティング78iOS109Android47React Native233

「Rork で音声メモアプリを作ったのに、マイクボタンを押しても何も起きない」——こういうケースは、AI 音声アシスタントや録音系アプリを Rork で構築しようとすると一度は経験するはずです。

マイク関連の不具合は、エラーメッセージが出ないまま無音で失敗することが多く、カメラや位置情報よりも原因の特定が難しい傾向があります。カメラ・位置情報のパーミッション問題についてはRork のカメラ・位置情報・通知のパーミッションエラー解決ガイドも合わせて参考にしてください。ここではRork の AI 生成コードでよくある録音不具合を症状ごとに整理し、それぞれの修正方法をコード付きで紹介します。

シミュレーターでは録音は動かない(まずここを確認)

最初に確認したいのは、iOS シミュレーターはマイクをサポートしていないという点です。

Expo Go やシミュレーターで動作確認しようとしても、録音の開始は内部的に失敗します。エラーが表示されないままボタンが動かないように見えることもあり、「コードのバグだ」と疑って深追いしがちです。

// シミュレーターでテストしようとしたとき、このログが出なくても正常
// 実機(TestFlight ビルド)での確認が必須
const { status } = await Audio.requestPermissionsAsync();
console.log('Permission status:', status); // シミュレーターでは'undetermined'のままになることも

解決策: マイクを使う機能は必ず実機 + TestFlight ビルドで検証してください。Rork Companion の実機プレビューでも、マイク機能は動作確認できます。

パターン①「録音開始で即クラッシュ or 無音になる」

録音ボタンを押した瞬間にアプリが落ちる、あるいは録音が始まったように見えて音声が取れていない場合、ネイティブ側のパーミッション宣言が不足している可能性が高いです。

iOS — Info.plist の確認

app.jsonNSMicrophoneUsageDescription がないと、iOS はマイクへのアクセスを拒否します。エラーも出ずにクラッシュします。

// app.json(または app.config.js)に追加する設定
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSMicrophoneUsageDescription": "音声メモの録音に使用します。"
      }
    }
  }
}

Rork の AI がマイク機能を生成しても、この infoPlist の項目を自動追加しないことがあります。生成後に app.json を確認する習慣をつけておくとよいでしょう。

Android — AndroidManifest.xml の確認

Android では RECORD_AUDIO パーミッションが必要です。expo-audio を使う場合は Expo のプラグインが自動追加することが多いですが、念のため確認します。

// app.json の android セクション
{
  "expo": {
    "android": {
      "permissions": ["RECORD_AUDIO", "WRITE_EXTERNAL_STORAGE"]
    }
  }
}

この設定を追加したあとは、EAS Build で新しいビルドを作る必要がありますeas update だけでは Native 側の変更は反映されません。

パターン②「ダイアログは出るが、許可しても録音できない」

ユーザーがマイクを許可したにもかかわらず録音できない場合、Audio モードの設定漏れが原因であることが多いです。

expo-audio(旧 expo-av)では、録音の前に Audio モードを適切に設定しないと、バックグラウンドで別の音声セッションと競合して失敗します。

import { useAudioRecorder, AudioModule, RecordingPresets } from 'expo-audio';
 
async function startRecording() {
  // ★ここが抜けがち: Audio モードを録音用に設定する
  await AudioModule.setAudioModeAsync({
    allowsRecordingIOS: true,        // iOSで録音を許可
    playsInSilentModeIOS: true,      // サイレントモードでも動作させる
    interruptionModeIOS: 'doNotMix', // 他の音声と競合しない
  });
 
  const recorder = useAudioRecorder(RecordingPresets.HIGH_QUALITY);
  await recorder.record();
}

特に allowsRecordingIOS: true を設定しないと、iOS では録音モードに入れず無音になります。Rork の生成コードでこの設定が省略されているケースが実際によくあります。

パターン③「Expo Go では動くが、TestFlight ビルドで動かない」

Expo Go は開発ツールとして多くのパーミッションをあらかじめ持っています。そのため Expo Go では録音できても、実際のビルドでは app.json の設定が必要になります。

加えて、expo-av から expo-audio への移行も確認ポイントです。Expo SDK 51 以降では expo-av の録音 API が非推奨となり、expo-audio が正式パッケージになっています。Rork が古い API で生成した場合、新しい SDK では動作が安定しないことがあります。

# expo-audio が正しくインストールされているか確認
# (Rork の生成コードで expo-av を使っていたら要確認)
npx expo install expo-audio

パッケージを変更したあとは EAS Build で再ビルドが必要です。

パターン④「録音は始まるが、途中で止まる or ファイルが壊れる」

録音が始まっても途中で停止したり、保存されたファイルを再生できない場合、状態管理の問題が多いです。

Rork の AI 生成コードでは、録音の開始・停止ロジックが非同期処理になっていない場合があります。

// ❌ 失敗しやすいパターン(非同期を待たない)
const handleStop = () => {
  recorder.stop(); // stop() は Promise を返すが await していない
  saveRecording(); // stop 完了前に保存しようとして壊れる
};
 
// ✅ 正しいパターン
const handleStop = async () => {
  await recorder.stop();             // 録音の終了を待つ
  const uri = recorder.getUri();     // 録音後に URI を取得
  if (uri) {
    await saveToStorage(uri);        // ファイルが確定してから保存
  }
};

stop() は非同期で、完了する前にファイルを操作しようとすると破損します。生成されたコードで await が抜けていないか確認してみてください。

iOS と Android の挙動の違いを知っておく

マイク周りは iOS と Android で細かな差があります。把握しておくと原因特定が早くなります。

iOS:

  • サイレントモードでは録音できない(playsInSilentModeIOS: true で解除可能)
  • バックグラウンドでの録音は Background Modes の設定が別途必要
  • 一度「許可しない」を選ぶと、アプリから再度ダイアログを出せない(設定アプリへ誘導が必要)

Android:

  • RECORD_AUDIO に加えて Android 13 以降は詳細なパーミッションが必要なケースも
  • バックグラウンド録音はフォアグラウンドサービスが必要
  • 機種差(特にファーウェイ・シャオミ)で挙動が変わることがある

「iOS では動いたのに Android では動かない」という場合は、まず RECORD_AUDIO パーミッションの実行時リクエスト処理を確認してみてください。

Rork に正しい録音コードを生成させるプロンプトのコツ

Rork の AI は指示が曖昧だと録音周りのコードを省略することがあります。以下のように具体的に指示するとうまく生成できます。

# 詳しい指定が生成品質を上げる例
「expo-audio を使い、iOS と Android の両方でマイク録音できるコンポーネントを作って。
AudioModule.setAudioModeAsync で allowsRecordingIOS: true を設定し、
パーミッションのリクエストと、許可されなかった場合のエラー表示も含めて。
録音中・停止中のステート管理も async/await で正しく実装して。」

曖昧なプロンプト(「音声を録音するボタンを作って」)だと、パーミッション処理や Audio モード設定が省略されがちです。

また、録音機能を追加した後に「iOS と Android の両方で動作確認したが、以下の問題があった。修正して」と実際のエラーログを貼り付けるのも効果的です。Rork AI はエラーコンテキストがあると修正精度が上がります。

まず今日試せること

もし「録音ボタンを押しても反応がない」という状態なら、次の順番で確認してください。

  1. シミュレーターを使っているなら実機に切り替える(Rork Companion か TestFlight ビルド)
  2. app.jsonNSMicrophoneUsageDescription があるか確認する
  3. 録音開始前に AudioModule.setAudioModeAsync({ allowsRecordingIOS: true }) を呼んでいるか確認する
  4. stop()await されているか確認する

この4点だけで、マイク不具合の多くは解決できます。音声 AI アプリは Rork の得意分野でもあります。録音機能を活用したAI 音声日記アプリの実装ガイドも参考にしてみてください。ぜひ諦めずに試してみてください。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-05-02
Rork で StatusBar の色・スタイルが反映されない時の対処法
Rorkで生成したアプリのStatusBarがiOSとAndroidで意図通りに表示されない問題を、5つのケースで切り分けます。アイコンが背景に溶ける、Androidだけ背景色が効かない、画面遷移で点滅する、モーダルで色が戻るといった症状の対処とデバッグの順番を示します。
開発ツール2026-04-24
Rork アプリの WebView が真っ白になる・ページが表示されないときに確認する 6 つの原因
RorkアプリのWebViewが真っ白になる、ページが読み込まれないときに確認する6つの原因です。iOSのATS、AndroidのcleartextTraffic、リダイレクトとクッキーの無限ループ、プロセス外WebViewのクラッシュ、プレビューと本番の差まで切り分けて直します。
開発ツール2026-04-18
RorkアプリがiOSで動くのにAndroidだけおかしい:プラットフォーム差異を修正する実践ガイド
RorkアプリがiOSでは動くのにAndroidだけ崩れる問題を、5つの代表的な差異から解決します。シャドウが表示されない、フォントの太字が効かない、ステータスバーの高さ、権限取得の違い、キーボードが入力欄を隠す症状を実例コードで修正します。Android実機で先に試す習慣も勧めます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →