かずきち。の日記

サーバサイドエンジニアのつぶやき

【NotebookLM活用術】そのコピペ、自動化しませんか?GASでスプレッドシートのデータをドキュメントに自動転記する「下ごしらえ」術


NotebookLM、使っていますか? 論文やPDF、ドキュメントを読み込ませてAIと対話できる、非常に強力なツール

しかし、NotebookLMを活用しようとした時、こんな壁にぶつかったことはありませんか?

「分析したい元のデータが、Google スプレッドシートにしかない…」

NotebookLMが最も得意とするのは、文章で書かれたドキュメント(非構造化データ)です。一方、スプレッドシートはセルに細かく分かれたデータ(構造化データ)の塊。
もちろん、スプレッドシートをPDFやテキストにして読み込ませることもできますが、データが羅列されているだけでは、AIが文脈をうまく理解できず、期待した回答が得られないことがあります。
結局、手作業でスプレッドシートから必要なデータをGoogle ドキュメントにコピー&ペーストして、体裁を整えてからNotebookLMに読み込ませている…そんな面倒な作業をしている方も多いのではないでしょうか。
この記事では、その面倒な「下ごしらえ」を自動化するGoogle Apps Script (GAS)を紹介します。

なぜ「転記スクリプト」がNotebookLMに必要なのか?

結論から言うと、このスクリプトはNotebookLMの「内部」で動くものではなく、NotebookLMに読み込ませる「ソース(資料)」を最適化するために必要不可欠な「下ごしらえ」の道具です。

1. AIが理解しやすい「テキスト形式」への変換
スプレッドシートのままでは、AIにとって「A1セルの値は〇〇、B1セルの値は△△」という単なる「点の情報」になりがちです。

GASを使ってドキュメントに転記する際に、例えば以下のように**「文章」や「リスト」として整形**してあげます。

(スプレッドシート): A列: 製品A, B列: 10,000円

(ドキュメントへ転記): ・製品A: 10,000円

たったこれだけでも、AIは「製品Aの価格は10,000円である」という**文脈(線や面の情報)**を格段に理解しやすくなります。

2. データ更新の即時反映(自動化)
元となるスプレッドシートのデータが日々更新される場合、手作業でコピペしていると、ドキュメント側のソースが古い情報のままになってしまいます。

GASでスクリプトを組んでおけば、ボタン一つ(あるいはトリガー設定で定期的)に、常に最新のデータが反映されたドキュメントを生成できます。これをNotebookLMのソースとして指定しておけば、いつでも最新の情報に基づいた分析が可能になります。

3. 手作業によるミスと手間の削減
言わずもがなですが、手作業のコピペは「範囲選択ミス」「貼り付け先のミス」「時間の浪費」の温床です。

スクリプト化することで、これらのヒューマンエラーと工数をゼロにできます。

【コピペでOK】スプレッドシートからドキュメントへ転記するGASコード
お待たせしました。具体的なGASのサンプルコードです。 ここでは、「指定したスプレッドシートの全データを、指定したGoogle ドキュメントに箇条書きで転記する」スクリプトを作成します。

準備するもの
転記元のスプレッドシートID:

スプレッドシートのURL https://docs.google.com/spreadsheets/d/[この部分]/edit の [この部分] です。

転記先のドキュメントID:

ドキュメントのURL https://docs.google.com/document/d/[この部分]/edit の [この部分] です。

スクリプトの書き方
Google スプレッドシート(またはドキュメント)を開き、「拡張機能」>「Apps Script」を選択します。

開いたエディタに、以下のコードを貼り付けます。

YOUR_SPREADSHEET_ID と YOUR_DOCUMENT_ID を、上記で準備したものに書き換えます。

// スプレッドシートのデータをドキュメントに転記する関数
function transferDataToDoc() {
  
  // ▼▼▼ 1. 設定 ▼▼▼
  const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID'; // 転記元のスプレッドシートID
  const SHEET_NAME = 'シート1'; // 転記元のシート名(適宜変更してください)
  const DOCUMENT_ID = 'YOUR_DOCUMENT_ID'; // 転記先のドキュメントID
  // ▲▲▲ 設定ここまで ▲▲▲

  try {
    // --- スプレッドシート側の処理 ---
    const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
    const sheet = ss.getSheetByName(SHEET_NAME);
    if (!sheet) {
      Logger.log(`シート「${SHEET_NAME}」が見つかりません。`);
      return;
    }
    
    // データが入力されている範囲のデータを二次元配列で取得
    const data = sheet.getDataRange().getValues();
    Logger.log(`スプレッドシートから ${data.length} 行のデータを取得しました。`);

    // --- ドキュメント側の処理 ---
    const doc = DocumentApp.openById(DOCUMENT_ID);
    const body = doc.getBody();
    
    // 既存の内容をすべてクリア(常に最新データにするため)
    body.clear();
    
    // 見出しを追加
    body.appendParagraph('スプレッドシートからの転記データ').setHeading(DocumentApp.ParagraphHeading.HEADING1);
    body.appendParagraph(`(データソース: ${ss.getName()} / ${SHEET_NAME})`);
    body.appendParagraph(`(最終更新: ${new Date().toLocaleString('ja-JP')})`);
    body.appendHorizontalRule(); // 区切り線

    // --- データの転記処理 ---
    if (data.length > 0) {
      // 取得したデータを1行ずつ処理
      data.forEach((row, rowIndex) => {
        
        // rowは配列(例: [ '製品A', '10,000円', '在庫あり' ] )
        
        // ここでNotebookLMが読みやすいように整形します
        // 例: 1行のデータをカンマ区切りで連結し、箇条書きにする
        const textLine = row.join(' / '); // 例: "製品A / 10,000円 / 在庫あり"
        
        // 0行目(ヘッダー)は太字にする例
        if (rowIndex === 0) {
          body.appendListItem(textLine).setBold(true);
        } else {
          body.appendListItem(textLine).setBold(false);
        }
      });
      
    } else {
      body.appendParagraph('転記するデータがありませんでした。');
    }
    
    Logger.log(`ドキュメント(${doc.getName()})への転記が完了しました。`);

  } catch (e) {
    Logger.log(`エラーが発生しました: ${e.message}`);
  }
}
スクリプトの実行方法

コードを保存します(フロッピーディスクのアイコン)。
エディタ上部で、実行する関数 transferDataToDoc を選択します。
「実行」ボタンを押します。
初回実行時のみ、「承認が必要です」というダイアログが表示されます。
「権限を確認」をクリックし、自分のGoogleアカウントを選択。
「詳細」>「(安全ではないページ)に移動」をクリック。
「許可」をクリックします。(これは、あなたが作ったスクリプトがあなたのデータにアクセスすることを許可する、標準的な手順です)
実行が完了したら、転記先のGoogle ドキュメントを開いてみてください。データが転記されているはずです。

NotebookLMでの活用イメージ

上記スクリプトを実行し、データが転記されたGoogle ドキュメントを準備します。
NotebookLMを開き、「ソース」としてこのGoogle ドキュメントを追加します。
AIに対して、スプレッドシートのデータを元にした質問を投げかけます。
(質問例) 「シート1のデータに基づいて、在庫ありの製品だけをリストアップして」 「製品Aの価格はいくら?」 「全製品の平均価格を計算して」
手作業でコピペしただけのデータよりも、スクリプトによって 「最新」かつ「整形された」テキスト を読み込ませることで、AIの回答精度が格段に向上するはずです。

まとめ

NotebookLMは非常に強力ですが、その力を最大限に引き出すには、AIが理解しやすい「質の高いソース(資料)」を準備する「下ごしらえ」が重要です。

元データがスプレッドシートにある場合、GASを使った「ドキュメントへの自動転記」は、その「下ごしらえ」を劇的に効率化するテクニックです。
ぜひこのスクリプトをカスタマイズして、あなたのNotebookLM活用を一段階レベルアップさせてみてください!

注目記事