生成AIの補助で Google Apps Script によるサーベイ報告書作成の自動化を効率化した話
こんにちは。組織開発室に所属し、組織開発を担当しているてぃーびーです。
組織規模が大きくなってくると、何らかの形で定期的な組織サーベイを実施することがあります。
そして、定期的なサーベイには報告資料がつきものです。今回は、エンゲージメントパルスサーベイの報告資料の作成を Google Apps Script(以降 GAS ) で自動化したのですが、生成AIの登場もあり、生成AIの支援を受けつつ開発をしたので、この過程についてまとめます。

前提
クラスメソッドでは、2023年1月から月次で従業員エンゲージメントパルスサーベイを実施しています。パルスサーベイは、組織課題を解決し、従業員のエンゲージメントを向上させることで、パフォーマンスの向上につなげることを目的に実施しています。
今回の自動化に至るまでのサーベイ運用フローは、以下の通りです。

- Google フォームによるアンケートを実施する
- アンケート結果を後続のツールが扱いやすいように加工する
- 加工した回答を元に Looker Studio のサーベイ結果ダッシュボードを作成
- 加工した回答を元に Google スプレッドシートで表形式の報告書を作成
- Google スプレッドシートの内容を元に Google ドキュメントで文書形式の報告書を作成
1〜4は自動化を含めもともと仕組み化できていたのですが、5だけまだ手動で実施していたので、ここを自動化するのが今回の話です。なお、アンケート結果を加工した回答データは個人を判別できる情報が含まれないようにしてあります。
※なお、サーベイ運用の全体像については、後日別記事にて詳しく解説する予定です。
Gemini を活用した GAS プログラム作成
実行可能性調査
まずは、実行可能性調査(フィージビリティ・スタディ)から開始です。
手動で作成していたレポートのどの部分を GAS のプログラムとして実現できるか、AIに相談しつつ検証しました。 Google ドキュメントとしては存在する表現だとしても、 GAS のプログラム経由では実装できないケースがあるため、必要な工程です。
たとえば、以下のような形式でコードを生成してもらい、結果をテスト用の GAS で実行して実現可否を確認します。
入力
GASで Google ドキュメントで見出しレベル1〜4と標準テキストを作成する関数を作成してください。
出力
Google ドキュメントで、見出しレベル1〜4と標準テキストを書き込む関数を作成しました。
この関数は、引数としてドキュメントの ID を受け取り、そのドキュメントの末尾に各スタイルを追加していく構成になっています。
### サンプルコード
```javascript
/**
* 指定したドキュメントに見出し1〜4と標準テキストを追加する
* @param {string} docId - 書き込み先のドキュメントID
*/
function addStyledParagraphs(docId) {
// ドキュメントを開き、ボディ(本文)を取得
const doc = DocumentApp.openById(docId);
const body = doc.getBody();
// 見出し1
body.appendParagraph("これは見出しレベル 1 です")
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
// 見出し2
body.appendParagraph("これは見出しレベル 2 です")
.setHeading(DocumentApp.ParagraphHeading.HEADING2);
// 見出し3
body.appendParagraph("これは見出しレベル 3 です")
.setHeading(DocumentApp.ParagraphHeading.HEADING3);
// 見出し4
body.appendParagraph("これは見出しレベル 4 です")
.setHeading(DocumentApp.ParagraphHeading.HEADING4);
// 標準テキスト
body.appendParagraph("これは標準テキスト(本文)です。")
.setHeading(DocumentApp.ParagraphHeading.NORMAL);
// 保存(任意ですが、明示的に変更を反映させる場合に便利です)
doc.saveAndClose();
console.log("ドキュメントにスタイル付きテキストを追加しました。");
}
/**
* 実行用のテスト関数
*/
function testAddStyles() {
// 前の回答で作成したファイルや、既存のファイルIDを指定してください
const docId = "ここにドキュメントIDを入力してください";
addStyledParagraphs(docId);
}
```
### コードの解説
1. **`setHeading()`**:
段落(Paragraph オブジェクト)に対してスタイルを設定するメソッドです。
2. **`DocumentApp.ParagraphHeading`**:
見出しのレベルを指定するための定数(列挙型)です。
* `HEADING1` ~ `HEADING6` まで指定可能です。
* `NORMAL` は通常の本文スタイルです。
3. **メソッドチェーン**:
`appendParagraph("テキスト").setHeading(...)` のように、段落の追加とスタイルの設定を1行で記述できます。
### 前回の「新規作成」と組み合わせる場合
もし「新規作成した直後にこれらのテキストを入れたい」という場合は、以下のように組み合わせることができます。
```javascript
function createAndFormatDoc(fileName, folderId) {
// 1. 作成(前回のロジック)
const newDoc = DocumentApp.create(fileName);
const docId = newDoc.getId();
DriveApp.getFileById(docId).moveTo(DriveApp.getFolderById(folderId));
// 2. テキスト追加(今回のロジック)
addStyledParagraphs(docId);
return newDoc.getUrl();
}
```
このように作成・移動・編集の処理を分けておくと、後でメンテナンスがしやすくなります。
以上のような形式で、必要な機能分の検証を全て実施しました。
仮に、 Gemini を使わない場合、 App Script の公式ドキュメントで必要な処理の仕様を調べ、ユースケースを Google 検索で探していた手間が、Geminiとのわずか数回のやり取りでほぼ解決します。 GAS で扱う対象は一般的な用語と重複することが多く、検索するとノイズも多いため調査コストを減らせるのはありがたいところです。
本実装
実行可能性調査が終わったら、本実装です。
なお、今回は別の自動化で使っている GAS の処理がすでにあり、大枠は既存コードを参考に置き換えれば済む状態でした。
そのため、処理の流れやそのまま使える部品については流用しつつ、新規に実装する必要がある個別の処理や関数があれば、 Gemini の支援を受けつつ実装するようにしました。
開発は、以下のサイクルを繰り返す形で進めました。
- ひとかたまりの処理を実装
- 動作確認
- 次の処理の実装へ
基本はこれでサクサクと実装できたのですが、生成AIに特に助けてもらえた部分が2箇所あります。
- 入出力の構成ありきの処理
- エラーへの対応
1. 入出力の構成ありきの処理
今回の処理は、入力データとして Google スプレッドシートの集計データがあり、出力用の Google ドキュメントのテンプレートをコピーし、任意のフォルダに出力をする構成です。
特に入力データの表データのデータ保持形式を踏まえてデータの読み取りや加工をする必要があります。そのため、 Gemini に処理方法を質問する際も、必要に応じて集計データを添付しつつ質問をしました。結果として、集計データのフォーマットを踏まえたコードを適切に出力してくれて、手動で多数ある項目を踏まえたコードを書かずに済み、省エネで実装できました。
2. エラーへの対応
エラーが出た場合、エラーログの情報を添えて Gemini に解決のサポートをしてもらいました。
もらった情報で即解決することもあれば、もらった情報をヒントに追加で考え、調べ解決することもありました。総じて自分だけで解決するよりも素早く対応できました。
まとめ
生成AIに自力で実装した場合と生成AIのサポートを得た場合で比較をするために、以下の質問をしてみました。
入力
以下のコードについて、一般的なスキルのコーポレートエンジニアが生成AIの補助を受けずに実装する場合、どのくらいの時間がかかるでしょうか?
以下、 GAS のコード
出力
前半略
結論:予想実装時間は 約16〜24時間(実働2〜3日)
このコードは一見シンプルに見えますが、「3階層の組織構造(部署1〜3)のループ処理」と「複数ファイル(平均・アラート・前月比)を跨いだデータの紐付け」という、実務上の複雑さが含まれています。
中半略
総評
このコードをAIなしでスラスラ書けるエンジニアは、GASの中級者以上と言えます。 一般的なコーポレートエンジニアであれば、「1日目で基本ロジックを固め、2日目でドキュメント出力を仕上げ、3日目で細かいバグを取って完成させる」というのが、業務の合間に進める現実的なスケジュール感ではないでしょうか。
もし、このコードの特定のセクション(例:さらに階層を深くする、エラーハンドリングを強化するなど)について詳細な解説が必要であれば、いつでもお知らせください。
実際の実装時間は約5時間程度でした。AIによる見積もり(16〜24時間)と比較すると、約1/3〜1/4の工数で完了できたことになります。






