ChatGPTでバイブコーディングしてみた!!!
はじめに
今回は、ChatGPTを使ってGAS(Google Apps Script)のコードを自動生成(バイブコーディング)してみました!日々の繰り返しタスクを自動化するコードを、AIに生成させる新しい開発体験をご紹介します。
スクリプト紹介
以下のコードをChatGPTに生成させ、1件ずつ処理するように制限をかけたサンプルです。K列に勘定科目、L列にOCRテキスト、M列に処理フラグを扱います。
/**
* Google Apps Script: 領収書OCRテキストから勘定科目を取得し、
* シートに書き込む自動処理(Generative Language API v1beta + Gemini 1.5 Pro)
*
* モデル呼び出し時の JSON ペイロードには `contents` フィールドを使います :contentReference[oaicite:0]{index=0}。
* レスポンスからは最初の候補の content.parts[0].text を抽出します :contentReference[oaicite:1]{index=1}。
*/
// ——— 定数設定 ———
const GEMINI_API_KEY = 'XXXX'; // ご自身の Gemini API キー
const SPREADSHEET_ID = 'YYYY'; // 対象のスプレッドシート ID
const SHEET_NAME = '経費明細'; // 対象シート名
const ERROR_EMAIL = 'your-email@example.com'; // エラー通知先メールアドレス
// ——— モデル名 & エンドポイント ———
const MODEL_NAME = 'gemini-1.5-pro-002';
const ENDPOINT =
'https://generativelanguage.googleapis.com/v1beta/models/'
+ MODEL_NAME
+ ':generateContent?key='
+ encodeURIComponent(GEMINI_API_KEY);
/**
* メイン関数:
* 2行目以降の未処理行を1行だけ処理し、
* K列に勘定科目、M列に「完了」を書き込む
*/
function processReceiptCategory() {
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
if (!sheet) {
throw new Error(`シート「${SHEET_NAME}」が見つかりません。`);
}
// データ取得(1行目はヘッダー)
const values = sheet.getDataRange().getValues();
for (let i = 1; i < values.length; i++) {
const ocrText = values[i][11]; // L列 (0-based index 11)
const doneFlag = values[i][12]; // M列 (0-based index 12)
// OCRテキストあり & 未処理 の行を処理
if (ocrText && !doneFlag) {
try {
// プロンプト作成
const prompt = [
'以下は領収書のOCRテキストです(ノイズが含まれています)。',
ocrText,
'',
'この中から、会計処理に必要な情報のみ抽出して、最も適切な「勘定科目」を1つだけ日本語で出力してください。'
].join('\n');
// リクエストペイロード
const payload = JSON.stringify({
contents: [
{ parts: [ { text: prompt } ] }
]
// generation_config などを追加したい場合はここに
});
const options = {
method: 'post',
contentType: 'application/json',
payload,
muteHttpExceptions: true
};
// API 呼び出し
const response = UrlFetchApp.fetch(ENDPOINT, options);
const code = response.getResponseCode();
const body = response.getContentText();
if (code === 200) {
const json = JSON.parse(body);
// 最初の候補のテキストを抽出
const parts = json.candidates[0].content.parts;
const category = parts.map(p => p.text).join('').trim();
// K列(勘定科目)と M列(処理完了フラグ)に書き込み
sheet.getRange(i + 1, 11).setValue(category); // K列 (1-based)
sheet.getRange(i + 1, 13).setValue('完了'); // M列 (1-based)
} else {
throw new Error(`Gemini API Error (${code}): ${body}`);
}
} catch (e) {
// エラー時はログ & メール通知
Logger.log(e);
MailApp.sendEmail({
to: ERROR_EMAIL,
subject: '【GAS エラー通知】領収書処理エラー',
body: e.toString()
});
}
// 1行だけ処理したら必ずループを抜ける
break;
}
}
}
/**
* デバッグ用: 利用可能なモデル一覧を Logger に出力
*/
function listModels() {
const url = 'https://generativelanguage.googleapis.com/v1beta/models'
+ '?key=' + encodeURIComponent(GEMINI_API_KEY);
const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
Logger.log(res.getContentText());
}
使い方
- スクリプトエディタに上記コードを貼り付け
GEMINI_API_KEY
に自分のAPIキーを設定- SPREADSHEET_IDに自身のスプレッドシートIDを入力
- スクリプトを実行して動作を確認
まとめ
ChatGPTによるバイブコーディングで、GASの開発効率が大幅に向上しました。AIを活用したコード自動生成の可能性をぜひ体験してみてください!
とコードだけ見ればすんなりなのですが・・・
ここまでにかなり試行錯誤を繰り返しました。。。
別途、ChatGPT様との戯れ履歴を開示します!
0 件のコメント:
コメントを投稿