ADVERTISEMENT

【Googleドキュメント】Googleフォームの回答から文書を作る時のApps Script設計

【Googleドキュメント】Googleフォームの回答から文書を作る時のApps Script設計
🛡️ 超解決

Googleフォームで収集した回答を基に、見積書や報告書などのドキュメントを自動生成したい場面は少なくありません。しかし、Apps Scriptの設計を誤ると、テンプレートの読み込み失敗やデータの反映漏れが発生し、結局手作業で修正する羽目になります。本記事では、安定して動作するスクリプトを構築するための設計のポイントを、具体的なコード例や失敗パターンを交えて解説します。初心者から経験者まで、効率的な自動化を目指す方に役立つ内容です。

【要点】この記事で確認すること

  • 最初に見る場所: スクリプトで使用するテンプレートドキュメントのファイルIDと、フォーム回答が格納されるスプレッドシートの列名を確認しましょう。
  • 切り分けの軸: エラーの原因は、テンプレートの構造(プレースホルダーの有無)、スクリプトの権限設定、トリガーの実行制限のいずれかです。段階的に検証してください。
  • 注意点: 会社のGoogle Workspace環境では、スクリプトの実行に管理者の承認が必要な場合があります。また、大量のドキュメントを生成する場合は1日の実行制限(Quota)を確認しておきましょう。

ADVERTISEMENT

Googleフォームとドキュメントを連携する基本的な流れ

Googleフォームの回答は、自動的にGoogleスプレッドシートに保存されます。Apps Scriptはそのスプレッドシートからデータを読み取り、テンプレートとなるドキュメントを複製して回答を埋め込みます。全体の流れは以下の通りです。

  1. フォームを作成し、回答先のスプレッドシートを指定します。
  2. テンプレートとなるGoogleドキュメントを作成し、回答を埋め込む場所に「{{名前}}」「{{部署}}」のようなプレースホルダーを記述します。
  3. スプレッドシートにスクリプトエディタを開き、GASコードを記述します。
  4. スクリプトでテンプレートをコピーし、プレースホルダーを実際の回答値で置換します。
  5. 生成したドキュメントを指定のフォルダに保存し、必要に応じてメールで送信します。

この一連の動作を自動化するために、まずはテンプレートドキュメントの設計とIDの取得方法を正しく理解してください。

テンプレートドキュメントの設計とIDの取得方法

テンプレートは、生成するドキュメントの雛形です。プレースホルダーは「二重波括弧」で囲むのが一般的ですが、他の記号でも構いません。ただし、スクリプト内で使用する文字列と完全に一致させる必要があります。

テンプレートに必要な要素

  • タイトルや日付などの固定テキスト
  • 可変部分を示すプレースホルダー(例:{{氏名}}、{{金額}})
  • 必要であれば表や画像のプレースホルダーも設定可能

ファイルIDは、テンプレートドキュメントのURLの「/d/」と「/edit」の間にある文字列です。たとえばURLが「https://docs.google.com/document/d/ABCDEFG12345/edit」であれば、IDは「ABCDEFG12345」となります。このIDをスクリプト内の定数として保持します。

ただし、テンプレートを間違って編集されないように、通常は書き込み権限を制限した状態で運用します。スクリプトに「編集者」権限が必要なため、テンプレート自体はスクリプト所有者が所有するか、共有設定で編集可能にしておきます。

Apps Scriptのコード構造と各関数の役割

効率的なスクリプトは、役割ごとに関数を分割します。主な関数の例を以下に示します。

メイン関数(generateFromForm)

この関数がトリガーまたは手動で実行されます。引数としてフォーム回答の行番号を受け取り、ドキュメント生成を実行します。多くの場合、フォーム送信時に実行する「onFormSubmit」トリガーを設定します。

テンプレート読み込み関数(getTemplate)

テンプレートファイルのIDからDocumentオブジェクトを取得します。DriveApp.getFileById(id)で取得し、DocumentApp.openByIdで開きます。

プレースホルダー置換関数(replacePlaceholders)

テンプレートの本文全体を取得し、プレースホルダーを実際の値で置き換えます。body.replaceText(‘{{氏名}}’, 氏名) のように各行を置換します。

ドキュメント保存関数(saveToFolder)

コピーしたドキュメントを指定のフォルダに移動し、不要なファイルは削除します。また、ファイル名を動的に設定します。

これらの関数を組み合わせることで、保守性が高くエラーに強いスクリプトになります。

エラーが発生しやすいポイントと失敗パターン

実務でよく遭遇するトラブルを整理します。

プレースホルダーの不一致

テンプレートに「{{氏名}}」と書いているのに、スクリプト内で「{{名前}}」と指定していると置換されません。置換後もプレースホルダーが残ったままドキュメントが出力されるため、必ず両者を一致させてください。

権限エラー

スクリプトがテンプレートやフォルダにアクセスできない場合、実行時にエラーとなります。特に会社の共有ドライブを利用する場合は、スクリプトに適切な権限が付与されているか確認が必要です。

トリガーの設定ミス

フォーム送信時に起動するトリガー(onFormSubmit)の設定を忘れると、手動実行しかできません。また、トリガーの実行制限(1日あたりの合計実行時間や回数)を超えると、後半の送信でエラーになる可能性があります。

大量実行時のQuota超過

Google Workspaceのアカウントには、1日あたりの実行時間やメール送信数などに制限があります。例えば、Consumerアカウントでは1日あたり90分の実行時間制限があるため、大量のドキュメント生成が必要な場合はバッチ処理や分割実行を検討してください。

以下の表は、テンプレートの種類とエラー発生傾向の比較です。

テンプレート種別 メリット デメリット/エラー傾向
固定フォーマット(全員同じレイアウト) 実装が簡単、置換箇所が限られる プレースホルダーのスペルミスが多い
可変フォーマット(条件により項目追加) 柔軟性が高い 条件分岐が複雑でロジックエラーが発生しやすい
表を含むテンプレート 見やすい帳票が作れる 表のセル内置換が難しく、改行や書式が崩れる

管理者に確認すべきセキュリティ設定

社内でスクリプトを運用する際には、Google Workspaceの管理者設定が影響することがあります。

OAuth同意画面とスコープ

スクリプトは、フォーム、スプレッドシート、ドキュメントへのアクセス権限を要求します。組織によっては未承認のアプリがブロックされるため、管理者にOAuth同意画面の設定を依頼するか、テスト用に一時的に許可をもらう必要があります。

共有ドライブの利用可否

テンプレートを共有ドライブに置く場合、スクリプトがアクセスできるように設定を変更する必要があります。特に「共有ドライブへのアクセスを制限する」ポリシーがある場合は、例外設定が必要です。

トリガーの実行制限

管理者は組織全体のApps Scriptの実行制限を設定できます。頻繁にドキュメントを生成する場合は、制限値に達していないか確認してください。

よくある質問(Q&A形式)

Q: テンプレートを変更した場合、既に生成済みのドキュメントはどうなりますか?
A: 既存のドキュメントには影響しません。テンプレート変更後に生成される新しいドキュメントにのみ反映されます。

Q: フォーム回答をリアルタイムでドキュメントに反映したいです。
A: フォーム送信時にトリガーを設定することで、回答が保存されると同時にドキュメントを作成できます。ただし、処理に時間がかかる場合は非同期になることもあります。

Q: エラーが発生したときに通知を受け取る方法はありますか?
A: スクリプト内でtry…catch構文を使い、エラー内容をメールで送信する処理を追加できます。または、スプレッドシートにエラーログを記録するのも有効です。

まとめ

Googleフォームの回答からドキュメントを生成するApps Scriptの設計では、テンプレートのプレースホルダー管理と権限設定が最も重要なポイントです。事前にテンプレートとスクリプト内の文字列を一致させ、テスト環境で短いコードから検証するとトラブルを減らせます。また、管理者に組織のセキュリティポリシーを確認し、Quota制限を考慮した設計を行ってください。本記事の内容を参考に、安定した自動化システムを構築してください。

ADVERTISEMENT

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT