はじめに
こんにちは。DX開発事業部の鹿嶋です。ねこ、吸ってますか?
NotebookLM Enterprise 版にて、API 経由でノートブックの作成・管理が可能となったようなので、さっそく試してみました!
https://cloud.google.com/agentspace/notebooklm-enterprise/docs/api-notebooks?hl=en
ノートブックの新規作成
以下のようにノートブックが1件も作成されていない状態から、新規作成を行います。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks" \ -d '{ "title": "API Notebook Creation Test" }'
以下の結果が返され、ノートブックが新規作成されました。
{ "title": "API Notebook Creation Test", "notebookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "emoji": "", "metadata": { "userRole": "PROJECT_ROLE_OWNER", "isShared": false, "isShareable": true }, "name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}" }
ノートブックの詳細情報を取得
先ほど作成したノートブックの詳細情報を取得してみます。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${GLOBAL_NOTEBOOK_ID}"
結果は以下のとおりです。ノートブックの権限、共有状況、作成・更新日時や、ノートブックのアイコン(絵文字)を取得してくれました。
現在はデータソースが1件もないためこのような結果ですが、すでに追加されている場合は、合わせて情報として出力されます。
{ "title": "API Notebook Creation Test", "notebookId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "emoji": "🤖", "metadata": { "userRole": "PROJECT_ROLE_OWNER", "isShared": false, "isShareable": true, "lastViewed": "2025-09-07T05:01:33.993144Z", "createTime": "2025-09-07T04:19:30.302434Z" }, "name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}" }
データソースの追加
データソースとして、以下の要素を個別または一括で追加することが可能です。
- テキストコンテンツ
- Web コンテンツ
- YouTube 動画
- Google Drive コンテンツ
- Google Agentspace コンテンツ
今回は「テキスト」「Web」「YouTube」の3つを一括登録してみます。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${NOTEBOOK_ID}/sources:batchCreate" \ -d '{ "userContents": [ { "textContent": { "sourceName": "API Test Document", "content": "これはNotebookLM APIのテストドキュメントです。このテキストを使ってAIが要約や質問応答を行います。機械学習、人工知能、自然言語処理について説明しています。" } }, { "webContent": { "url": "https://cloud.google.com/?hl=ja", "sourceName": "Google Cloud Japan" } }, { "videoContent": { "youtubeUrl": "https://www.youtube.com/watch?v=WForD3asu4g" } } ] }'
以下の結果が返され、先ほど作成したノートブックにソースが追加されました。
{ "sources": [ { "sourceId": { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "title": "API Test Document", "metadata": { "wordCount": 2, "tokenCount": 38 }, "settings": { "status": "SOURCE_STATUS_COMPLETE" }, "name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}" }, { "sourceId": { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "title": "Google Cloud Japan", "metadata": { "wordCount": 3631, "tokenCount": 12488 }, "settings": { "status": "SOURCE_STATUS_COMPLETE" }, "name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}" }, { "sourceId": { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "title": "5 分で解説!NotebookLM Enterprise とは?", "metadata": { "wordCount": 960, "tokenCount": 1629 }, "settings": { "status": "SOURCE_STATUS_COMPLETE" }, "name": "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}" } ] }
データソースの削除
登録したデータソースを削除します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks/${NOTEBOOK_ID}/sources:batchDelete" \ -d '{ "names": [ "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}/sources/{SOURCE_ID}" ] }'
以下の結果が返ってくれば成功のようなのですが、いささか不安になりますね…
{ }
実際に削除されているかどうかは、Web UI もしくはコマンドから確認可能です。
また、複数のデータソースを一度に削除しようとするとエラーが返されたので、単一での削除しか対応していないのかもしれません。
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
ノートブックの削除
最後に、ノートブックの削除を行なってみます。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/${PROJECT_NUMBER}/locations/global/notebooks:batchDelete" \ -d '{ "names": [ "projects/{PROJECT_NUMBER}/locations/global/notebooks/{NOTEBOOK_ID}" ] }'
成功の場合、先ほどのソースの削除と同様に以下の結果が返ってくるようです。
{ }
Web UI から確認すると、ノートブック作成前の状態に戻っていることが確認できました。
おわりに
実際に手を動かしてみると、データソースの複数削除ができなかったり、削除成功時のレスポンスが空で少し不安になったりしましたが、こうした試行錯誤も新しい技術に触れる醍醐味かもしれません(ということにしておきます)。
まだまだ alpha 版ということで、今後も仕様変更や新機能追加が予想されますが、例えば「プロジェクトが作成されたら自動で議事録用のノートブックを生成する」「毎日特定のWebサイトをソースとして更新する」といった、より高度なワークフロー連携が実現できるのではないかと、今からワクワクしています!