WeatherKitで天気情報を取得してみて分かったこと

トラブルシューティング

Core MLとVisionでの画像認識がひと段落し、次はアプリ内にちょっとした天気表示を加えたいと考え、AppleのWeatherKitに挑戦しました。

1. 無条件で無料で使えると思っていた

最初、WeatherKitはApple製のフレームワークなので、外部APIのように利用登録や上限を気にせず自由に使えるものだと思い込んでいました。

実際の仕組み:
Apple Developer Programでの機能有効化+月間リクエスト数の上限あり

実際にはApple Developerアカウント側でWeatherKitの利用を有効化し、Capabilityに追加する設定が必要で、無料枠にも月間のリクエスト数上限が設定されていることが分かりました。「Apple純正だから無条件」という思い込みは誤りでした。

2. 位置情報の許可とセットで考えていなかった

WeatherKitの実装だけに集中してコードを書き進めていたところ、動作確認の段階で天気情報がまったく取得できない状態に陥りました。

let weather = try await WeatherService.shared.weather(for: location)

天気情報の取得には緯度経度(CLLocation)が必要で、当然ながらCore Locationでの位置情報取得とセットで実装する必要がありました。WeatherKit単体の実装に気を取られ、位置情報の許可フローを後回しにしていたため、二度手間になってしまいました。

3. 取得できるデータの粒度を誤解していた

現在の天気だけでなく、時間ごとの予報や週間予報まで、必要なデータはすべて1回のリクエストでまとめて取得できるものだと思い込んでいました。

実際の取得方法:
currentWeather、hourlyForecast、dailyForecastを個別に指定して取得

実際にはweather(for:including:)のように、取得したいデータの種類を明示的に指定する必要があり、何も指定しなければ必要な情報が欠けたレスポンスになってしまいます。用途に応じて必要なデータの種類を最初に整理しておく必要があると気づきました。

4. シミュレータでの動作確認で位置がずれて戸惑った

シミュレータでWeatherKitの動作確認をしていたところ、明らかに現在地と異なる場所の天気が表示され、実装が間違っているのかと焦りました。

原因:
シミュレータのデフォルト位置情報が実際の所在地と異なっていた

調べてみると、シミュレータの位置情報設定がデフォルトのまま(サンフランシスコ等)になっていたことが原因で、WeatherKit自体の実装に問題はありませんでした。位置情報を使う機能の動作確認時は、シミュレータの位置設定を意図した場所に変更してから確認する習慣が必要だと学びました。

まとめ

  • WeatherKitはApple製でも無条件で使えるわけではなく、Developer側での機能有効化とリクエスト上限がある
  • 天気情報の取得にはCore Locationでの位置情報取得が前提になる。セットで実装計画を立てる
  • 取得したいデータの種類(現在・時間別・週間)は明示的に指定する必要がある
  • シミュレータでの動作確認時は、位置情報の設定を意図した場所に変更してから確認する

Apple純正フレームワークだからと油断せず、事前準備を含めて実装計画を立てることの大切さを実感した機能でした。

次は、Core Hapticsで触覚フィードバックを実装してみて分かったことをまとめます。


本記事は生成AI(Claude)を活用して執筆・編集しています。内容は実体験に基づき、執筆者本人が確認・監修しています。

コメント

タイトルとURLをコピーしました