RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-05-04中級

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

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

マイク音声録音expo-audio3expo-av5パーミッショントラブルシューティング77iOS108Android43React Native209

「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/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

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

関連記事

開発ツール2026-05-02
Rork で StatusBar の色・スタイルが反映されない時の対処法
Rork で生成したアプリの StatusBar が iOS と Android で意図通りに表示されない問題を、実装パターン別に切り分けて解決する手順をまとめました。
開発ツール2026-04-24
Rork アプリの WebView が真っ白になる・ページが表示されないときに確認する 6 つの原因
Rork で WebView を組み込んだら画面が真っ白になる、ページが読み込まれない、JavaScript が動かない ─ そんな症状を切り分けて確実に直すためのチェックリストです。
開発ツール2026-04-18
RorkアプリがiOSで動くのにAndroidだけおかしい:プラットフォーム差異を修正する実践ガイド
RorkアプリがiOSで動くのにAndroidで崩れる問題を解決します。シャドウ・フォント・権限・キーボード制御など主要なプラットフォーム差異を実例コードで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →