RORK LABEN
NATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びていますNATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びています
記事一覧/アプリ開発
アプリ開発/2026-06-16中級

Rork Max で WeatherKit を使う天気アプリ — 認証とアトリビューションの落とし穴

Rork Max が生成したネイティブ Swift アプリに WeatherKit を組み込む際、最初に詰まるのは認証とアトリビューションでした。トークンの扱い、レート上限、必須の出典表示まで、実装で確認した手順を整理します。

Rork Max231WeatherKitSwift48iOS109天気アプリ

プレミアム記事

天気アプリは「動くだけ」では公開できません

小さな天気ウィジェットを作ろうとして、Rork Max にネイティブ Swift で生成させたところまでは順調でした。問題は、その後でした。WeatherKit から予報を取得して表示するコードは数十行で書けるのに、App Store の審査で二度はねられたのです。

理由は、コードのバグではありませんでした。Apple が WeatherKit に課している「データの出典表示」と「Apple Weather へのリンク」という規約を満たしていなかったためです。機能としては完成していても、規約を満たさなければ公開できません。個人開発でアプリを出していると、この種の「動くのに公開できない」壁に時々ぶつかります。ここでつまずく方は少なくないと思いますので、認証とアトリビューションを中心に、実装で確認した手順を残しておきます。

Swift API と REST API、どちらを選ぶか

WeatherKit には二つの入口があります。一つはアプリ内から直接呼ぶ Swift の WeatherKit フレームワーク、もう一つはサーバーから叩く REST API です。Rork Max が生成するのはネイティブ Swift アプリですから、基本は前者を使います。

私の判断基準はこうです。予報をその場で表示するだけなら Swift API、複数アプリやバックエンドで天気データを共有・キャッシュするなら REST API、という分け方です。両者は同じ月間クォータ(無料枠は Apple Developer Program の範囲で月50万回)を共有するため、サーバー側で一度取得して配るほうが、呼び出し回数を抑えられる場面があります。私自身は、まず Swift API で素早く出し、共有が必要になった段階で REST へ移すことを推奨します。最初から作り込みすぎないほうが、結果的に手戻りが少ないと感じています。

今回は単一アプリなので Swift API を選びました。最小の取得コードはこうなります。

import WeatherKit
import CoreLocation
 
@MainActor
final class ForecastStore: ObservableObject {
    @Published var current: CurrentWeather?
    @Published var hourly: [HourWeather] = []
 
    private let service = WeatherService.shared
 
    func load(for location: CLLocation) async {
        do {
            let weather = try await service.weather(
                for: location,
                including: .current, .hourly
            )
            self.current = weather.0
            self.hourly = Array(weather.1.forecast.prefix(24))
        } catch {
            print("WeatherKit error: \(error.localizedDescription)")
        }
    }
}

including: に欲しい要素だけを渡すのが要点です。.current.hourly.daily を全部まとめて取ると一回の呼び出しで済みますが、現在の気温しか表示しない画面で日次予報まで取るのは無駄になります。画面ごとに必要な要素だけを指定する習慣をつけると、クォータの消費が目に見えて減ります。

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

この記事の続きを読む

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

この記事で得られること
WeatherKit の Swift API とサーバー REST API の使い分け、そして月50万回の無料枠を超えない設計判断を理解できる
Apple が必須としているアトリビューション(出典)表示を、SwiftUI で正しく実装するコードを習得できる
位置情報の取得から予報の差分更新まで、無駄な API 呼び出しを減らすキャッシュ構成を再現できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-07-03
Rork Max アプリで通信の切断と復帰に強くする — NWPathMonitor によるオフライン検知と再送設計
Rork Max のネイティブ Swift アプリで、電波が切れても壊れない通信設計を NWPathMonitor で組み立てます。オフラインの検知、Low Data Mode やモバイル回線の判定、復帰時の自動再送キューまで、動く Swift コードで示します。
アプリ開発2026-07-03
Rork Max アプリでダウンロードをアプリ終了後も続ける — バックグラウンド URLSession の設計と再起動復帰
Rork Max のネイティブ Swift アプリで、アプリがサスペンド・終了されてもダウンロードを OS 側で継続させるバックグラウンド URLSession の設計を解説します。再起動復帰・resumeData・isDiscretionary の実測挙動まで動くコードで示します。
アプリ開発2026-06-16
初回起動の前に壁紙パックを落としておく — Rork Max と Background Assets の使いどころ
コンテンツの多いアプリは、初回起動時に空のグリッドを見せてしまいがちです。アプリ本体とは別枠でコンテンツを先回りして落とす Background Assets を、Rork(Expo)では届かない領域として Rork Max のネイティブ Swift でどう実装するか、運用判断まで含めてまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →