フォーム作成者が回答できるユーザーをより細かく制御できるように、回答者に対するきめ細かい制御機能が導入されます。2026 年 1 月 31 日以降に API を使用して作成されたフォームは、デフォルトで公開状態になります。詳細については、
Google フォームの API の変更をご覧ください。
フォームやテストを更新する
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
フォームにコンテンツを追加したり、設定、メタデータ、コンテンツを更新したりするには、batchUpdate()
メソッドを使用します。このメソッドは、変更をバッチでグループ化するため、1 つのリクエストが失敗しても、他の(依存している可能性のある)変更は書き込まれません。
batchUpdate()
メソッドはレスポンスの本文を返します。この本文には、各リクエストのレスポンスが含まれます。各レスポンスは、対応するリクエストと同じインデックスを占有します。該当するレスポンスがないリクエストの場合、そのインデックスのレスポンスは空になります。
始める前に
このページのタスクに進む前に、次のタスクを実施します。
- 早期導入プログラムの手順に沿って、認可/認証と認証情報の設定を完了します。
次の例は、フォームのメタデータを更新する方法を示しています。コンテンツと設定の構造は同じで、updateFormInfo
ではなく updateItem
または updateSettings
リクエストを使用します。リクエストごとに、変更するフィールドの名前と更新された値を指定し、指定したフィールドへの変更を制限する updateMask
値を指定します。
REST
フォームの説明を更新するには、フォーム ID と更新された説明値を指定して batchUpdate()
メソッドを呼び出します。
リクエストの本文の例
"requests": [{
"updateFormInfo": {
"info": {
"description": "Please complete this quiz based on this week's readings for class."
},
"updateMask": "description"
}
}]
項目を追加
次の例は、フォームに新しいコンテンツを追加する方法を示しています。新しいコンテンツを追加するときに、新しいコンテンツを挿入する場所とインデックスを指定する必要があります。たとえば、インデックスが 0
の位置には、フォームの先頭にコンテンツが挿入されます。
REST
フォームにアイテムを追加するには、フォーム ID、アイテムの情報、目的の場所を指定して batchUpdate()
メソッドを呼び出します。
リクエストの本文の例
"requests": [{
"createItem": {
"item": {
"title": "Homework video",
"description": "Quizzes in Google Forms",
"videoItem": {
"video": {
"youtubeUri": "https://www.youtube.com/watch?v=Lt5HqPvM-eI"
}
}},
"location": {
"index": 0
}
}]
注文をリクエストする
batchUpdate()
メソッドは、createItem
や updateItem
などのサブリクエストの配列を受け取ります。サブリクエストは、指定された順序で 1 つずつ検証されます。
例: batchUpdate
リクエストには、2 つの createItem
サブリクエストを含む requests
配列があります。サブルリクエスト A には location.index
0、サブルリクエスト B には location.index
1 が割り当てられます。requests
配列が [A, B] の場合、batchUpdate
は成功します。配列が [B, A] の場合、フォームにインデックス 0 のアイテムがすでに含まれていない限り、location.index
1 は無効であるため、batchUpdate
は失敗します。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-04-09 UTC。
[null,null,["最終更新日 2025-04-09 UTC。"],[],["The `batchUpdate()` method is used to modify forms, allowing for updates to metadata, settings, or content and the addition of new items. It groups changes, ensuring that if one fails, none are applied. When updating, the method requires the field name, updated value, and `updateMask`. Adding content requires specifying the item details and insertion `location` by index. The method executes sub-requests sequentially, validating each in order. The order in which you place requests in an array matters when creating items.\n"],null,["# Update a form or quiz\n\nTo add content to a form or update the settings, metadata, or content, use the\n`batchUpdate()` method, which groups changes together in a batch so that if one\nrequest fails, none of the other (potentially dependent) changes are written.\n\nThe `batchUpdate()` method returns a response body, within which is a response\nfor each request. Each response occupies the same index as the corresponding\nrequest; for requests with no applicable response, the response at that index\nwill be empty.\n\nBefore you begin\n----------------\n\nPerform the following tasks before proceeding with the tasks on this page:\n\n- Complete authorization/authentication and credentials setup in the Early Adopter Program instructions\n\nUpdate metadata, settings, or items\n-----------------------------------\n\nThe following example shows how to update a form's metadata, but the structure\nis the same for content and settings---they use the `updateItem` or\n`updateSettings` requests instead of `updateFormInfo`. For each request, you\nsupply the name of the field to be changed and the updated value, along with\nan `updateMask` value to limit changes to the fields you've specified. \n\n### REST\n\nTo update the form's description, call the\n[`batchUpdate()`](/workspace/forms/api/reference/rest/v1/forms/batchUpdate)\nmethod with the form ID and the updated description value.\n\n**Sample request body** \n\n \"requests\": [{\n \"updateFormInfo\": {\n \"info\": {\n \"description\": \"Please complete this quiz based on this week's readings for class.\"\n },\n \"updateMask\": \"description\"\n }\n }]\n\n### Python\n\nforms/snippets/update_form.py \n[View on GitHub](https://github.com/googleworkspace/python-samples/blob/main/forms/snippets/update_form.py) \n\n```python\nfrom apiclient import discovery\nfrom httplib2 import Http\nfrom oauth2client import client, file, tools\n\nSCOPES = \"https://www.googleapis.com/auth/forms.body\"\nDISCOVERY_DOC = \"https://forms.googleapis.com/$discovery/rest?version=v1\"\n\nstore = file.Storage(\"token.json\")\ncreds = None\nif not creds or creds.invalid:\n flow = client.flow_from_clientsecrets(\"client_secrets.json\", SCOPES)\n creds = tools.run_flow(flow, store)\n\nform_service = discovery.build(\n \"forms\",\n \"v1\",\n http=creds.authorize(Http()),\n discoveryServiceUrl=DISCOVERY_DOC,\n static_discovery=False,\n)\n\nform = {\n \"info\": {\n \"title\": \"Update metadata example for Forms API!\",\n }\n}\n\n# Creates the initial Form\ncreateResult = form_service.forms().create(body=form).execute()\n\n# Request body to add description to a Form\nupdate = {\n \"requests\": [\n {\n \"updateFormInfo\": {\n \"info\": {\n \"description\": (\n \"Please complete this quiz based on this week's\"\n \" readings for class.\"\n )\n },\n \"updateMask\": \"description\",\n }\n }\n ]\n}\n\n# Update the form with a description\nquestion_setting = (\n form_service.forms()\n .batchUpdate(formId=createResult[\"formId\"], body=update)\n .execute()\n)\n\n# Print the result to see it now has a description\ngetresult = form_service.forms().get(formId=createResult[\"formId\"]).execute()\nprint(getresult)\n```\n\n### Node.js\n\nforms/snippets/update_form.js \n[View on GitHub](https://github.com/googleworkspace/node-samples/blob/main/forms/snippets/update_form.js) \n\n```javascript\n'use strict';\n\nconst path = require('path');\nconst google = require('@googleapis/forms');\nconst {authenticate} = require('@google-cloud/local-auth');\n\nasync function runSample(query) {\n const authClient = await authenticate({\n keyfilePath: path.join(__dirname, 'credentials.json'),\n scopes: 'https://www.googleapis.com/auth/drive',\n });\n const forms = google.forms({\n version: 'v1',\n auth: authClient,\n });\n const newForm = {\n info: {\n title: 'Creating a new form for batchUpdate in Node',\n },\n };\n const createResponse = await forms.forms.create({\n requestBody: newForm,\n });\n console.log('New formId was: ' + createResponse.data.formId);\n\n // Request body to add description to a Form\n const update = {\n requests: [\n {\n updateFormInfo: {\n info: {\n description:\n 'Please complete this quiz based on this week\\'s readings for class.',\n },\n updateMask: 'description',\n },\n },\n ],\n };\n const res = await forms.forms.batchUpdate({\n formId: createResponse.data.formId,\n requestBody: update,\n });\n console.log(res.data);\n return res.data;\n}\n\nif (module === require.main) {\n runSample().catch(console.error);\n}\nmodule.exports = runSample;\n```\n\nAdd an item\n-----------\n\nThe following example shows how to add new content to a form. When adding new\ncontent, you must provide a location with an index where new content should be\ninserted. For instance, a location with index `0` will insert the content at\nthe beginning of the form. \n\n### REST\n\nTo add an item to the form, call the\n[`batchUpdate()`](/workspace/forms/api/reference/rest/v1/forms/batchUpdate)\nmethod with the form ID and the item's information and desired location.\n\n**Sample request body** \n\n \"requests\": [{\n \"createItem\": {\n \"item\": {\n \"title\": \"Homework video\",\n \"description\": \"Quizzes in Google Forms\",\n \"videoItem\": {\n \"video\": {\n \"youtubeUri\": \"https://www.youtube.com/watch?v=Lt5HqPvM-eI\"\n }\n }},\n \"location\": {\n \"index\": 0\n }\n }]\n\n### Python\n\nforms/snippets/add_item.py \n[View on GitHub](https://github.com/googleworkspace/python-samples/blob/main/forms/snippets/add_item.py) \n\n```python\nfrom apiclient import discovery\nfrom httplib2 import Http\nfrom oauth2client import client, file, tools\n\nSCOPES = \"https://www.googleapis.com/auth/forms.body\"\nDISCOVERY_DOC = \"https://forms.googleapis.com/$discovery/rest?version=v1\"\n\nstore = file.Storage(\"token.json\")\ncreds = None\nif not creds or creds.invalid:\n flow = client.flow_from_clientsecrets(\"client_secrets.json\", SCOPES)\n creds = tools.run_flow(flow, store)\n\nform_service = discovery.build(\n \"forms\",\n \"v1\",\n http=creds.authorize(Http()),\n discoveryServiceUrl=DISCOVERY_DOC,\n static_discovery=False,\n)\n\nform = {\n \"info\": {\n \"title\": \"Update item example for Forms API\",\n }\n}\n\n# Creates the initial Form\ncreateResult = form_service.forms().create(body=form).execute()\n\n# Request body to add a video item to a Form\nupdate = {\n \"requests\": [\n {\n \"createItem\": {\n \"item\": {\n \"title\": \"Homework video\",\n \"description\": \"Quizzes in Google Forms\",\n \"videoItem\": {\n \"video\": {\n \"youtubeUri\": (\n \"https://www.youtube.com/watch?v=Lt5HqPvM-eI\"\n )\n }\n },\n },\n \"location\": {\"index\": 0},\n }\n }\n ]\n}\n\n# Add the video to the form\nquestion_setting = (\n form_service.forms()\n .batchUpdate(formId=createResult[\"formId\"], body=update)\n .execute()\n)\n\n# Print the result to see it now has a video\nresult = form_service.forms().get(formId=createResult[\"formId\"]).execute()\nprint(result)\n```\n\n### Node.js\n\nforms/snippets/add_item.js \n[View on GitHub](https://github.com/googleworkspace/node-samples/blob/main/forms/snippets/add_item.js) \n\n```javascript\n'use strict';\n\nconst path = require('path');\nconst google = require('@googleapis/forms');\nconst {authenticate} = require('@google-cloud/local-auth');\n\nasync function runSample(query) {\n const authClient = await authenticate({\n keyfilePath: path.join(__dirname, 'credentials.json'),\n scopes: 'https://www.googleapis.com/auth/drive',\n });\n const forms = google.forms({\n version: 'v1',\n auth: authClient,\n });\n const newForm = {\n info: {\n title: 'Creating a new form for batchUpdate in Node',\n },\n };\n const createResponse = await forms.forms.create({\n requestBody: newForm,\n });\n console.log('New formId was: ' + createResponse.data.formId);\n\n // Request body to add video item to a Form\n const update = {\n requests: [\n {\n createItem: {\n item: {\n title: 'Homework video',\n description: 'Quizzes in Google Forms',\n videoItem: {\n video: {\n youtubeUri: 'https://www.youtube.com/watch?v=Lt5HqPvM-eI',\n },\n },\n },\n location: {\n index: 0,\n },\n },\n },\n ],\n };\n const updateResponse = await forms.forms.batchUpdate({\n formId: createResponse.data.formId,\n requestBody: update,\n });\n console.log(updateResponse.data);\n return updateResponse.data;\n}\n\nif (module === require.main) {\n runSample().catch(console.error);\n}\nmodule.exports = runSample;\n```\n\nRequest order\n-------------\n\nThe [`batchUpdate()`](/workspace/forms/api/reference/rest/v1/forms/batchUpdate)\nmethod accepts an array of sub-requests such as `createItem` and `updateItem`.\nSub-requests are validated one at a time in the order they are provided.\n\nExample: A `batchUpdate` request has a `requests` array with two `createItem`\nsub-requests. Sub-request A has `location.index` 0 and sub-request B has\n`location.index` 1. If the `requests` array is \\[A, B\\], `batchUpdate` will\nsucceed. If the array is \\[B, A\\], `batchUpdate` will fail, since `location.index`\n1 is not valid unless the form already contains an item at index 0."]]