見出し画像

AI&APIを使って郵便番号から電力エリアを判定するプログラムを作る方法



郵便番号から住所を調べるウェブサービスは、たとえば郵便局などが提供していますが、その郵便番号がどの電力エリアに該当するかが分かるウェブサービスは、郵便局にはありません。

そこで、郵便番号から住所情報を取得できるAPIを使用して、その住所がどの電力エリアに該当するかを判定するプログラムを作成してみましょう。

なお、今回のプログラム作成の手順は、光回線のエリア判定など、他のサービスにも応用できます。
本記事を参考に、是非いろいろなエリア判定プログラムを作成してください。

生成AIプログラミングの教科書

郵便番号APIの選択


まず、「郵便番号API」で検索してみると、郵便番号に基づいた住所情報を返すAPIがいくつか見つかります。

無料のものから有料のものまでありますが、今回は無料の「zipcloud」を利用します。

zipcloudのページにアクセスすると、次のような記載が見つかります。

リクエストURL
ベースとなるURLは以下になります。

https://zipcloud.ibsnet.co.jp/api/search

このURLにリクエストパラメータを加え、リクエストを行います。

https://zipcloud.ibsnet.co.jp/doc/api

つまり、上記URLに郵便番号を送信すると、その番号に対応する住所情報が返ってくる、というわけですね。

電力エリア判定の仕組み


このAPIを利用すると、郵便番号から住所情報を取得することができます。ただし、その住所がどの電力エリアに該当するかといった判定はできません。

ですが、こちらは各市町村がどの電力エリアに該当するかの情報を知っています。

ですから、当方の手持ちの情報と郵便番号検索APIを組み合わせることで、電力エリアを判定するプログラムを作成できるわけです。


とはいえ、普通の人はどういったコードを書けば良いのか、分かりませんよね🙄

・・・大丈夫です、AIに質問すれば、具体的なプログラムコードを提案してくれます。

AIにコード作成を依頼する方法


やるべきことは、作成したいプログラムの詳細な要件と、使用するAPIのURLをAIに伝えることです。

たったそれだけで、実際に使えるプログラムコードをAIが提案してくれます。
(注)もし「私はこのページのURLを読み込めません」と回答された場合には、該当ページの全文をコピーして改めて提示してください

一つだけ注意点として、プログラムの要件が複雑な場合は、まずはその要件を単純化させてからコード作成を依頼するようにしてください。

例えば、今回のアプリケーションの場合、郵便番号から判定する電力エリアが10種類もあるため、その要件を一度に伝えようとすると、指示文がかなり複雑になってしまいます。

そうなると、AIに意図が正しく伝わらない可能性があるため、まずは北海道電力と北陸電力の2つのエリアのみを判定し、それ以外は「その他の電力エリア」とするコードを作成してもらうことにします。

このとき実際にAIに伝えた文章は、以下の通りです(要件の提示の仕方に注目してください)。

下記ページにあるAPIを使用して、フロントエンドで郵便番号を入力し、判定ボタンを押すと、その郵便番号の住所地がどの電力エリアに該当するのかを表示するアプリケーションを作成したいと思います。
https://zipcloud.ibsnet.co.jp/api/search

郵便番号の住所地が北海道に該当する場合は「お住いの住所地は「北海道電力エリア」に該当します」と表示し、郵便番号の住所地が富山県と石川県と福井県のいずれかに該当する場合は「お住いの住所地は「北陸電力エリア」に該当します」と表示するようにします。

ただし、福井県の場合、市町村が「大飯郡おおい町」と「三方上中郡若狭町」と「三方郡美浜町」と「小浜市」と「大飯郡高浜町」のいずれかに該当する場合には、北陸電力エリアではなく「お住いの住所地は「関西電力エリア」に該当します」と表示する必要があります。

そして上記以外の住所地の場合は、「お住いの住所地は「その他の電力エリア」に該当します」と表示するようにします。

この要件を叶えるために必要なコードを提示してもらえますか?

この指示文に対して、AIからは以下の回答がありました。

この要件を満たすフロントエンドアプリケーションのサンプルコードを以下に提示します。
郵便番号を入力して「判定ボタン」を押すと、APIを利用して住所地を取得し、条件に従って電力エリアを判定・表示する機能を実装しています。


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>郵便番号から電力エリア判定</title>
  <script>
    async function checkArea() {
      const zipcode = document.getElementById("zipcode").value;
      const resultDiv = document.getElementById("result");

      // 郵便番号が正しいかチェック
      if (!zipcode.match(/^\d{3}-?\d{4}$/)) {
        resultDiv.innerText = "正しい郵便番号を入力してください。";
        return;
      }

      try {
        // APIリクエスト
        const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${zipcode}`);
        const data = await response.json();

        if (data.results) {
          const address = data.results[0].address1 + data.results[0].address2 + data.results[0].address3;
          const prefecture = data.results[0].address1;
          const city = data.results[0].address2;
          let message = '';

          // 北海道エリアの判定
          if (prefecture === "北海道") {
            message = "お住いの住所地は「北海道電力エリア」に該当します。";
          } 
          // 北陸電力エリアの判定(富山県、石川県、福井県)
          else if (["富山県", "石川県", "福井県"].includes(prefecture)) {
            // 福井県内の特定地域を関西電力エリアにする
            if (
              prefecture === "福井県" &&
              ["大飯郡おおい町", "三方上中郡若狭町", "三方郡美浜町", "小浜市", "大飯郡高浜町"].includes(city)
            ) {
              message = "お住いの住所地は「関西電力エリア」に該当します。";
            } else {
              message = "お住いの住所地は「北陸電力エリア」に該当します。";
            }
          } 
          // その他のエリア
          else {
            message = "お住いの住所地は「その他の電力エリア」に該当します。";
          }

          resultDiv.innerText = message;
        } else {
          resultDiv.innerText = "郵便番号に該当する住所が見つかりませんでした。";
        }
      } catch (error) {
        resultDiv.innerText = "エリア判定中にエラーが発生しました。";
      }
    }
  </script>
</head>
<body>
  <h1>郵便番号から電力エリア判定</h1>
  <div>
    <label for="zipcode">郵便番号を入力してください(例: 100-0001):</label>
    <input type="text" id="zipcode" placeholder="郵便番号">
    <button onclick="checkArea()">判定</button>
  </div>
  <div id="result" style="margin-top: 20px;"></div>
</body>
</html>

説明:
1.ユーザーが郵便番号を入力し、ボタンを押すと、zipcloudのAPIにリクエストを送信します。
2.APIの結果を元に、住所の都道府県(address1)と市町村(address2)を判定し、それに基づいて電力エリアを表示します。
3.条件に応じて、北海道、北陸電力エリア、関西電力エリア、その他のエリアに分けて表示します。

郵便番号を「000-0000」の形式で入力すると、APIが住所情報を返し、それに基づいてエリアが決定されます。この仕組みを使用して要件通りに動作するはずです。

AIから提案されたプログラムコードを試してみたところ、期待通り機能することを確認できました。
ですから、あとは残り8つの電力エリアの条件を追加していくだけです。

例えば、東北電力エリアの判定条件を追加するためには

住所地の情報が「青森県、岩手県、秋田県、山形県、宮城県、 福島県、新潟県」いずれかの場合には「お住いの住所地は「東北電力エリア」に該当します」と表示するようにしたいと思います。
その場合、先ほどのコードをどのように修正すれば良いでしょうか?

上記のように質問すれば、修正コードを提示してくれますし、

東京電力エリアの判定条件を追加するなら、下記のように質問することで、改めて完全な修正コードを提示してくれます。

郵便番号の住所地が東京都、神奈川県、埼玉県、千葉県、栃木県、群馬県、茨城県、山梨県、静岡県のいずれかに該当する場合は「お住いの住所地は「東京電力エリア」に該当します」と表示するようにします。

なお、静岡県の場合、市町村が「沼津市、熱海市、三島市、伊東市、富士市、富士宮市、御殿場市、下田市、裾野市、伊豆市、伊豆の国市、賀茂郡、田方郡、駿東郡」のいずれかに該当する場合に「お住いの住所地は「東京電力エリア」に該当します」と表示します。

ただし、富士市のうち「木島、北松野、中之郷、中野台、南松野」のいずれかに該当する場合と、富士宮市のうち「内房」に該当する場合は「お住いの住所地は「中部電力エリア」に該当します」と表示する必要があります。

そして上記以外の静岡県内の市町村については、すべて「お住いの住所地は「中部電力エリア」に該当します」と表示する必要があります。

これらの要件を追加する場合、先ほどのコードをどのように修正すれば良いでしょうか?省略部分のない完全な修正コードを提示してもらえますか?

そうやって、AIに丸投げして作成した電力エリア判定プログラムがこちらです↓↓↓

ここから先は

23,403字 / 3画像

¥ 3,000

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

この記事が気に入ったらチップで応援してみませんか?