🤖
単語学習爆速化!ChatGPT x Google Apps Script で単語帳を自動生成してみた!
概要
こんなやつを作ります。
課題
「ゲームもした〜い!英語勉強もした〜い!」という強欲の壺なので、
ゲームの設定言語を英語にして進めています。
知らない単語をその都度調べていると、
テンポが悪くゲームへの没入感が激減してしまいました。
そこで今話題のChatGPT先生にお願いして、
記入するだけで日本語・発音記号・分類・例文(英語)・例文(日本語)を
自動生成してもらえるようにしました。
解決方法
フロー
操作
- Google Spreadsheet: 単語を記入する
- Google Spreadsheet: ボタンをクリックする
処理
- Google Apps Script: 翻訳されていない単語を取得しChatGPTに送信する
- ChatGPT: 単語を元に情報を生成する
- Google Apps Script: 翻訳された情報を取得してGoogle Spreadsheetに記入する
コード
const CHATGPT_API_KEY = "{{ APIキー }}";
const CHATGPT_API_URL = "https://api.openai.com/v1/completions";
const sheet = SpreadsheetApp.getActiveSheet();
/**
* 翻訳されていない単語をシートから取得する関数です
* @return {string[]} 翻訳されていない単語の配列
*/
const getNotTranslatedWords = () => {
/** 記入済みの範囲を取得しています */
const range = sheet.getRange(`A2:F${sheet.getLastRow()}`);
/** 記入済みの範囲の情報を取得しています */
const values = range.getValues();
/** 日本語が記入されていない行の単語を配列に格納しています */
const words = [];
values.map((value) => {
if (value[1]) return;
const word = value[0];
words.push(word);
});
return words;
};
/**
* 翻訳された情報をシートへ記入する関数です
* @param {string[]} translatedWords 翻訳された情報の配列(テーブル形式)
*/
const setTranslatedWords = (translatedWords) => {
const lastRow = sheet.getLastRow();
translatedWords.map((translatedWord, index) => {
/** 現在の行を指定しています */
const row = lastRow - (translatedWords.length - (index + 1));
/** テーブル形式の情報を配列に変換しています */
const rowValues = translatedWord.split("|");
/** 不要な情報を削除しています */
rowValues.shift();
/** 不要な情報を削除しています */
rowValues.pop();
/** 日本語の列から日本語例文の列までのシートの範囲を指定しています */
const range = sheet.getRange(`B${row}:F${row}`);
/** 情報をシートへ記入しています */
range.setValues([rowValues]);
});
};
/**
* ChatGPTに翻訳された情報を生成してもらう関数です
* @param {string[]} words 翻訳されていない単語の配列
* @return {JSON} ChatGPTのレスポンス
*/
const fetchChatGPT = (words) => {
/** model にて使用したいモデルを指定しています */
/** prompt にて命令文を英語で指定しています */
/** temperature にて回答の自由度を指定しています */
/** max_tokens にて上限の認識単語数を指定しています */
const modelPayload = {
model: "text-davinci-003",
prompt: `Please provide this word, the Japanese, American style English Pronunciation Symbols, classification, English example sentences, and Japanese example sentences of the following words in table format.
${words.join("\n")}
`,
temperature: 0,
max_tokens: 200,
};
const modelOptions = {
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + CHATGPT_API_KEY,
},
payload: JSON.stringify(modelPayload),
};
const modelResponse = UrlFetchApp.fetch(CHATGPT_API_URL, modelOptions);
return JSON.parse(modelResponse.getContentText());
};
/**
* ボタンをタップした時に開始する関数です
*/
const onClick = () => {
const notTranslatedWords = getNotTranslatedWords();
const result = fetchChatGPT(notTranslatedWords);
const translatedWords = result.choices[0].text.split("\n|");
/** 不要な情報を削除しています */
translatedWords.splice(0, 3);
setTranslatedWords(translatedWords);
};
注意
-
fetchChatGPT
のmax_tokens
は無料使用枠を超過しないように設定しています。
Discussion