GAS×スプレッドシート:フォーム送信データを活用したリアルタイムダッシュボード構築
Webアプリケーション開発において、フォームから送信されたデータを効率的に管理し、リアルタイムに可視化することは非常に重要です。特に、Google Apps Script(GAS)とスプレッドシートを組み合わせることで、Webアプリのデータを簡単に収集・分析し、ダッシュボードとして表示できます。この記事では、GASのSheet.insertColumns
関数を活用して、フォーム送信データをリアルタイムにスプレッドシートへ追加し、そのデータを基にダッシュボードを構築する方法を解説します。
Sheet.insertColumns関数の基本
Sheet.insertColumns(columnIndex, numColumns)
は、指定されたスプレッドシートの指定された列位置に、指定された数の新しい列を挿入するGASの関数です。既存のデータは挿入された列の右側に移動します。この関数は、新しいデータが追加される際に、スプレッドシートの構造を動的に変更する必要がある場合に非常に役立ちます。
構文
Sheet.insertColumns(columnIndex, numColumns)
columnIndex
:列を挿入する開始位置の列インデックス(1から始まる)。numColumns
:挿入する列の数。
Webアプリ開発:フォーム送信データのダッシュボードへの反映
フォームから送信されたデータをスプレッドシートに蓄積し、それをダッシュボードに反映させるシナリオを考えてみましょう。例えば、顧客からの問い合わせフォーム、アンケートフォーム、注文フォームなど、様々な種類のデータをリアルタイムに追跡・分析したい場合に有効です。
実装例1:問い合わせフォームのデータ追加
問い合わせフォームから送信されたデータをスプレッドシートに記録し、新しい問い合わせが来た際に自動的に列を挿入してデータを追加する例です。
function doPost(e) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("問い合わせデータ");
// フォームから送信されたデータを取得
const params = e.parameter;
const name = params.name;
const email = params.email;
const message = params.message;
const timestamp = new Date();
// 新しい列を挿入(2列)
sheet.insertColumns(1, 2); // 1列目に2列挿入
// データを書き込む
const headerRow = ["タイムスタンプ", "名前", "メール", "メッセージ"];
sheet.getRange(1, 1, 1, headerRow.length).setValues([headerRow]); // ヘッダー行
const dataRow = [timestamp, name, email, message];
sheet.getRange(2, 1, 1, dataRow.length).setValues([dataRow]); // データ行
// レスポンスを返す
return ContentService.createTextOutput("送信完了");
}
カスタマイズ:
getSheetByName("問い合わせデータ")
の部分を、使用するシート名に合わせて変更してください。headerRow
の配列を、フォームのフィールドに合わせて変更してください。
実装例2:アンケートフォームのデータ集計
アンケートフォームの回答をスプレッドシートに集計し、新しい回答があるたびに列を挿入してデータを追加する例です。回答の選択肢が増えた場合にも対応できます。
function doPost(e) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("アンケート回答");
// フォームから送信されたデータを取得
const params = e.parameter;
const question1 = params.question1;
const question2 = params.question2;
const timestamp = new Date();
// 新しい列を挿入(回答数に合わせて調整)
sheet.insertColumns(1, 1); // 1列目に1列挿入
// データを書き込む
const headerRow = ["タイムスタンプ", "質問1", "質問2"];
sheet.getRange(1, 1, 1, headerRow.length).setValues([headerRow]); // ヘッダー行
const dataRow = [timestamp, question1, question2];
sheet.getRange(2, 1, 1, dataRow.length).setValues([dataRow]); // データ行
// レスポンスを返す
return ContentService.createTextOutput("送信完了");
}
カスタマイズ:
getSheetByName("アンケート回答")
の部分を、使用するシート名に合わせて変更してください。headerRow
の配列を、アンケートの質問に合わせて変更してください。
実装例3:注文フォームのデータ管理
注文フォームから送信されたデータをスプレッドシートに記録し、新しい注文が入るたびに列を挿入してデータを追加する例です。在庫管理や売上分析に活用できます。
function doPost(e) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("注文データ");
// フォームから送信されたデータを取得
const params = e.parameter;
const itemName = params.itemName;
const quantity = params.quantity;
const price = params.price;
const timestamp = new Date();
// 新しい列を挿入
sheet.insertColumns(1, 1); // 1列目に1列挿入
// データを書き込む
const headerRow = ["タイムスタンプ", "商品名", "数量", "価格"];
sheet.getRange(1, 1, 1, headerRow.length).setValues([headerRow]); // ヘッダー行
const dataRow = [timestamp, itemName, quantity, price];
sheet.getRange(2, 1, 1, dataRow.length).setValues([dataRow]); // データ行
// レスポンスを返す
return ContentService.createTextOutput("送信完了");
}
カスタマイズ:
getSheetByName("注文データ")
の部分を、使用するシート名に合わせて変更してください。headerRow
の配列を、注文フォームのフィールドに合わせて変更してください。
よくある問題とトラブルシューティング
- 列挿入時のエラー:
columnIndex
が不正な値(0以下またはシートの列数を超える)の場合、エラーが発生します。適切な値を指定してください。 - データが正しく書き込まれない:
headerRow
とdataRow
の要素数が一致しているか確認してください。 - タイムアウトエラー: 処理に時間がかかりすぎるとタイムアウトエラーが発生する場合があります。処理を最適化するか、Utilities.sleep()を使用して処理を分割してください。
カスタマイズ方法と応用例
- データ検証: フォームから送信されたデータに対して、GASで検証を行うことで、データの品質を向上させることができます。
- トリガー設定: フォーム送信時に自動的にGASを実行するようにトリガーを設定することで、リアルタイムなデータ処理を実現できます。
- ダッシュボード連携: スプレッドシートのデータをGoogle Data Studioと連携させることで、より高度なダッシュボードを構築できます。
まとめ
GASのSheet.insertColumns
関数は、Webアプリケーション開発において、フォーム送信データを効率的に管理し、リアルタイムにダッシュボードへ反映させるための強力なツールです。この記事で紹介した実装例を参考に、ぜひご自身のプロジェクトで活用してみてください。
未経験からSNSデザインを学び、在宅ワークで収入を得たい方へ。
Flap DESIGNは、デザインスキルから案件獲得までを徹底サポートするオンラインスクールです。現役プロがマンツーマンで指導するため、挫折しにくい環境が強み。
さらに、受講期間中に案件を獲得できなかった場合は、売上が立つまで営業サポート期間を延長する「売上保証制度」も魅力です。
副業として月8〜20万円を目指したい会社員の方、出産・育児を機に新しい働き方を求める方、フリーランスとして独立を目指す方など、ライフスタイルに合わせた働き方を実現したい方にぴったりのサービスです。まずは無料相談で詳細を聞いてみませんか?
未経験から始める!SNSデザインスクール