[前編] iPhoneショートカット&ChatGPTで天気予報読み上げアプリを作る

[前編] iPhoneショートカット&ChatGPTで天気予報読み上げアプリを作る

ショートカットにハマっていろいろ作ったけど、そのなかでもお気に入りのやつ。ChatGPTに天気予報の情報を渡すと、すごく良い感じに要約してくれるので、それを利用した「あいさつ文」を作ってもらって、返ってきた文章をSiriに読み上げてもらうっていうアプリです。


概要

以下のような文章を作って、ChatGPTに渡します。色が付いているのが実行する日時で変化する部分です。

下記に指示する内容で、挨拶文を300文字程度で作成してください。

●以下に提示する、現在から1時間ごとの気象予測を要約したもの。なお、要約内で降水量と風速の詳細な数値は不要です。

日時, 天気, 気温, 降水確率, 降水量,風速
2025/10/17 7:00, やや曇り, 14°C, 0.06, 0 mm, 3.659 m/s
2025/10/17 8:00, やや曇り, 16°C, 0.03, 0 mm, 3.659 m/s
(略)
2025/10/18 0:00, 曇り時々晴れ, 14°C, 0, 0 mm, 1.303 m/s

●以下のうち、いずれかの話題。
・生活に役立つ豆知識
・意外な雑学
10月17日に関係する話

挨拶文は、「おはようございます。/こんにちは。/こんばんは。」のいずれかに続き「10月17日、金曜日、7時29分です。」からはじまるものとして、読み上げるのに自然な形で出力してください。

天気の情報は25時間ぶん取得できるので、あんまり多くてもアレかなと思って18時間ぶんだけ渡しています。お好きに調整できます。降水量と風速に言及してるのは、m/sとかを読み上げてくれたときに聞き取りづらいと(個人的に)思ったからです。お好みです。

で、ChatGPTから返ってきたものの例が、以下です。

おはようございます。10月17日、金曜日、7時29分です。

朝はやや曇り空で気温14度とひんやりしていますが、日中にかけては快晴となり、22度まで上がる見込みです。穏やかな晴天に包まれ、洗濯物やお出かけにもぴったりの一日となりそうです。

さて、今日は「貯蓄の日」でもあります。1947年に日本銀行が制定したもので、「勤労の収穫を実りあるものにしよう」という願いが込められているそうです。秋は実りの季節ですが、お金や時間も少しずつ貯めておくと、冬を心豊かに過ごせそうですね。今日も気持ちよくスタートしましょう。

ね? けっこう良いですよね???

ショートカットは、上の文章を作って、ChatGPTを立ち上げて、文章を渡して、返ってきた文章を読み上げる、という流れです。

たまに読み上げが多少変なふうになることもありますが、おおむね問題なく読んでくれるので気に入ってるんです。時間帯によって内容が変化して、夜に実行すると、夜から翌朝の天気とともに、「静かな夜を楽しめそうですね」的な、ちょっとイイことを言ってくれたりして。結構良いんですよ!

まずは天気の部分だけ

この記事では前編として、以下の部分だけを生成するショートカットの作り方を解説します。

日時, 天気, 気温, 降水確率, 降水量,風速
2025/10/17 7:00, やや曇り, 14°C, 0.06, 0 mm, 3.659 m/s
2025/10/17 8:00, やや曇り, 16°C, 0.03, 0 mm, 3.659 m/s
(略)
2025/10/18 0:00, 曇り時々晴れ, 14°C, 0, 0 mm, 1.303 m/s

全容

クッソ長いので一度に貼れないのですが、天気の情報を取得&それぞれの要素をリスト(配列)に入れて(Aブロック)、それをループで回してリストから1要素ずつ取り出しつつ、テキストに追記していく(Bブロック)、という流れになっています。

名前はなんでも良いですが、メインから呼び出して使うので、関数らしくgetから始まる命名にしました。

A-1 天気予報取得~日時をリスト化

まずはこの左図のように作ります。使っているアクションが右図。これを検索&配置して、中身を設定します。

1段目、純正天気アプリから情報を取得します。1日ごとだと今日から10日ぶん、1時間ごとだと現在から25時間ぶんの気象情報を取得することができます。

2段目、前段で取得した天気情報は、日付、気温、降水量からUV指数まで、20種類くらいの情報が含まれていて、それぞれ、改行されたテキストで25行(25時間分)の情報になっています。その中から、ここでは「日付」情報を選んで、「テキストを分割」アクションを使って「改行」をキーワードに分割すると、25個の情報を個々に取り出せます。

3段目、前段で分割した25個の要素をリストに格納します。こうしておけば、あとでループで回して上から順番に取得できるようになります。

4段目、前段のリストを「日時s」という変数名で保持しておきます。これで、「日時s」リストには、25個分の日時が順番に格納されていることになります。

なお、2段目で「日付」を選ぶとき、一番下のフォーマットは以下のようにします。「yyyy/mm/nn hh:mm」形式で時間も含めて取得できます。

ここまでできればAブロックはあとは中身を変えて似たようなものを作るだけ!

A-2 天気をリスト化

A-1に続けて配置します。「テキストを分割」アクションを使って、A-1で取得した天気情報の「気象状況」を、「改行」で分割します。

「気象状況」はなぜか2つあって、上の方は天気+気温を合わせて取得、下の方は天気のみ取得です。ここでは下の方を選択しておきます。

あとは同じく、分割した25個の要素をリストに格納して、「天気s」という変数名で保持しておきます。

A-3 気温をリスト化

同じように、「気温」の要素を分割してリストに格納して、「気温s」という変数名で保持しておきます。

A-4 降水確率をリスト化

「降水確率」の要素を分割してリストに格納して、「降水確率s」という変数名で保持しておきます。

A-5 降水量をリスト化

「降水量」の要素を分割してリストに格納して、「降水量s」という変数名で保持しておきます。

デフォルトの単位がmなので、mmにしておいたほうが私はわかりやすいかなぁと思って変えています。(読んで要約するのはChatGPTなのでmでもいけるのだとは思う。)

A-6 風速をリスト化

「風速」の要素を分割してリストに格納して、「風速s」という変数名で保持しておきます。

デフォルトの単位がkm/hなので、m/sにしてありますが読んで要約するのはChatGPTなのでどっちでもいい気はしてます。

ここまでで、日時、天気、気温、降水確率、降水量、風速の情報を各25個ずつリスト化できたことになります。ほかにもいろんな項目あるので(湿度とか気圧とか)、お好きなものをチョイスすると良いと思います。

B-1 繰り返し~日時のn番目を取得

ここから、上で作ったリストから1つずつ取り出していくブロックに入ります。

A-6に続けて、左図のように作ります。使っているアクションが右図。これを検索&配置して、中身を設定します。

1段目、繰り返し(ループ)を配置します。2段目、3段目、あわせてB-2~6までの内容は、一緒に挿入された「繰り返しの終了」との間に配置してください。「繰り返し終了」するのはB-7です。繰り返しの回数は、各リストには25時間ぶんの情報が存在していますが、半日とちょっと先まででいいかなと思ったので、私は18時間ぶん、18回の繰り返しにしています。お好みです。

2段目、繰り返しの中に配置します。「繰り返しインデックス」というのは、「繰り返しのn回目」のことです。ループ内で、1回目の繰り返しではリストの1番目の項目を、2回目の繰り返しではリストの2番目の項目を取り出します、といった意味になります。

3段目、前段で取り出した要素を「日時」という変数に保持しておきます。25個の「日時s」のうち、n番目の項目が変数「日時」に入っているということになります。

B-2 天気のn番目を取得

上に続けて、繰り返しの中に入れます。

「天気s」リストのn番目の項目を、「天気」という変数で保持します。

B-3 気温のn番目を取得

「気温s」リストのn番目の項目を、「気温」という変数で保持します。

B-4 降水確率のn番目を取得

「降水確率s」リストのn番目の項目を、「降水確率」という変数で保持します。

B-5 降水量のn番目を取得

「降水量s」リストのn番目の項目を、「降水量」という変数で保持します。

B-6 風速のn番目を取得

「風速s」リストのn番目の項目を、「風速」という変数で保持します。

B-7 テキストに追記~繰り返し終了

「テキスト」アクションを配置して、先頭に「テキスト」を置いて改行して、その下に変数を並べていくことで、繰り返されるたびに1行ずつ追記されていきます。

変数はカンマで区切りながら並べます。各リストのn番目の項目がそれぞれ出力されるので、同時刻の情報を好きな順番で並べることができます。見た目上は改行されているように見えますが、出力は1行ですべての項目を並べたいので、項目間に改行は入れずに配置してください。

B-8 先頭行に項目名を追記

これで最後です。「繰り返し終了」の下に、「テキスト」アクションで、テキストの先頭行に項目名を追記します。1行目にカンマで区切った項目名、2行目以降に同じ並びで項目の内容が並ぶことになります。

元々のテキストの1行目が空いている状態なので、わかりにくいですがここも改行不要です。(入れると1行空いてしまいます)

動作確認

実行すると一番下にこんな感じで表示されて、作成したテキストの中身を確認できます。

お疲れ様でした!!! クッソ長かったですよね!!! でもこれができればあとはそんなに難しくありません。後編で、これを使ってChatGPTへ渡す/受け取る、読み上げるところを書きます。

公開日:2025/10/28

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。