【GAS&ChatGPT】GASとAI連携で実現する最強の業務効率化スプレッドシート入門

「GASとChatGPTを連携させることで、スプレッドシートの可能性は無限に広がります。本記事では、Google Apps ScriptとOpenAIのAPIを組み合わせた実践的な開発手法から、AIを活用したデータ処理の自動化まで、ビジネスパーソン向けに分かりやすく解説。業務効率を劇的に向上させるテクニックを習得しましょう。」

目次を読み込み中…

AIと表計算の融合がもたらす業務革新

現代のビジネス環境において、データ処理と分析は意思決定の核心となっています。しかし、日々増加するデータ量と処理の複雑さは、多くの企業にとって大きな負担となっています。この課題に対する革新的な解決策として注目されているのが、Google Apps Script (GAS)とOpenAIのChatGPTを組み合わせたスプレッドシートの活用です。この組み合わせにより、従来は手作業で行っていた多くのタスクを自動化し、より高度な分析や意思決定をサポートすることが可能になります。

特に注目すべきは、AIと表計算ソフトの融合がもたらす業務プロセスの変革です。例えば、大量のテキストデータの要約、感情分析、データのカテゴリ分類などが、従来のスプレッドシート機能だけでは困難であった作業も、AIの力を借りることで簡単に実現できるようになりました。また、定型業務の自動化だけでなく、データから新たな洞察を引き出す能力も格段に向上します。

企業がこの技術を導入することで得られるメリットは計り知れません。例えば、マーケティング部門ではSNSのコメント分析や顧客フィードバックの自動分類が可能になり、カスタマーサポート部門では問い合わせの自動振り分けや回答候補の生成が実現します。さらに、人事部門では履歴書のスクリーニングや社内ドキュメントの整理・検索効率化など、多岐にわたる業務改善が期待できます。

本記事では、これらの革新的な技術を実際のビジネスシーンで活用するための具体的な方法について解説します。GASとOpenAIの基本概念からセットアップ方法、実用的なサンプルコードまで、段階的に学ぶことで、読者の皆様も自社の業務効率化に役立てることができるでしょう。

GASとChatGPTの基本概念

Google Apps Script (GAS)とChatGPTは、それぞれ独自の強みを持つ技術ですが、これらを組み合わせることで強力な業務効率化ツールとなります。まずは、これらの基本概念について理解しましょう。

GASとは、GoogleのサービスであるGoogleスプレッドシート、Googleドキュメント、Gmailなどを自動化するためのJavaScriptベースのスクリプト言語です。Googleのクラウドサーバー上で動作するため、ユーザーはプログラムの実行環境を構築する必要がなく、手軽にスクリプトを作成・実行できる点が大きな特徴です。特にスプレッドシートと組み合わせることで、データの収集、処理、分析、可視化といった一連の作業を自動化することができます。

一方、ChatGPTは、OpenAIが開発した大規模言語モデルであり、テキスト生成、要約、翻訳、質問応答など、自然言語処理に関する様々なタスクを高いレベルで実行できます。APIを通じて利用することで、自社のアプリケーションやシステムに自然言語処理機能を簡単に組み込むことができます。

これらを連携させることにより、スプレッドシートに蓄積されたデータをAIに送信し、その分析結果や生成されたテキストを再びスプレッドシートに取り込むといった処理が可能になります。例えば、顧客からのフィードバックコメントが入力された列を自動的に分析し、その感情(ポジティブ/ネガティブ)や重要度を別の列に自動入力するといった使い方ができます。

重要なのは、これらの技術は特別な専門知識がなくても基本的な利用が可能である点です。GASのコードエディタはブラウザ上で動作し、JavaScriptの基本構文と少しのGoogle固有の関数を学ぶだけで開発を始められます。同様に、OpenAIのAPIも、シンプルなHTTPリクエストを送信するだけで利用できるため、プログラミング初心者でも挑戦しやすい技術と言えるでしょう。

開発環境のセットアップと初期設定

GASとOpenAIを連携させるための開発環境を整え、初期設定を行うことが第一歩となります。この段階でしっかりとした基盤を作ることで、後の開発作業がスムーズに進みます。まずは、必要なアカウントの準備から始めましょう。

GASを利用するためには、Googleアカウントが必要です。既にお持ちの方は問題ありませんが、業務目的であれば、個人アカウントではなく、Google Workspaceなどの業務用アカウントを利用することをお勧めします。次に、OpenAIのAPIを利用するためのアカウントを作成し、APIキーを取得します。OpenAIのウェブサイトから登録を行い、ダッシュボードからAPIキーを発行しましょう。なお、OpenAIのAPIは従量課金制ですので、利用状況に応じて費用が発生することに注意してください。

環境が整ったら、GoogleスプレッドシートでGASのプロジェクトを作成します。新しいスプレッドシートを開き、「拡張機能」メニューから「Apps Script」を選択すると、GASのエディタが開きます。ここで新しいプロジェクトが自動的に作成されます。プロジェクト名は分かりやすいものに変更しておくと良いでしょう。

次に、OpenAIのAPIを呼び出すための基本的なコードを記述します。以下は、ChatGPTのAPIを呼び出すための簡単な関数の例です。

js
function callChatGPT(prompt) {
  const apiKey = 'YOUR_API_KEY'; // APIキーを設定
  const apiUrl = 'https://api.openai.com/v1/chat/completions';
  
  const payload = {
    model: "gpt-4", // 利用するモデルを指定
    messages: [{role: "user", content: prompt}],
    temperature: 0.7
  };
  
  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + apiKey
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };
  
  const response = UrlFetchApp.fetch(apiUrl, options);
  const responseData = JSON.parse(response.getContentText());
  
  return responseData.choices[0].message.content;
}

この関数を保存し、APIキーを自分のものに置き換えてください。セキュリティの観点から、APIキーは直接コードに記述するのではなく、スクリプトプロパティなどを使って安全に管理することをお勧めします。

また、初期設定の段階で、必要な権限の設定も行っておきましょう。GASからインターネット上のAPIを呼び出すには、適切な権限が必要です。初回実行時に権限の承認ダイアログが表示されますので、必要な権限を許可してください。

これで、基本的な開発環境のセットアップと初期設定は完了です。次のステップでは、この環境を活用してAIとスプレッドシートを連携させる具体的な方法について解説します。

プロンプトエンジニアリングの基礎

プロンプトエンジニアリングとは、AIモデル(この場合はChatGPT)に対して効果的な指示を出すための技術です。適切なプロンプト(指示文)を設計することで、AIからより精度の高い、目的に合った回答を得ることができます。GASとOpenAIを連携させる際にも、このプロンプトエンジニアリングの知識は非常に重要になります。

まず、プロンプトの基本構造について理解しましょう。効果的なプロンプトには通常、(1)タスクの明確な説明、(2)必要な出力形式の指定、(3)関連する背景情報や例示、という3つの要素が含まれます。例えば、顧客レビューの感情分析を行う場合、「以下の顧客レビューがポジティブかネガティブかを分析し、『ポジティブ』または『ネガティブ』の一語で回答してください」というように、具体的な指示を与えることが大切です。

スプレッドシートとの連携では、データの形式や構造に合わせたプロンプトの設計が重要になります。たとえば、セル内のデータを活用する場合、「次のテキストを要約してください:${cellContent}」のように、変数を活用してプロンプトを動的に生成するとよいでしょう。GASでは、以下のようにスプレッドシートの値を取得してプロンプトに組み込むことができます。

js
function analyzeReviewSentiment(row) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const review = sheet.getRange(row, 2).getValue(); // B列からレビューテキストを取得
  
  const prompt = `以下の顧客レビューの感情を分析し、「ポジティブ」「ネガティブ」「中立」のいずれかで回答してください。\n\nレビュー: "${review}"`;
  
  const sentiment = callChatGPT(prompt); // 先ほど作成した関数を呼び出し
  sheet.getRange(row, 3).setValue(sentiment); // C列に結果を書き込み
}

また、より複雑なタスクでは、「ワン・ショット」や「フュー・ショット」と呼ばれる手法が効果的です。これは、プロンプト内に具体的な例を1つまたは複数含めることで、AIに期待する回答のパターンを示す方法です。例えば、テキストの分類タスクにおいて、「ビジネスメール」「個人的な連絡」「広告」などのカテゴリに分類する際に、各カテゴリの例を提示することで、より正確な分類結果を得ることができます。

さらに、出力形式を明確に指定することも重要です。特にスプレッドシートに結果を取り込む場合、JSONやCSV形式など、構造化されたデータとして出力するよう指示することで、後処理が容易になります。例えば、「分析結果をJSON形式で出力してください」という指示を加えることで、GASでの解析処理が簡略化されます。

プロンプトエンジニアリングは試行錯誤の過程でもあります。最初から完璧なプロンプトを作ることは難しいため、異なるプロンプトの結果を比較し、徐々に改善していくアプローチが有効です。

スプレッドシートでのデータ整形と変換

GASとOpenAIを組み合わせた自動化システムにおいて、データの整形と変換は非常に重要なプロセスです。スプレッドシートに保存されたデータはそのままではAIにとって最適な形式でない場合が多く、前処理と後処理が必要になります。ここでは、効率的なデータ整形と変換の方法について解説します。

まず、AIに送信する前のデータ前処理について考えましょう。スプレッドシートから読み取ったデータは、不要な空白、特殊文字、書式などを含んでいる場合があります。これらを適切に処理することで、AIの精度を向上させることができます。以下に、基本的なデータクリーニングの例を示します。

js
function cleanData(text) {
  if (!text) return "";
  
  // 余分な空白の削除
  text = text.trim().replace(/\s+/g, ' ');
  
  // HTML特殊文字の置換
  text = text.replace(/ /g, ' ')
             .replace(/&/g, '&')
             .replace(/&lt;/g, '<')
             .replace(/&gt;/g, '>');
  
  return text;
}

また、大量のデータを処理する場合、APIの利用コストや実行時間を考慮する必要があります。そのためには、必要なデータのみを抽出して送信するフィルタリング処理も重要です。例えば、特定の条件に合致する行だけを処理対象とする、あるいは長文テキストを適切に要約してからAIに送信するなどの工夫が考えられます。

次に、AIからの応答データの変換について考えます。ChatGPTは基本的にテキスト応答を返しますが、これをスプレッドシートの構造に合わせて整形する必要があります。特に、複数の情報を含む応答や構造化された応答を処理する場合は、適切なパースが必要です。以下は、JSONフォーマットで返される応答を処理する例です。

js
function parseAIResponse(response) {
  try {
    // JSON形式の応答をパース
    const data = JSON.parse(response);
    return data;
  } catch (e) {
    // JSON形式でない場合は単純なテキストとして処理
    Logger.log('応答をJSONとしてパースできませんでした: ' + e);
    return { text: response };
  }
}

データの整形と変換においては、エラー処理も重要な要素です。APIの呼び出しに失敗した場合や、予期しない形式の応答が返された場合など、様々な例外状況に対応できるよう、堅牢なコードを心がけましょう。try-catchブロックを適切に使用し、エラーログを記録することで、問題発生時の原因特定と修正が容易になります。

最後に、処理結果をスプレッドシート上で視覚的に区別しやすくするために、条件付き書式の設定も検討してください。例えば、感情分析の結果に応じてセルの背景色を変更する、重要度に応じてフォントを変えるなど、視覚的な工夫により情報の把握が容易になります。

AI処理結果の可視化とレポート作成

AIによる処理結果を効果的に活用するためには、適切な可視化とレポート作成が不可欠です。スプレッドシートの強力な可視化機能とGASのプログラミング機能を組み合わせることで、動的かつインタラクティブなレポートを作成できます。ここでは、AI処理結果を効果的に表現するための方法について解説します。

まず、基本的なグラフとチャートの活用について考えましょう。例えば、ChatGPTによる感情分析の結果を集計し、円グラフや棒グラフとして表示することで、全体の傾向を一目で把握できます。GASを使用すると、これらのグラフを自動的に生成することも可能です。以下に、感情分析結果の棒グラフを作成するコード例を示します。

js
function createSentimentChart() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getRange("C2:C100"); // 感情分析結果の範囲
  
  // 各カテゴリの数をカウント
  const values = dataRange.getValues();
  const counts = { 'ポジティブ': 0, 'ネガティブ': 0, '中立': 0 };
  
  values.forEach(row => {
    const sentiment = row[0];
    if (sentiment in counts) {
      counts[sentiment]++;
    }
  });
  
  // グラフ用のデータ範囲を作成
  const chartDataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ChartData") || 
                          SpreadsheetApp.getActiveSpreadsheet().insertSheet("ChartData");
  chartDataSheet.getRange("A1").setValue("感情");
  chartDataSheet.getRange("B1").setValue("件数");
  
  let row = 2;
  for (const sentiment in counts) {
    chartDataSheet.getRange(row, 1).setValue(sentiment);
    chartDataSheet.getRange(row, 2).setValue(counts[sentiment]);
    row++;
  }
  
  // グラフを作成
  const chartBuilder = sheet.newChart()
    .setChartType(Charts.ChartType.COLUMN)
    .addRange(chartDataSheet.getRange("A1:B" + (row - 1)))
    .setPosition(5, 5, 0, 0)
    .setOption('title', '感情分析結果')
    .setOption('legend', {position: 'none'});
  
  sheet.insertChart(chartBuilder.build());
}

また、時系列データの分析結果を可視化する場合は、折れ線グラフや時系列ヒートマップなどを活用することで、トレンドや季節変動を明確に表現できます。例えば、顧客フィードバックの感情スコアを日付ごとにプロットすることで、特定のイベントや施策の影響を視覚的に評価できます。

さらに、高度な分析結果を表現するために、ピボットテーブルを活用することも有効です。GASを使って動的にピボットテーブルを作成し、多角的な分析視点を提供することができます。例えば、製品カテゴリと感情分析結果をクロス集計することで、どの製品カテゴリがどのような評価を受けているかを把握できます。

定期的なレポート作成を自動化する場合は、時間ベースのトリガーを設定しましょう。GASのトリガー機能を使用すると、毎日、毎週、毎月など、指定した間隔でスクリプトを自動実行し、最新データに基づいたレポートを生成できます。これにより、常に最新の分析結果を関係者に提供することが可能になります。

js
function setupDailyReportTrigger() {
  // 既存のトリガーをすべて削除
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => ScriptApp.deleteTrigger(trigger));
  
  // 毎日午前9時に実行するトリガーを設定
  ScriptApp.newTrigger('generateDailyReport')
    .timeBased()
    .atHour(9)
    .everyDays(1)
    .create();
}

最後に、レポートの共有と配信方法も考慮しましょう。GASを使用して、分析結果をPDFやCSVとしてエクスポートし、指定メールアドレスに自動送信することができます。また、GoogleドライブやSlackなどの外部サービスと連携することで、より柔軟な配信方法を実現できます。

実用的なサンプルコードと応用例

ここでは、GASとOpenAIを連携させた実用的なサンプルコードと、ビジネスシーンにおける具体的な応用例を紹介します。これらの例を参考に、自社の業務に合わせたカスタマイズを行うことで、効率的な業務改善が期待できます。

まず、顧客フィードバックの自動分類と要約を行うサンプルコードを見てみましょう。これは、顧客からのコメントを含むスプレッドシートに対して、各コメントのカテゴリ分類と要約を自動で行うものです。

js
function processFeedback() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  
  // ヘッダー行を除いて処理
  for (let row = 2; row <= lastRow; row++) {
    // すでに処理済みの行はスキップ
    if (sheet.getRange(row, 4).getValue() !== '') continue;
    
    const feedback = sheet.getRange(row, 2).getValue();
    if (!feedback) continue;
    
    const prompt = `以下の顧客フィードバックを分析し、JSONフォーマットで以下の情報を返してください:
    1. カテゴリ:「製品品質」「価格」「サービス」「使いやすさ」「その他」のいずれか
    2. 感情:「ポジティブ」「ネガティブ」「中立」のいずれか
    3. 重要ポイント:フィードバックの最も重要なポイントを短く要約(30字以内)
    
    フィードバック: "${feedback}"
    
    回答形式:
    {
      "category": "カテゴリ",
      "sentiment": "感情",
      "keyPoint": "重要ポイント"
    }`;
    
    try {
      const response = callChatGPT(prompt);
      const result = JSON.parse(response);
      
      // 結果をシートに書き込み
      sheet.getRange(row, 3).setValue(result.category);
      sheet.getRange(row, 4).setValue(result.sentiment);
      sheet.getRange(row, 5).setValue(result.keyPoint);
      
      // APIの利用制限を考慮して少し待機
      Utilities.sleep(200);
    } catch (e) {
      Logger.log(`Error processing row ${row}: ${e}`);
      sheet.getRange(row, 3).setValue("エラー");
    }
  }
}

次に、営業レポートの自動生成例です。週次や月次の売上データを分析し、重要なポイントを自動的にまとめたレポートを作成します。

js
function generateSalesReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("SalesData");
  const reportSheet = ss.getSheetByName("Report") || ss.insertSheet("Report");
  
  // 売上データを取得
  const salesData = dataSheet.getDataRange().getValues();
  const headers = salesData.shift(); // ヘッダー行を除外
  
  // 売上データをテキスト形式に変換
  let salesDataText = "期間,製品,地域,売上額\n";
  salesData.forEach(row => {
    salesDataText += `${row[0]},${row[1]},${row[2]},${row[3]}\n`;
  });
  
  const prompt = `以下の売上データを分析し、今月の売上レポートを作成してください。
  以下の項目を含めてください:
  1. 全体的な売上の概要(前月比も含む)
  2. 最も売上が好調な製品と地域
  3. 注意が必要な下降トレンドがある製品や地域
  4. 来月に向けた推奨アクション
  
  売上データ:
  ${salesDataText}`;
  
  const reportText = callChatGPT(prompt);
  
  // レポートをシートに書き込み
  reportSheet.clear();
  reportSheet.getRange(1, 1).setValue("売上レポート");
  reportSheet.getRange(1, 1).setFontWeight("bold").setFontSize(14);
  reportSheet.getRange(3, 1).setValue(reportText);
  
  // 体裁を整える
  reportSheet.autoResizeColumn(1);
}

さらに、マーケティングキャンペーンのアイデア生成ツールも便利です。製品情報とターゲット顧客の特性を入力することで、AIがキャンペーンアイデアを提案します。

js
function generateCampaignIdeas() {
  const ui = SpreadsheetApp.getUi();
  
  // 製品情報と顧客特性の入力を取得
  const productResponse = ui.prompt("製品情報", "宣伝したい製品の詳細を入力してください:", ui.ButtonSet.OK_CANCEL);
  if (productResponse.getSelectedButton() == ui.Button.CANCEL) return;
  
  const targetResponse = ui.prompt("ターゲット顧客", "ターゲットとする顧客層の特性を入力してください:", ui.ButtonSet.OK_CANCEL);
  if (targetResponse.getSelectedButton() == ui.Button.CANCEL) return;
  
  const productInfo = productResponse.getResponseText();
  const targetInfo = targetResponse.getResponseText();
  
  const prompt = `以下の製品情報とターゲット顧客に基づいて、効果的なマーケティングキャンペーンのアイデアを5つ提案してください。各アイデアには、キャンペーン名、概要、主な訴求ポイント、推奨チャネルを含めてください。
  
  製品情報: ${productInfo}
  ターゲット顧客: ${targetInfo}`;
  
  const ideas = callChatGPT(prompt);
  
  // 結果を新しいシートに表示
  const sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("キャンペーンアイデア");
  sheet.getRange(1, 1).setValue("マーケティングキャンペーンのアイデア");
  sheet.getRange(1, 1).setFontWeight("bold").setFontSize(14);
  sheet.getRange(3, 1).setValue(ideas);
  
  // 体裁を整える
  sheet.autoResizeColumn(1);
  
  ui.alert("完了", "キャンペーンアイデアが生成されました。", ui.ButtonSet.OK);
}

これらの例は、あくまでも基本的なものです。実際の業務に適用する際には、データ構造や業務フロー、セキュリティ要件などに合わせて適切にカスタマイズすることが重要です。また、APIの利用量とコストのバランスも考慮し、必要に応じて処理の最適化を行うことをお勧めします。

次のステップ:さらなる自動化への道筋

ここまでGASとOpenAIを連携させたスプレッドシート開発の基本から応用例まで解説してきました。これらの知識を土台として、さらに高度な自動化や機能拡張を目指すための次のステップについて考えてみましょう。

まず、システムの堅牢性と保守性を高めるために、モジュール化とエラーハンドリングの強化が重要です。大規模なプロジェクトでは、機能ごとにファイルを分割し、共通の処理をライブラリ化することで、コードの見通しと再利用性が向上します。また、エラー発生時の適切なログ記録と通知機能を実装することで、問題の早期発見と対応が可能になります。

js
function setupErrorReporting() {
  // エラー発生時に管理者にメール通知
  try {
    // 何らかの処理
  } catch (e) {
    const adminEmail = "admin@example.com";
    const subject = "スプレッドシート自動化システムでエラーが発生しました";
    const body = `エラー内容: ${e.toString()}\n\nスタックトレース: ${e.stack}`;
    
    GmailApp.sendEmail(adminEmail, subject, body);
    Logger.log(e);
  }
}

次に、ユーザーインターフェースの改善も重要な要素です。GASを使用してカスタムダイアログやサイドバーを作成することで、エンドユーザーがより直感的にシステムを操作できるようになります。HTMLサービスを活用することで、洗練されたUIを提供することが可能です。

js
function showCustomSidebar() {
  const html = HtmlService.createHtmlOutputFromFile('Sidebar')
      .setTitle('AIアシスタント')
      .setWidth(300);
  SpreadsheetApp.getUi().showSidebar(html);
}

// Sidebar.html ファイル内例
// 

htmlファイルを定義し使う例です。

html
<div>
  <h2>AIアシスタント</h2>
  <p>テキストを分析するには、セルを選択して「分析」ボタンをクリックしてください。</p>
  <button onclick="analyzeSelection()">分析</button>
  <div id="result"></div>
  <script>
    function analyzeSelection() {
      google.script.run
        .withSuccessHandler(showResult)
        .analyzeSelectedText();
    }
    function showResult(result) {
      document.getElementById('result').innerHTML = result;
    }
  </script>
</div>

また、より高度なAI活用のために、プロンプトエンジニアリングのさらなる探求も有効です。例えば、ロールプレイング手法や「Chain of Thought」といった最新のプロンプト技術を活用することで、より複雑なタスクにも対応できるようになります。具体的には、AIに特定の専門家の視点からの分析を依頼する、あるいはステップバイステップの思考プロセスを明示的に指示することで、より深い洞察を得ることができます。

js
function analyzeAsExpert() {
  const text = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
  
  const prompt = `あなたはマーケティングの専門家です。以下のテキストを、ターゲット顧客への訴求力という観点から分析してください。
  分析プロセスは以下のステップで行ってください:
  
  1. まずテキストの主要なメッセージと訴求ポイントを特定する
  2. 次に想定されるターゲット顧客層を推測する
  3. そのターゲット層にとってのメッセージの強みと弱みを評価する
  4. 最後に改善のための具体的な提案をする
  
  それぞれのステップを明確に分けて回答してください。
  
  テキスト: "${text}"`;
  
  return callChatGPT(prompt);
}

さらに、GASとOpenAIの連携を他のGoogleサービスにも拡張することで、より包括的な業務自動化が実現できます。例えば、Googleフォームからの回答を自動分析してGmailで結果を送信する、Googleドキュメント内のテキストを分析・要約する、Google Chatbotと連携して社内情報検索を効率化するなど、様々な可能性があります。

js
function processFormResponses() {
  const form = FormApp.openById('your_form_id');
  const formResponses = form.getResponses();
  
  // 最新の回答のみを処理
  const latestResponse = formResponses[formResponses.length - 1];
  const itemResponses = latestResponse.getItemResponses();
  
  let responseText = "";
  itemResponses.forEach(item => {
    responseText += `質問: ${item.getItem().getTitle()}\n回答: ${item.getResponse()}\n\n`;
  });
  
  const prompt = `以下のフォーム回答を分析し、重要なポイントと必要なフォローアップアクションを3点ずつ挙げてください。
  ${responseText}`;
  
  const analysis = callChatGPT(prompt);
  
  // 分析結果を担当者にメール送信
  GmailApp.sendEmail(
    "manager@example.com",
    "新規フォーム回答の分析",
    `新しいフォーム回答がありました。\n\n${responseText}\n\n分析結果:\n${analysis}`
  );
}

最後に、セキュリティとコンプライアンスへの配慮も忘れてはなりません。特に個人情報や機密情報を扱う場合は、データの暗号化、アクセス制限、ログ記録などの対策が必要です。また、APIキーなどの機密情報の安全な管理も重要です。スクリプトプロパティやGoogle Cloud のSecret Managerなどを活用することで、機密情報をコード外で安全に管理できます。

js
function securelyGetApiKey() {
  const scriptProperties = PropertiesService.getScriptProperties();
  return scriptProperties.getProperty('OPENAI_API_KEY');
}

function setApiKey() {
  const ui = SpreadsheetApp.getUi();
  const response = ui.prompt('APIキーの設定', 'OpenAI APIキーを入力してください:', ui.ButtonSet.OK_CANCEL);
  
  if (response.getSelectedButton() == ui.Button.OK) {
    const apiKey = response.getResponseText();
    PropertiesService.getScriptProperties().setProperty('OPENAI_API_KEY', apiKey);
    ui.alert('APIキーが保存されました');
  }
}

このように、GASとOpenAIを組み合わせたスプレッドシート開発は、初歩的な自動化から高度な業務支援システムまで、幅広い可能性を秘めています。技術の進化とともに、これらのツールの活用範囲はますます広がっていくことでしょう。自社の業務課題に合わせて段階的に機能を拡張していくことで、持続的な業務効率化と競争力強化につなげていくことができます。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)