2025年5月10日土曜日

Google Formsで回答の受付を停止したい(setAcceptingResponses)


一度公開したGoogleフォームを非公開状態に戻すことはできませんが

回答の受付を停止することは可能です




公開したフォームの回答を停止する手順を中心に書いていきます


(「制限付き」設定で自分以外のアクセスを制限する方法もあります→ 下記 Tips 2 )




ここではフォームが公開されている状態を前提とします



フォームの編集画面

右上の「公開」をクリックすると

表示される「回答を受付中」がオンになっています


それをオフにすると「回答を受け付けていません」に変わります


保存してフォームを開くと

質問が表示されず「回答の受け付けが終了しました」と表示されます


フォームの回答画面




Apps Script で作成する場合

以下の Code.gs で formUrl の値を書き換えて

closeFormByUrl() を実行すると

URLで指定したフォームは回答の受付を停止します



Code.gs
function closeFormByUrl() {
const formUrl = 'https://docs.google.com/forms/d/FORM_ID/edit';

// URLでフォームを取得
const form = FormApp.openByUrl(formUrl);

// 回答受付を停止
form.setAcceptingResponses(false);
}


Tips 1

フォームに表示するメッセージを変えたい場合

回答の受付をオフにする際「編集」をクリックします



「このフォームでは回答の受付が終了しています。」という入力欄に
表示させたいメッセージを入力します



この例では「回答を締め切りました」と入力して保存します



フォームの回答画面




Tips 2

一番上に書いたように

一度公開したGoogleフォームを非公開状態に戻すことはできませんが

公開の範囲を自分だけに限定すれば

自分以外の誰もアクセスできなくすることはできます

Google Formsの回答者を限定したい(UI操作のみ) で書いた「制限付き」を設定します


フォームの編集画面

左上の「公開」ボタンをクリックして

その後に表示される回答者の「管理」をクリックします



回答者ビューで「リンクを知っている全員」の横の▼をクリックして

「制限付き」を選択します



アクセスできるユーザーはオーナーである自分のみ

回答者ビューが「制限付き」であることを確認して「完了」します



次の画面で「保存」をクリックします


これで自分以外はフォームにアクセスできなくなります


フォームの回答画面

自分以外のアカウントで開くと「アクセス権が必要です」という画面になる


Google Formsの回答者を限定したい(UI操作のみ)


Google フォームを公開する際「リンクを知っている全員」にする必要がない場合は

回答者を限定して公開することができます


今回は Google Formsで単一選択の質問を作りたい で作ったフォームを例にします



STEP 1:
右上の「公開」ボタンをクリックして

その後に表示される回答者の「管理」をクリックします


STEP 2:
回答者ビュー「リンクを知っている全員」をクリックして「制限付き」を選択します



STEP 3:
「ユーザー、グループ、カレンダーの予定を追加」入力欄に

回答者のアカウントを入力して「完了」します


STEP 4: 
回答者のアカウントに「共有」します


STEP 5:
「メッセージ」を入力して「公開して通知」をクリックします


右上の「公開」ボタンの色が変わって

クリックしてみると回答者は特定のユーザーのみになっています




回答者が受信するメール

本文に回答用のフォームが埋め込まれたメールが届きます




Tips 1


STEP 5で回答者に通知しない場合は

「これらの回答者に通知する」のチェックを外して

「公開」をクリックします



Tips 2

UI で「制限付き」に切り替えない限り addPublishedReaders() しても全員アクセス可


Apps Script では回答者の追加はできるけど公開範囲の限定はできないみたい

以下の Code.gs で formName から readers までの値を書き換えて

addFormReaders() を実行すると

指定したEMAIL_ADDRESSをフォームの回答者に追加することはできる

けれど公開範囲は「リンクを知っている全員」になるので

回答者を限定したい場合は手動で上記の STEP 2 を行う必要があるようです


リファレンスをよく読んでみると
与えられたユーザーを回答者リストに追加するとは書かれているが
公開範囲を「制限付き」にするとは書かれていない


一応日本語でも見てみた



下記は回答者を追加するだけのコードです


Code.gs: このコードでの公開範囲は「リンクを知っている全員」になる
function addFormReaders() {
const formName = 'Favorite Color Survey';
const description = 'Please tell us your favorite color.';
const title = 'What is your favorite color?';
const colors = ['Red', 'Blue', 'Green', 'Yellow'];
const readers = ['oassith@gmail.com'];

// フォームを作成
const form = FormApp.create(formName);
form.setDescription(description);

// 質問を追加
const item = form.addMultipleChoiceItem();
item.setTitle(title)
.setChoiceValues(colors)
.showOtherOption(true) // 「その他」を表示
.setRequired(false);

// フォームを公開状態にする
form.setPublished(true);

// 特定のユーザーを回答者に追加
form.addPublishedReaders(readers);

// ログに編集用URLと公開URLを出力
Logger.log('Form Edit URL: ' + form.getEditUrl());
Logger.log('Form Published URL: ' + form.getPublishedUrl());
}



上記 Code.gs を実行すると公開設定はこうなっていた



addPublishedReaders() で指定したユーザーを追加しても
フォームの公開範囲は『リンクを知っている全員』のままなので
アクセス制限なく誰でも回答可能になります


Reference

addPublishedReaders(emailAddresses) 


Google Formsを公開して回答を受け付けたい


フォームを作ったら「公開」して回答を受け付けられるようにします

今回は Google Formsで単一選択の質問を作りたい で作ったフォームを例にします



フォームの編集画面

右上の「公開」ボタンをクリックします
(以前は「送信」ボタンでしたが「公開」ボタンに変更されたようです)


今回は「リンクを知っている全員」が回答できるように公開してみます


公開すると「公開」のボタンの色が変わります



クリックしてみると「回答を受付中」がオンになっています



「回答者へのリンクをコピー」をクリックすると

フォームの回答ページへのリンクが表示されます



「URLを短縮」にチェックを入れるとリンクのURLが短く表示されます



コピーしたリンク先にアクセスするとフォームの回答画面が表示されます


フォームの回答画面





Apps Script で作成する場合

以下の Code.gs で formUrl の値を書き換えて

publishFormByUrl() を実行すると

URLで指定したフォームが「公開」状態になります



Code.gs
function publishFormByUrl() {
const formUrl = 'https://docs.google.com/forms/d/FORM_ID/edit';
// URLでフォームを取得
const form = FormApp.openByUrl(formUrl);
// フォームを公開状態に設定
form.setPublished(true);
Logger.log('Form "' + form.getTitle() + '" has been published.');
}


Tips

現状の自分の理解まとめ
  1. 「公開」したら「回答を受付中」になる
  2. 「公開」したら「非公開」に戻すことはできない
  3. 回答の受付を停止したい場合は「回答を受付中」をオフにする
  4. アクセス権の制限で限定公開できる
  5. Education版 や Business版の場合は管理者が公開範囲を制限できる
  6. フォームを「削除」したらフォームにも回答にもアクセスできなくなる
    • 基本的に公開したフォームは削除しない


Reference

フォームを公開して回答を取得する
関連記事


2025年5月9日金曜日

Google Formsで選択肢に応じて次に表示するセクションを変えたい(UI操作)


Googleフォームでは回答に応じて次に進むページを分岐することができます


例えば SECTION 1で
  • 1つ目の回答を選んだらSECTION 2へ移動する
  • 2つ目の回答を選んだらSECTION 3へ移動する
このような分岐ができます

(Apps Script の FormApp では分岐の実装はサポートされていないようです - 2025/05/09現在)




この機能は「ラジオボタン」と「プルダウン」で使えます


フォームの編集画面

STEP 1: 
SECTION 2, SECTION 3を追加します


STEP 2:
SECTION 1 〜 3 に質問を作ります


STEP 3:
一番上の質問の右下にある︙メニューで「回答に応じてセクションに移動」を選択します



STEP 4:
  • 1つ目の選択肢の右隣の「次のセクションに進む」を「セクション 2に移動」に設定します
  • 2つ目の選択肢の右隣の「次のセクションに進む」を「セクション 3に移動」に設定します




フォームの回答画面

最初の質問の選択肢によって次に開くページが異なる
  • Option 1を選択して「次へ」をクリックすると「SECTION 2」が開く
  • Option 2を選択して「次へ」をクリックすると「SECTION 3」が開く



Tips

回答によって分岐したいので回答を「必須」にしておきます
必須にしないと回答していない状態でも「次へ」ボタンで次のセクションに進みます



Reference

回答に応じて質問を表示する



関連記事




Google Formsでセクションを追加したい(addPageBreakItem)


今回は「セクションを追加」してみます

セクションを追加することで複数のページを持つフォームが作成できます


今回は新しいセクションの作り方を書いていきます


フォームの編集画面


すぐ下に2個目のセクションが作成されます


そのセクションに「質問を追加」します


2個目のセクションに質問が追加されます


1個目のセクションと2個目のセクションにそれぞれ

タイトルや質問を入力してフォームを調整します

今回は最初のセクションで好きな色

2つ目のセクションで好きな動物を回答する質問を作成しています



フォームの回答画面

最初のセクションで「次へ」ボタンをクリックすると

2つ目のセクションが表示されるようになります




Apps Script で作成する場合

以下の Code.gs で formName から animals までの値を書き換えて

createFormWithSections() を実行すると

上記のような「セクションを追加」したフォームが作成されます



Code.gs
function createFormWithSections() {
const formName = 'Form with Sections';
const description = 'This form contains multiple sections.';
const question1 = 'Question 1: What is your favorite color?';
const colors = ['Red', 'Blue', 'Green'];
const section2Title = 'Section 2';
const section2HelpText = 'You are now entering section 2.';
const question2 = 'Question 2: What is your favorite animal?';
const animals = ['Cat', 'Dog', 'Bird']
// フォーム作成
const form = FormApp.create(formName);
form.setDescription(description);
// 質問1を追加(セクション1の前)
form.addMultipleChoiceItem()
.setTitle(question1)
.setChoiceValues(colors)
.setRequired(false);
// セクションを追加
form.addPageBreakItem()
.setTitle(section2Title)
.setHelpText(section2HelpText);
// 質問2を追加(セクション2内)
form.addMultipleChoiceItem()
.setTitle(question2)
.setChoiceValues(animals)
.setRequired(false);
form.setPublished(false);
Logger.log('Form Edit URL: ' + form.getEditUrl());
}



Tips

上記の例では質問ごとにセクションを分けただけですが

質問の選択肢によって次に表示するセクションを変えることもできます



Reference

addPageBreakItem() 






Google Formsで動画を追加したい


今回はGoogleフォームに「動画を追加」してみます


フォームの編集画面


YouTube全体を検索またはURLを貼り付けます


今回は特定のURLを貼り付けてみます

検索結果で対象の動画を選択して右下の「挿入」ボタンをクリックします


フォームに動画が追加されます



タイトルや質問を入力してフォームを調整します




フォームの回答画面




Apps Script で作成する場合

以下の Code.gs で formName, description, videoUrl, videoTitle, videoHelpText , questionTitle, choices の値を書き換えて

createFormWithVideoAndQuestion() を実行すると

上記のような「動画を追加」したフォームが作成されます



Code.gs
function createFormWithVideoAndQuestion() {
const formName = 'Google Forms Quiz with Video';
const description = 'Please watch the video and select the correct URL to create a new Google Form.';
const videoUrl = 'https://www.youtube.com/watch?v=-34hDApWjiM';
const videoTitle = 'Watch this video';
const videoHelpText = 'Please watch this video before answering the question.';
const questionTitle = 'What is the URL to create a new Google Form?';
const choices = ['form.new', 'doc.new', 'sheet.new'];

// Create the form
const form = FormApp.create(formName);
form.setDescription(description);

// Add YouTube video
form.addVideoItem()
.setVideoUrl(videoUrl)
.setTitle(videoTitle)
.setHelpText(videoHelpText);

// Add multiple choice question
form.addMultipleChoiceItem()
.setTitle(questionTitle)
.setChoiceValues(choices)
.setRequired(false);

form.setPublished(false);

Logger.log('Form Edit URL: ' + form.getEditUrl());
}



Reference

addVideoItem() 



Google Formsで画像を追加したい(addImageItem)


今回はGoogleフォームに「画像を追加」してみます


フォームの編集画面


複数の経路から画像の挿入が可能
  • アップロード
  • ウェブカメラ
  • URL
  • 写真
  • Googleドライブ
  • Google 画像検索


今回はGoogleドライブの画像を挿入してみます

Googleドライブで対象のファイルを選択して右下の「挿入」ボタンをクリックします



フォームに画像が追加されます



タイトルや質問を入力してフォームを調整します


フォームの回答画面





Apps Script で作成する場合

以下の Code.gs で formName, description, imageTitle, imageHelpText, questionTitle, colors, fileId の値を書き換えて

createMultipleChoiceWithImage() を実行すると

上記のような「画像を追加」したフォームが作成されます



Code.gs
function createMultipleChoiceWithImage() {
const formName = 'Favorite Color Survey';
const description = 'Please tell us your favorite color.';
const imageTitle = 'Color Samples';
const imageHelpText = 'Please refer to these color samples before answering.';
const questionTitle = 'What is your favorite color?';
const colors = ['Red', 'Blue', 'Green', 'Yellow', 'Other'];
const fileId = 'FILE_ID';

// フォーム作成
const form = FormApp.create(formName);
form.setDescription(description);

// Driveから画像取得して追加
const imageFile = DriveApp.getFileById(fileId);
const imageBlob = imageFile.getBlob();

form.addImageItem()
.setImage(imageBlob)
.setTitle(imageTitle) // 画像のタイトル
.setHelpText(imageHelpText); // 説明文(任意)

// Multiple choice 質問を追加
const item = form.addMultipleChoiceItem();
item.setTitle(questionTitle)
.setChoiceValues(colors)
.setRequired(false);
form.setPublished(false);

Logger.log('Form Edit URL: ' + form.getEditUrl());
}


Tips

上記の Code.gs ではGoogleドライブ内の画像を挿入しましたが

URLを指定して読み込む場合は UrlFetchApp を使う

※ 元の画像のファイルフォーマットによってはエラーが出るかもしれません
(今回手元で試した画像はPNG)


URLを指定して読み込むコード

Code.gs
function createImageFromUrl() {
const formName = 'Form with Image';
const description = 'Inserted from URL.';
const imageTitle = 'Image';
const imageHelpText = 'This image is inserted from a URL.';
const imageUrl = 'URL'; // ← ここに画像のURLを入れる

// フォーム作成
const form = FormApp.create(formName);
form.setDescription(description);

// URLから画像を取得
const image = UrlFetchApp.fetch(imageUrl);

form.addImageItem()
.setImage(image)
.setTitle(imageTitle) // 画像のタイトル
.setHelpText(imageHelpText); // 説明文(任意)

form.setPublished(false);

Logger.log('Form Edit URL: ' + form.getEditUrl());
}


Reference

addImageItem() 

Class ImageItem