
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活用を一段階レベルアップさせてみてください!