【生成AI×GAS】全組み合わせのリストを作る
オレンジピーチのトシです。
今回は、前回作成した方針に沿って、GAS(Google Apps Script)の作成を進めて行きます。
(前回の記事はこちら)
全組み合わせのリストを作る
今回の完成イメージ:やりたいこと
それぞれの要素について、全組み合わせのパターンを書き出すGASを作成します。
例としては、「大きさ」と「品質」の組み合わせがあります。
大きさの水準として、「大玉・中玉・小玉」の3種類がありますが、それぞれの水準に対して、「品質」の「優・良」の水準があるため、組み合わせは6種類になります。
完成イメージの解像度を上げる。(やりたいことを明確にする)
生成AIへのプロンプトを考えるにあたり、完成イメージの解像度を上げていきます。
まず、スプレッドシートに、組み合わせる要素を書き出していきます。
次に、それぞれの要素に対して、選択可能な水準を書き加えていきます。
いくつの組み合わせを行うかは、作りたいものに一覧表によってまちまちなので、データの範囲は動的に変化出来るようにします。
つまり、A1セルを起点にして、列方向に最終列まで要素があり、それぞれの要素に対して、行方向の最下段まで水準が記載されています。それぞれ1行目は、要素名なので、組み合わせには使用しません。
シートの名前は「全組み合わせマスタ」とします。
これらの項目すべての可能な組み合わせを生成します。
生成した組み合わせ結果を「全組み合わせ結果」という名前の新しいシートに出力します。このシートが存在しない場合は作成し、存在する場合は旧データをクリアして上書きします。
「全組み合わせ結果」のシートの1行目は、要素名を含むヘッダー行として、ヘッダー行の背景色を薄い水色「#C9DAF8」に設定します。
なるべく具体的に、できればGASのスクリプトをイメージしながら、やりたいことを書き出していきます。
生成AIへの指示文(プロンプト)を考える
いよいよプロンプトを考えます。
初めから完成を目指すのではなく、大きなポイントから指示を出していき、生成AIとの対話を通じて、GASを完成させていくつもりで考えるのが良いと思います。
生成AIに指示を出す
生成AIに指示を出します。
今回は、生成AIとして、Microsoft Copilot を使用しました。
指示の出し方は、上で作成したプロンプトを貼り付けるだけです。
生成AIからの返事が届く
指示文を出すと、すぐに回答が返ってきました。
コードの部分は、こんな感じです。
各ステップにコメントも記載されています。
function generateCombinations() {
// アクティブなスプレッドシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var inputSheet = spreadsheet.getSheetByName("全組み合わせマスタ");
var lastColumn = inputSheet.getLastColumn();
var combinations = [];
// 各カテゴリーの選択項目を取得
var categories = [];
var headers = [];
for (var col = 1; col <= lastColumn; col++) {
headers.push(inputSheet.getRange(1, col).getValue());
var lastRow = inputSheet.getRange(2, col, inputSheet.getMaxRows()).getValues().filter(String).length + 1;
var range = inputSheet.getRange(2, col, lastRow - 1);
categories.push(range.getValues().flat());
}
// 組み合わせを生成
function combine(arr) {
if (arr.length === 0) {
return [[]];
}
var result = [];
var rest = combine(arr.slice(1));
for (var i = 0; i < arr[0].length; i++) {
for (var j = 0; j < rest.length; j++) {
result.push([arr[0][i]].concat(rest[j]));
}
}
return result;
}
combinations = combine(categories);
// 全組み合わせ結果を出力
var outputSheet = spreadsheet.getSheetByName("全組み合わせ結果");
if (!outputSheet) {
outputSheet = spreadsheet.insertSheet("全組み合わせ結果");
} else {
outputSheet.clear();
}
// ヘッダー行を追加
var headerRow = headers;
outputSheet.getRange(1, 1, 1, headerRow.length).setValues([headerRow]);
outputSheet.getRange(1, 1, 1, headerRow.length).setBackground("#C9DAF8");
// 組み合わせを出力
var outputRange = outputSheet.getRange(2, 1, combinations.length, combinations[0].length);
outputRange.setValues(combinations);
}
ざっと内容を見て、分からない箇所があれば、問い合わせを行いましょう。
例えば、「各カテゴリーの選択項目を取得」のところで、次のような質問を行ってみます。
すると、生成AIが詳しく説明してくれます。
(実際には、もっと長い解説を行ってくれています。)
コードが「アロー関数」という書き方をしているため、難しく見えますが、処理している内容はfor文であることが分かります。
内容が理解出来たら、早速GASの作成に進みます。
GASを作成する
ここでも行うことは、生成AIが作成したコードを、GASのエディタに貼り付けるだけです。
GASが実行されると、一覧表が作成される
作成したGASをはじめて実行する際には、ドライブへのアクセス権限などの承認が必要です。(詳しく知りたい人は、下部に詳しい記事へのリンクを貼っています)
GASを実行すると、問題なく一覧表が作成できました!
まとめ
今回は、それぞれの要素について、全組み合わせのパターンを書き出すGASを作成する方法を紹介しました。
複雑な内容と思われるGASも、やりたいことを言語化して、徐々に分解するとともに、指示イメージの解像度をあげることで、生成AIへの指示文(プロンプト)を作成することが出来ました。
また、指示イメージを具体化することに難しさを感じた人は、ぜひ、プロンプトの最後に、「GAS作成に不足している情報や不明な点があれば、質問してください。」の一文を足してみて下さい。
指示に不足があれば、生成AIから質問が返ってくるので、それに答えることで自然と指示の内容が補足されていきます。
次回は、要素によって組み合わせの水準が変わるような場合にも対応出来るGASを作成していきたいと思います。
今回は以上です。最後まで読んで頂き、ありがとうございました。
記事の内容が参考になった方は、「スキ」して頂けると励みになります。