このページでは、フォームに関する次のタスクを行う方法について説明します。
- 回答者がアクセスできるようにフォームを公開する
- フォームの回答者を探す
- フォームをより多くの回答者と共有する
- フォームから回答者を削除する
- フォームで「リンクがあれば誰でも」回答を受け付けているかどうかを確認する
- フォームを閉じる
- フォームの公開を停止する
- フォームへの回答の受け付けを停止する
- フォームが以前のフォームかどうかを確認する
始める前に
このページのタスクに進む前に、次のタスクを実施します。
フォーム ID を取得します。フォーム ID は、
forms.create
を使用してフォームを作成するときに、レスポンスのformId
フィールドで返されます。
回答者がアクセスできるようにフォームを公開する
既存のフォームを公開するには、forms.setPublishSettings
メソッドを使用します。
フォーム ID を指定して
forms.setPublishSettings
メソッドを呼び出します。
REST
リクエストの本文の例
{
"publishSettings": {
"isPublished": true,
"isAcceptingResponses": true
}
}
Apps Script
/**
* Publishes a Google Form using its URL.
*/
function publishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Publish the form. This also enables accepting responses.
form.setPublished(true);
Logger.log(`Form "${form.getTitle()}" published successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is now published.');
}
if (form.isAcceptingResponses()) {
Logger.log('Form is now accepting responses.')
}
} catch (error) {
Logger.log(`Error publishing form: ${error}`);
}
}
Python
Node.js
フォームの回答者を確認する
Form.getPublishedReaders() を使用して、回答者アクセス権(PUBLISHED_READER ロール)を持つすべてのユーザーのリストを取得できます。これにより、ユーザー オブジェクトの配列が返されます。
REST
リクエスト URL にクエリ パラメータ includePermissionsForView=published
を追加します。
Apps Script
/**
* Gets and logs the email addresses of all responders for a form.
*/
function listResponders() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Get the array of User objects representing responders
const responders = form.getPublishedReaders();
// Log the responders
Logger.log("Following can respond to the form");
responders.forEach(responder => Logger.log(responder.getEmail()));
return responders;
} catch (error) {
Logger.log(`Error getting responders: ${error}`);
}
}
Python
Node.js
フォームをより多くの回答者と共有する
回答者がフォームを開いて回答できるように、フォームに回答者を追加するには、ドライブの permissions.create
メソッドを使用します。
フォーム ID とアクセス設定を指定して
permissions.create
メソッドを呼び出します。
REST
リクエストの本文の例
{
"view": "published",
"role": "reader",
"type": "user",
"emailAddress": "user@example.com"
}
Apps Script
/**
* Adds a single responder to a form using their email address.
*/
function `addSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address
const responderEmail = 'responder@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Add the user as a responder
form.addPublishedReader(responderEmail);
Logger.log(`Added ${responderEmail} as a responder to form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error adding responder: ${error}`);
}
}
Python
Node.js
フォームから回答者を削除する
回答者を個別に削除するには、メールアドレスを使用するか、User オブジェクトを使用します。回答者を削除すると、その回答者はフォームの表示と送信ができなくなります(ドメインの共有や共有ドライブのアクセスなど、他の方法でアクセスできる場合を除きます)。
メールアドレスで 1 人の回答者を削除する
REST
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/PERMISSION
permissionID は、前述の「レスポンダーを一覧表示」で確認できます。
Apps Script
/**
* Removes a single responder from a form using their email address.
*/
function `removeSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address to remove
const responderEmailToRemove = 'responder-to-remove@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Remove the user as a responder
form.removePublishedReader(responderEmailToRemove);
Logger.log(`Removed ${responderEmailToRemove} as a responder from form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error removing responder: ${error}`);
}
}
Python
Node.js
フォームで「リンクを持っているすべてのユーザー」からの回答を受け付けているかどうかを確認する
フォームがリンクを持っているすべてのユーザーからの回答を受け入れるかどうかを確認するには、ドライブのアドバンスト サービスを有効にする必要があります。
- ドライブの高度なサービスを有効にします。
- Apps Script プロジェクトを開きます。
- [サービス]([サービス] の横にあるプラスアイコン)をクリックします。
- [Drive API] を見つけて、[追加] をクリックします。
- [追加] をクリックします。
Apps Script
function `isAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.view === 'published' && permission.role === 'reader') {
return true;
}
}
}
return false;
}
Python
Node.js
フォームに「リンクを知っている人は誰でも回答できます」を設定するには:
Apps Script
function `setAnyoneWithLinkResponder`(formId) {
Drive.Permissions.create({
type: 'anyone',
view: 'published',
role: 'reader',
}, formId);
}
Python
Node.js
リンクを知っている全員がフォームに回答できる設定を解除するには:
Apps Script
function `removeAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.role === 'reader') {
Drive.Permissions.remove(formId, permission.id);
}
}
}
}
Python
Node.js
フォームを閉じる
フォームの公開を停止するには、Forms.setPublished(false) メソッドを使用します。{/apps-script/reference/forms/form#setpublishedenabled} フォームの公開を停止すると、フォームは利用できなくなり、回答の受け付けが自動的に停止されます。
REST
リクエストの本文の例
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": false
}
}
}
Apps Script
/**
* Unpublishes a Google Form using its URL.
*/
function unpublishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Unpublish the form. This also disables accepting responses.
form.setPublished(false);
Logger.log(`Form "${form.getTitle()}" unpublished successfully.`);
// Optional: Verify the state
if (!form.isPublished()) {
Logger.log('Form is now unpublished.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js
フォームの公開を解除せずに回答の受け付けを停止するには、Form.setAcceptingResponses(false)
メソッドを使用します。フォームの回答者には、閉鎖されたフォームのページとメッセージが表示されます。
REST
リクエストの本文の例
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": true,
"isAcceptingResponses": false
}
}
}
Apps Script
/**
* Stop a Google Form from accepting responses using its URL.
*/
function closeMyFormForAcceptingResponses() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// This disables the form for accepting responses.
form.setAcceptingResponses(false);
Logger.log(`Form "${form.getTitle()}" closed for accepting responses successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is still published.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js
フォームが以前のフォームかどうかを確認する
従来のフォームは publishSettings フィールドがないフォームですが、新しく作成されたフォームはすべて公開設定をサポートしています。
フォームが公開をサポートしているかどうかを確認して、フォームが以前の形式かどうかを確認します。このメソッドは、setPublished(enabled)
メソッドと isPublished()
メソッド、レスポンダーの権限が有効かどうかを判断するために使用されます。
Apps Script
/**
* Checks if a form supports advanced responder permissions (i.e., is not a legacy form).
*/
function `checkIfFormSupportsPublishing()` {
// TODO(developer): Replace the URL with your own.
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Checks whether the form supports publishing or not and logs it to the console.
const supportsPublishing = form.supportsAdvancedResponderPermissions();
if (supportsPublishing) {
Logger.log(`Form "${form.getTitle()}" supports publishing (not a legacy
form).`);
} else {
Logger.log(`Form "${form.getTitle()}" is a legacy form (does not support
publishing).`);
}
return supportsPublishing;
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js