複数のサーベイコンポーネントを組み合わせて表示できるWebベースのサーベイシステムです。
- 複数のサーベイセットを動的に読み込み
- URLパラメータによる条件分岐
- Google Apps Script (GAS) を通じたGoogle Spreadsheetへのデータ保存
- サーバーサイドプロキシによるCORS回避
npm install.env ファイルを作成し、GASのエンドポイントURLを設定してください:
cp env.example .env.env ファイルを編集:
GAS_URL=https://script.google.com/macros/s/YOUR_GAS_SCRIPT_ID/exec
PORT=3000
npm startまたは開発モード:
npm run dev静的ファイルのみで起動する場合:
npm run staticサーベイにアクセスする際は以下のURLパラメータを指定してください:
uid: ユーザーID(数字)task_state: タスク状態("interval" または "complete")method: 手法("manual", "glv-bo", "standard-bo", "cma-es")group: グループ("mario" または "design")
手法の対応関係:
manual: 🐤 ヒヨコ(手動)glv-bo: 🐬 イルカ(GLV-BO)standard-bo: 🐎 ウマ(Standard BO)cma-es: 🦉 フクロウ(CMA-ES)- 現在は使用されていません
グループの説明:
mario: マリオグループ(従来のサーベイセット)design: デザイングループ(新しいサーベイセット)
テスト用の例:
# マリオグループ - 手動手法でのテスト
http://localhost:3000/?uid=123&task_state=interval&method=manual&group=mario
# マリオグループ - イルカ手法でのテスト
http://localhost:3000/?uid=123&task_state=interval&method=glv-bo&group=mario
# マリオグループ - ウマ手法でのテスト
http://localhost:3000/?uid=123&task_state=interval&method=standard-bo&group=mario
# マリオグループ - 最終サーベイのテスト
http://localhost:3000/?uid=123&task_state=complete&method=manual&group=mario
# デザイングループ - 中間サーベイのテスト
http://localhost:3000/?uid=123&task_state=interval&method=manual&group=design
# デザイングループ - 最終サーベイのテスト
http://localhost:3000/?uid=123&task_state=complete&method=manual&group=design
現在利用可能なサーベイセット:
- セット1: NASA-TLX + SUS + オリジナルサーベイ
- セット2: 最終サーベイ
セットは js/survey-config.js で定義されています。
├── index.html # メインHTMLファイル
├── server.js # Express.jsサーバー
├── package.json # 依存関係とスクリプト
├── .env # 環境変数(要作成)
├── env.example # 環境変数テンプレート
├── js/
│ ├── main.js # メインアプリケーション
│ ├── survey-config.js # サーベイ設定
│ ├── survey-manager.js # サーベイ管理
│ ├── gas-config.js # GAS設定
│ └── gas-sender.js # GAS送信処理
└── surveys/
├── nasa-tlx.js # NASA-TLXサーベイ
├── sus.js # SUSサーベイ
├── original.js # オリジナルサーベイ
├── last-survey.js # 最終サーベイ
└── choice-survey.js # 選択式サーベイ例
surveys/ ディレクトリに新しいサーベイファイルを作成:
// surveys/my-survey.js
export const mySurvey = {
id: 'my-survey',
title: 'マイサーベイ',
questions: [
{
id: 'q1',
type: 'slider',
text: '質問1',
min: 0,
max: 100,
default: 50
},
{
id: 'q2',
type: 'radio',
text: '質問2',
options: ['選択肢1', '選択肢2', '選択肢3']
}
]
};js/survey-config.js でサーベイをインポートし、セットに追加:
import { mySurvey } from '../surveys/my-survey.js';
export const SURVEY_SETS = {
'set1': [nasaTlxSurvey, susSurvey, mySurvey],
'set2': [lastSurvey]
};- slider: スライダー(数値入力)
- radio: ラジオボタン(単一選択)
- select: セレクトボックス(単一選択)
- Google Apps Script にアクセス
- 新しいプロジェクトを作成
gas-sample-code.gsの内容をコピー- スプレッドシートIDを設定
- デプロイしてWebアプリとして公開
js/gas-config.js でGASのエンドポイントURLを設定:
export const GAS_CONFIG = {
ENDPOINT: "YOUR_GAS_ENDPOINT_URL",
// ...
};- フロントエンド:
fetch('/api/submit')でサーバーに送信 - サーバー: Express.jsがGASにプロキシ転送
- GAS: データを受信してスプレッドシートに保存
この方式により、CORS問題を完全に回避できます。
サーバーのログで送信状況を確認できます:
npm startサーバーの状態確認:
GET /api/health
MIT License