RORK LABEN
BUILD — Rork Maxがネイティブ Swift アプリを生成し、React Nativeでは届きにくい領域に踏み込めますPLATFORM — Rork MaxはiPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — HealthKit・Core ML・NFC・Dynamic Island・Live Activitiesなどのネイティブ機能が使えますTEST — ブラウザ内ストリーミングiOSシミュレータで、XcodeやMacなしでテストできますDEPLOY — ビルド・証明書・App Store申請までの自動化で公開までを簡素化しますPRICE — 無料で開始でき、有料プランは$25/月〜、Rork Maxは$200/月ですBUILD — Rork Maxがネイティブ Swift アプリを生成し、React Nativeでは届きにくい領域に踏み込めますPLATFORM — Rork MaxはiPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — HealthKit・Core ML・NFC・Dynamic Island・Live Activitiesなどのネイティブ機能が使えますTEST — ブラウザ内ストリーミングiOSシミュレータで、XcodeやMacなしでテストできますDEPLOY — ビルド・証明書・App Store申請までの自動化で公開までを簡素化しますPRICE — 無料で開始でき、有料プランは$25/月〜、Rork Maxは$200/月です
記事一覧/アプリ開発
アプリ開発/2026-07-02中級

Rork Max のネイティブ Swift で MusicKit を使う — Apple Music の認可・検索・再生を最小構成で通す

Rork Max で生成した Swift アプリに MusicKit を組み込む手順。MusicAuthorization の認可、MusicCatalogSearchRequest での検索、ApplicationMusicPlayer と SystemMusicPlayer の使い分け、未加入ユーザーへのオファー表示までを実装コードで解説します。

rork-max39musickitapple-musicswift7media-api

プレミアム記事

作業用 BGM を流すユーティリティの企画を練っていたとき、音楽ソースをどこから持ってくるかで手が止まりました。ストリーミングサービスの SDK は魅力的ですが、外部依存の審査リスクと保守の重さが個人開発には見合わない。そう考えて Apple 純正の MusicKit を選びました。

結論から言うと、MusicKit は「サーバーを1台も持たずに音楽カタログへアクセスできる」という点で、個人開発との相性が飛び抜けて良い API です。開発者トークンの発行・更新すらフレームワークが自動で処理してくれます。

Rork Max はネイティブ Swift を出力するため、React Native では回り道が必要だったこの領域に直接踏み込めます。認可から再生までの最小構成を、実装の順番どおりに追っていきます。

事前設定 — コードを書く前に2箇所

MusicKit はコードより先に、プロジェクト外の設定でつまずきやすい API です。必要なのは次の2つです。

  1. App ID の App Services で MusicKit を有効化する。Apple Developer サイトの Identifiers から対象 App ID を開き、App Services タブで MusicKit にチェックを入れます。ここが開発者トークン自動発行の根拠になります。
  2. Info.plist に NSAppleMusicUsageDescription を追加する。ユーザーのライブラリへアクセスする理由を書きます。これが無いと認可ダイアログの表示時にクラッシュします。

かつての MusicKit(Apple Music API 直叩き)では JWT の開発者トークンを自前のサーバーで署名・更新する必要がありました。現在の Swift 版 MusicKit はこの設定さえ済んでいれば、トークンの発行・キャッシュ・更新をすべて自動処理します。サーバーレスで完結する理由がここにあります。

認可 — MusicAuthorization.request()

最初のコードは認可リクエストです。async 一発で書けます。

import MusicKit
 
@MainActor
final class MusicAccessModel: ObservableObject {
    @Published var status: MusicAuthorization.Status = .notDetermined
 
    func requestAccess() async {
        // 初回はダイアログが出る。2回目以降は保存済みの判定が即座に返る
        status = await MusicAuthorization.request()
    }
}

status.authorized .denied .restricted .notDetermined の4値です。.denied の後にアプリ内から再度ダイアログを出すことはできないため、設定アプリへの導線(UIApplication.openSettingsURLString)を用意しておきます。

認可を求めるタイミングは、起動直後のオンボーディングではなく音楽機能に最初に触れた瞬間に寄せることを推奨します。BGM 機能がアプリの主目的でない限り、起動直後の権限ダイアログは離脱要因にしかなりません。

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

この記事の続きを読む

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

この記事で得られること
MusicKit の開発者トークンを自前管理せずに済ませる設定手順と、MusicAuthorization・カタログ検索・再生までの動くコード一式
ApplicationMusicPlayer と SystemMusicPlayer の挙動差の比較表 — どちらを選ぶかで変わるユーザー体験の具体像
Apple Music 未加入ユーザーとシミュレータ実行で詰まるポイントの回避策と、Rork Max への指示で欠落しやすい設定の補い方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-04-04
Rork Max × 折りたたみiPhone 2026 — フォルダブルデバイス時代に備えるアプリ設計戦略
Appleが2026年ロードマップに示す折りたたみiPhoneに向けたRork Maxでのアプリ設計戦略を解説。アダプティブレイアウト・マルチウィンドウ・SwiftUI対応など、今から準備すべき実践的な実装方法を紹介します。
AI モデル2026-07-02
Rork Max のネイティブ Swift で Image Playground を組み込む — アプリ内画像生成の可用性設計とフォールバック
Rork Max の Swift 生成で Image Playground をアプリに組み込む手順。supportsImagePlayground による可用性判定、imagePlaygroundSheet、ImageCreator でのプログラム生成、非対応端末のフォールバック設計まで実装ベースで整理します。
開発ツール2026-06-17
誕生日を集めずに年齢を確認する — Declared Age Range API を Rork アプリに組み込む
iOS 26 の Declared Age Range API を使い、生年月日を保存せずに年齢層だけを受け取る実装方法。Rork Max のネイティブ Swift と、標準 Rork(Expo)のネイティブモジュール越しの呼び出しを、責務の線引きとともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →