1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AIを用いた爆速コーディング例1(VDM未経験者でも最速でできる)

Last updated at Posted at 2024-10-18

前回の記事
https://qiita.com/Andhy/items/d7af72d2586606fa9468
で触れたVDMとChatGPTを用いたプログラミングの実践編です。VDMやVDMを用いたコーディングの概要については前回の記事を参照してください。

この記事の特徴

  • VDMの文法を一切理解する必要はない
  • VDMのコードは書かず、概念だけを用いる。

今回は、Webショップ「VDMランド」の店長さんの悩みを解決します。
VDMランドでは、ECサイトの使用上商品を一括登録するにはCSVファイルをアップロードするため、商品画像をスプレットシートで管理しています。

VDMランドのスプレットシートの一部。

スクリーンショット 2024-10-18 16.19.24.png

店長へのヒアリングの結果、以下の課題が浮き彫りになりました。

課題

スプレットシートで商品画像の管理をしたいが、商品画像が多すぎて面倒である。
現状スタッフが全て手入力をしている。(これを自動化したい)

仕様

働き

ボタンを押すと商品画像が自動で入力される。

  • 前提条件
    • 商品IDがC列に定義されていること
    • 商品画像のパスは{ドメイン_※1}/{商品ID_※2}/{ファイル名_※3}.jpgであること
    • 商品画像は1000以下であること
  • 事後条件
    • カンマ区切りであること
    • 商品画像のパスは全てにおいて画像が存在すること
    • 商品画像のパスの最後のパスの番号に1を加えたものは画像が存在しないこと
    • 生成された商品画像のパスは、対象商品IDと同じ行であること

処理
 画像パス生成関数でファイル名1の存在をパスが存在するか関数を用いて確認する。存在すればファイル名に+1して再度存在確認、存在がなくなるまで繰り返し、存在がなくなればカンマ区切りにしてD列に出力

定義

ドメイン_※1:店舗ECサイトのドメインである(https://hoge.com)
商品ID_※2:任意の文字列である。C列から取得
ファイル名_※3:自然数の連番であること(途中欠番なし)

関数

画像パス生成関数: 第一引数(ドメイン_※1)、第二引数(商品ID_※2)、第三引数(ファイル名_※2)

パスが存在するか:第一関数(パス)

設計

言語

Apps Script

仕様上の以下の処理単位は全てfunctionで定義すし、具体的な関数名は()内に示す
ボタンを押すと商品画像が自動で入力される。(main)
画像パス生成関数(generateImagePath)
パスが存在するか(isPathExists)

コーディング

ChatGPTに

以下の仕様に基づいて、Google Apps Scriptで商品画像パスを自動入力するプログラムを作成してください。

という文言のあとに上記仕様と設計を放り込みます。

生成されたコード

// メイン関数:ボタンを押したときに実行
function main() {
  var domain = "https://hoge.com";   // ドメイン
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 現在のシート取得
  var lastRow = sheet.getLastRow();  // 最終行を取得(C列の商品IDが定義されている範囲)

  // C列の商品IDを1行目から最終行までループ
  for (var row = 1; row <= lastRow; row++) {
    var productID = sheet.getRange(row, 3).getValue(); // C列(3列目)の商品IDを取得
    if (productID) {
      var imagePaths = []; // 商品画像パスを格納する配列
      var startNumber = 1; // ファイル名の連番(開始は1)

      // 画像パスの存在を確認しながら生成
      while (isPathExists(generateImagePath(domain, productID, startNumber))) {
        imagePaths.push(generateImagePath(domain, productID, startNumber)); // 存在するパスを配列に追加
        startNumber++; // 次の連番に進む
      }

      // 画像パスをカンマ区切りでD列(4列目)に出力
      sheet.getRange(row, 4).setValue(imagePaths.join(","));
    }
  }
}

// 画像パス生成関数
function generateImagePath(domain, productID, fileNumber) {
  return domain + "/" + productID + "/" + fileNumber + ".jpg"; // パスの生成
}

// パスが存在するかを確認する関数
function isPathExists(path) {
  try {
    var response = UrlFetchApp.fetch(path, { muteHttpExceptions: true });
    return response.getResponseCode() === 200; // 200なら存在、その他は存在しない
  } catch (e) {
    return false; // エラーの場合も存在しないとみなす
  }
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?