【chatGPTで作るプログラミング】通勤の平均時間を曜日ごとに計算してくれるGASのコード

雑記

プログラミング初心者がchatGPTを利用して、GASでプログラムを作りました。プログラムの内容は、通勤時間の平均タイムを曜日ごとに出してくれるプログラムです。

はじめに

おはようございます。パッキャオです。

通勤は車を使用していますが、曜日によって道路の渋滞の状況って違いますよね。

ほとんどの方は平日は渋滞で道路が混んでて、土日は空いてることが多いと思います。

僕の場合も土日は空いているので、通勤時間がどれくらいかかるか予測しやすいのですが、平日はどれくらいかかるか実際にGoogleMapなどで検索しないとわからないです。

平日でも道路が空いてる日もあれば、混んでいる日もあり、渋滞なんてその日にならなければわかりません。

5のつく金曜日が渋滞しやすい、とか言われていますが実際に通勤で使っている経路もそうなのでしょうか?

ひょっとして、曜日によって何か法則があるのかもしれません。

ということでプログラミングを使って曜日ごとの自宅から職場までの所要時間を自動で調べられるようにコードを作りました。

自動で曜日ごとに通勤時間をだしてくれるコードとは

前回のブログ記事に引き続き、GAS(Google Apps Script)を利用し、chatGPTにプログラムを書いてもらいました。

ちなみにGASとは、Googleのアプリと連携できるプログラム言語です。

chatGPTは会話ができるAIで、プログラムも教えてもらうことができます。

コードの設定の仕方

とりあえず完成コードを貼り付けます。

function calculateCommuteTimeAndRecord() {
  // 以下の情報を設定してください
  var homeAddress = "YOUR_HOME_ADDRESS"; // 家の住所を入力する
  var workAddress = "YOUR_WORK_ADDRESS"; // 職場の住所を入力する
  var apiKey = "YOUR_GOOGLE_MAPS_API_KEY"; // Maps API Keyを入力する
  var spreadsheetId = "YOUR_SPREADSHEET_ID";// スプレッドシートIDを入力する

  // スプレッドシートを開く
  var sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet();

  // 現在の曜日を取得 (0 = 日曜日, 1 = 月曜日, ..., 6 = 土曜日)
  var currentDayOfWeek = new Date().getDay();

  // 日曜日の場合、新しい週の行にデータを記録
  if (currentDayOfWeek === 0) {
    var currentWeekNumber = sheet.getLastRow();
    var row = currentWeekNumber + 1;
  } else {
    // 日曜日でない場合、前週の行にデータを記録
    var currentWeekNumber = sheet.getLastRow();
    var row = currentWeekNumber;
  }

  // 列を計算 (AからGまで)
  var column = currentDayOfWeek + 1;

  // Directions ServiceのURLを構築
  var directionsURL = "https://maps.googleapis.com/maps/api/directions/json" +
    "?origin=" + encodeURIComponent(homeAddress) +
    "&destination=" + encodeURIComponent(workAddress) +
    "&mode=driving" +
    "&departure_time=now" + // 現在の時間を出発時刻として設定
    "&key=" + apiKey;

  // Directions Serviceにリクエストを送信
  var response = UrlFetchApp.fetch(directionsURL);
  var data = response.getContentText();
  var jsonData = JSON.parse(data);

  // 所要時間を取得
  if (jsonData.status === "OK") {
    var durationInSeconds = jsonData.routes[0].legs[0].duration_in_traffic.value;
    var durationInMinutes = Math.round(durationInSeconds / 60);

    // 所要時間を記録
    sheet.getRange(row, column).setValue(durationInMinutes);

    Logger.log("所要時間を記録しました: " + durationInMinutes + "分");
  } else {
    Logger.log("Directions request failed with status: " + jsonData.status);
  }
}

手順

GASで新しいプロジェクトを作ります。
Apps Script – Google Apps Script

新しいプロジェクトを立ち上げると、コード.gsというファイルと中に

function myFunction() {
  
}

というコードが入力されているので全て削除して、上の完成コードを貼り付けて下さい。

コード内の変数を編集する

コード内にある変数を4つ編集します。

以下の“    ”の中を消して、家の住所、職場の住所、Google Map API、GoogleスプレッドシートIDを入力してください。

下のコードの“    ”の部分です。

わからん!って方は下に続く。

function calculateCommuteTimeAndRecord() {
  // 以下の情報を設定してください
  var homeAddress = "YOUR_HOME_ADDRESS"; // 家の住所を入力する
  var workAddress = "YOUR_WORK_ADDRESS"; // 職場の住所を入力する
  var apiKey = "YOUR_GOOGLE_MAPS_API_KEY"; // Maps API Keyを入力する
  var spreadsheetId = "YOUR_SPREADSHEET_ID"; // スプレッドシートIDを入力する
住所を入力する

家の住所をコード内の「YOUR_HOME_ADDRESS」、職場の住所を「YOUR_WORK_ADDRESS」へ入力してください。

Google Maps APIの取得
Google Cloud Platform
Google Cloud Platform lets you build, deploy, and scale applications, websites, and services on the same infrastructure ...

Google Cloudに移動し、プロジェクトの選択をクリックし、新しいプロジェクトを作成します。

新しいプロジェクトを作成後に下にスクロールするとインタラクティブチュートリアルがあり、その中にGoogle Maps APIの有効化というボタンがあるので、それをクリックしチュートリアルに従ってすすめていくのがいいと思います。

簡単に説明すると

Google Maps APIの取得手順

APIとサービス→ライブラリ→MAPs JavaScript API→有効にする

APIとサービス→認証情報→鍵を表示します

これでMaps API Keyを取得できますので、上のコードに入力してください。

GoogleスプレッドシートIDの取得

スプレッドシートを新規作成してください。

スプレッドシートのIDは、URLの

https://docs.google.com/spreadsheets/d/aaaaaaaaaaaaaaaaaaa/edit#gid=0

上のaaaaaaaaaaaaaaaaaaaの部分がスプレッドシートIDになりますので、上のコードに入力してください。

トリガーを編集する

GASの左側に時計マークのトリガーから設定します。

トリガーの設定

イベントのソースを選択→時間主導型

時間ベースのトリガーのタイプを選択→日付ベースのタイマー

時刻を選択→午前6時~7時

スプレッドシートを編集する

これで毎日午前6-7時に自宅から職場までの所要時間を検索し、スプレッドシートに記入してくれるようになります。

スプレッドシートにはA1からG1まで、日曜から始まり土曜まで入力されます。

セルに何も入力されていない状態で、このプログラムを実行するとエラーになるのでご注意ください。

一行目のA列から日曜、B列は月曜、C列は火曜、、、と入力しA2に0と入力しておけば、そのまま2行目から自動で入力されていくと思います。

そして日曜(A列)になれば改行されます。

スプレッドシートで平均をだすには、関数のAVERAGEで平均が出せます。

H列以降に関数を作ってください。

おわりに

今回は、通勤の平均時間を曜日ごとに計算してくれるGASのプログラムを作ってもらいました。

このプログラムで、数ヶ月間のデータを集め、曜日ごとの道路状況の法則を見つけられたらいいなと思います。

もし通勤時間の予想ができれば、効率的に時間を使うことができますし、遅刻だってなくなるでしょう。

パッキャオ
パッキャオ

最後まで見ていただいてありがとうございました。

コメント