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 × MapKit で場所検索マップを実装する — MKLocalSearch・ピン集約・位置情報許可の設計

Rork Max のネイティブ Swift で場所検索マップ画面を作る実装手順です。MKLocalSearch の周辺検索、ピンが増えたときの SwiftUI Map と MKMapView の使い分け、位置情報許可と審査対策まで、試作で実際に詰まった点を交えて整理します。

Rork Max205MapKitSwiftUI59位置情報3MKLocalSearchiOS開発15

プレミアム記事

地図つきのアプリ画面は、Rork Max に頼むと驚くほどあっさり生成されます。私自身、開発の合間に「壁紙アプリ用の撮影スポットを地図にメモしておく」小さなツールを Rork Max で試作したとき、現在地に追従する地図とピン表示までは最初のプロンプト一往復で動きました。ところが、そこから先が長いのです。キーワードで周辺を検索する、ピンが数百件に増えても固まらない、位置情報の許可を自然なタイミングで求める——この3つは AI の一発生成では通らず、それぞれ手を入れる必要がありました。

個人開発では地図画面が「看板機能」になるアプリが少なくありません。店舗検索、旅の記録、スポット共有。どれも骨格は同じで、詰まる場所も同じです。ここでは Rork Max のネイティブ Swift 出力を前提に、場所検索マップを実用ラインまで持っていく手順を、試作時の実測と失敗を交えて整理します。

作るものと全体の構成

対象は「現在地周辺のスポットを検索して、ピンをタップすると詳細が開き、純正マップに経路を渡せる」画面です。構成要素は4つに分かれます。

  1. 位置情報の取得と許可管理(CoreLocation)
  2. 地図表示とピン描画(SwiftUI の Map、必要に応じて MKMapView)
  3. 周辺検索(MKLocalSearch)
  4. 詳細シートと経路連携(MKMapItem)

Rork Max への最初のプロンプトは、この分解をそのまま伝えるのが効率的です。私は次のような粒度で渡すことを好みます。

現在地周辺の地図を表示する画面を作ってください。
- iOS 17 の SwiftUI Map と MapCameraPosition を使う
- 上部に検索バー、MKLocalSearch でキーワード検索し結果をピン表示
- ピンのタップで下からシートが開き、名前・住所・「経路」ボタンを表示
- 位置情報の許可は地図画面を開いたタイミングで When In Use を要求
- CLLocationManager まわりは ObservableObject に分離

「iOS 17 の API を使う」と明示するのが要点です。指定しないと、古い MKCoordinateRegion ベースの書き方と新しい MapCameraPosition ベースの書き方が混在したコードが返ってくることがあり、後から片方に寄せる修正でクレジットを余分に使いました。

位置情報許可は「求めるタイミング」まで設計する

最初の壁は地図そのものではなく許可ダイアログです。起動直後にいきなり許可を求める実装が生成されがちですが、ユーザーから見ると「なぜ今?」となり、一度拒否されると設定アプリへ誘導する導線が必要になります。地図画面を開いた瞬間に求めるのが、文脈が伝わる最小の設計です。

Info.plist には利用目的の文言が必須です。ここは審査(App Store Review Guideline 5.1.1)で最も差し戻されやすい箇所で、「アプリの機能向上のため」のような汎用文言は通らないことがあります。「周辺のスポットを検索し、現在地からの距離を表示するために位置情報を使用します」のように、機能と結びつけて具体的に書きます。

// LocationManager.swift — 許可状態を UI に流す最小構成
import CoreLocation
import Observation
 
@Observable
final class LocationManager: NSObject, CLLocationManagerDelegate {
    private let manager = CLLocationManager()
    var authorization: CLAuthorizationStatus = .notDetermined
    var lastLocation: CLLocation?
 
    override init() {
        super.init()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyHundredMeters
    }
 
    func requestWhenInUse() {
        // 地図画面の onAppear から呼ぶ。起動直後には呼ばない
        manager.requestWhenInUseAuthorization()
    }
 
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        authorization = manager.authorizationStatus
        if authorization == .authorizedWhenInUse {
            manager.startUpdatingLocation()
        }
    }
 
    func locationManager(_ manager: CLLocationManager,
                         didUpdateLocations locations: [CLLocation]) {
        lastLocation = locations.last
    }
}

拒否された場合の分岐も忘れずに用意します。authorization == .denied のときは地図の代わりに「設定を開く」ボタンつきの案内ビューを出す——この分岐を Rork Max に追加依頼するときは「拒否時のフォールバック UI を足してください」と明示すると、UIApplication.openSettingsURLString を使った導線まで一度で生成されました。

なお、バックグラウンド位置情報(Always 許可)は、この種のアプリでは原則不要です。有効化すると審査で利用理由の説明を求められ、正当化できないとリジェクト対象になります。生成コードに allowsBackgroundLocationUpdates が紛れ込んでいないか、申請前に一度検索しておくと安心です。位置情報が取れないときの切り分けは Rorkで位置情報が取れない時に最初に確認したい5つのポイント にまとまっているので、React Native 側の視点も含めて併読をおすすめします。

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

この記事の続きを読む

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

この記事で得られること
「地図を出すだけ」で止まっていた画面を、周辺検索・詳細シート・経路連携まで動く場所検索フローに仕上げられる
ピン数と機能要件から SwiftUI Map と MKMapView(クラスタリング) の使い分けを判断できるようになる
位置情報の許可文言とタイミングを審査(Guideline 5.1.1)で差し戻されない形に設計できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-07-01
Rork Max のネイティブ Swift で SharePlay を組む — 二人の画面を同じ状態で動かす設計
GroupActivities を使い、FaceTime 越しに二人の画面を同じ状態で動かす SharePlay を Rork Max のネイティブ Swift で組む実装メモです。GroupActivity の宣言、GroupSession への参加、GroupSessionMessenger での状態同期、遅延と競合の扱い、そして React Native 側から橋渡しするときの境界設計まで、実際に詰まった点を添えてまとめます。
アプリ開発2026-07-01
Rork Max のネイティブ Swift で ShazamKit を使い、流れている曲を認識するアプリを作る
SHManagedSession を使って、周囲で流れている曲を認識するアプリを Rork Max のネイティブ Swift で組む実装メモです。旧来の AVAudioEngine 手回しとの違い、idle・prerecording・matching の状態設計、認識精度を上げる prerecording の使いどころ、Expo からの橋渡しの境界設計まで、実際にハマった点を添えてまとめます。
アプリ開発2026-06-28
Rork Max でバーコードとテキストを同時に読むスキャナを VisionKit で実装する
Rork Max のネイティブ Swift アプリに、バーコードとテキストをライブで読み取る画面を VisionKit の DataScanner で実装します。SwiftUI への組み込み、可用性判定、連続検出のスロットリング、実機検証までを実装コード付きで扱います。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →