nisshi-dev-survey のデータ投入 API を使ってアンケートを作成・更新し、回答データを投入する。アンケート設計からデータ投入まで一気通貫で支援する。
外部から nisshi-dev-survey のアンケートデータを作成・更新・投入するための API リファレンスとワークフロー。
/designing-surveys スキルを使って効果的なアンケートを設計するPOST /data/surveys でアンケートを作成PUT /data/surveys/:id で質問・説明文・パラメータを調整POST /data/surveys/:id/data-entries で配布単位を作成PUT /data/surveys/:id/data-entries/:entryId で値を修正POST /data/surveys/:id/responses でデータを一括送信/admin/surveys/:id)で回答を確認まず /designing-surveys スキルを呼び出してアンケートを設計する。以下を決定する:
設計が固まったら、以下の API リファレンスに従ってデータを投入する。 アンケート作成後も質問の追加・変更・並び替え、パラメータの追加、データエントリの更新が可能。
NISSHI_DEV_SURVEY_API_KEY が API サーバーに設定されていること
.dev.vars に設定wrangler secret put NISSHI_DEV_SURVEY_API_KEY で設定.env にもキーを設定すると、source .env で読み込んで利用できる| 環境 | URL | 備考 |
|---|---|---|
| ローカル(プロキシ経由) | http://localhost:5173/api | フロント + API 両方起動が必要 |
| ローカル(API 直接) | http://localhost:8787 | API リポで npm run dev |
| 本番 | https://nisshi-dev-survey-api.nisshi.workers.dev | Cloudflare Workers |
すべてのリクエストに X-API-Key ヘッダーが必要:
X-API-Key: <NISSHI_DEV_SURVEY_API_KEY の値>
// テキスト入力
{ "type": "text", "id": "q1", "label": "ご意見をお聞かせください", "required": false }
// 単一選択(ラジオボタン)
{ "type": "radio", "id": "q2", "label": "満足度は?", "options": ["満足", "普通", "不満"], "required": true }
// 複数選択(チェックボックス)
{ "type": "checkbox", "id": "q3", "label": "利用機能", "options": ["機能A", "機能B", "機能C"], "required": false }
// 「その他(自由入力)」付き
{ "type": "radio", "id": "q4", "label": "好きなエディタ", "options": ["VS Code", "Vim"], "allowOther": true }
required: 必須かどうか(省略時は false)。true の場合、回答フォームで未回答だと送信できないallowOther: 「その他(自由入力)」オプションを追加するか(省略時は false)。radio / checkbox でのみ有効。回答者が「その他」を選ぶと自由記述テキストがそのまま回答値として保存されるアンケートにメタデータキーを定義し、データエントリや回答時に値を付与できる:
// アンケート作成時の params 定義
"params": [
{ "key": "event", "label": "イベント", "visible": true },
{ "key": "role", "label": "役割", "visible": false },
{ "key": "product-version", "label": "プロダクトバージョン", "visible": false }
]
key: 英数字・ハイフン・アンダースコアのみ (/^[a-zA-Z0-9_-]+$/)label: 表示名visible: 回答者に表示するかどうか。true のパラメータは回答フォームに表示される。false は裏側の分析用メタデータ(ロール、バージョン等)に使うパラメータ定義に基づく具体的な値のセット。1つのデータエントリ = 1つの配布 URL。 ロール別・イベント別に URL を分けることで、回答者に余計な質問をせずにメタデータを自動付与できる。
// データエントリ作成時
{ "values": { "event": "GENkaigi 2026 in Shibuya", "role": "スタッフ", "product-version": "発泡ウレタン版(v2.3)" }, "label": "GENkaigi 2026 in Shibuya スタッフ" }
回答を投入する際に dataEntryId を指定すると、そのエントリに紐付けられる。
POST /data/surveys
リクエストボディ:
{
"title": "開発者体験アンケート 2026Q1",
"description": "## 目的\n四半期ごとの開発者体験を調査します。",
"questions": [
{ "type": "radio", "id": "satisfaction", "label": "総合満足度は?", "options": ["とても満足", "満足", "普通", "不満", "とても不満"] },
{ "type": "checkbox", "id": "tools", "label": "よく使うツールは?", "options": ["VS Code", "JetBrains", "Vim/Neovim", "その他"] },
{ "type": "text", "id": "feedback", "label": "自由記述" }
],
"params": [
{ "key": "team", "label": "チーム", "visible": false }
],
"status": "active"
}
status: "draft"(デフォルト)または "active" を指定可能description: Markdown 形式対応(最大 10,000 文字)レスポンス (201): { id, title, description, status, createdAt, questions, params }
PUT /data/surveys/:id
リクエストボディ:
{
"title": "更新後のタイトル",
"description": "更新後の説明文",
"questions": [ ... ],
"params": [ ... ]
}
title: 必須description: 省略可(最大 10,000 文字)questions: 必須。質問配列を丸ごと差し替え(既存の質問を取得してから変更箇所だけ修正して送信する)params: 省略可。パラメータ定義を丸ごと差し替えstatus は変更されない(ステータス変更は管理画面で行う)レスポンス (200): { id, title, description, status, createdAt, questions, params }
GET /data/surveys
レスポンス (200): { surveys: [{ id, title, status, createdAt }] }
GET /data/surveys/:id
レスポンス (200): アンケート情報 + dataEntries 配列(各エントリの id, surveyId, values, label, responseCount, createdAt)
POST /data/surveys/:id/data-entries
リクエストボディ:
{
"values": { "team": "backend" },
"label": "Backend チーム"
}
values のキーはアンケートのパラメータ定義(params[].key)と一致する必要があるlabel は任意(最大 200 文字)レスポンス (201): { id, surveyId, values, label, responseCount, createdAt }
PUT /data/surveys/:id/data-entries/:entryId
リクエストボディ:
{
"values": { "event": "GENkaigi 2026 in Shibuya", "role": "スタッフ", "product-version": "発泡ウレタン版(v2.3)" },
"label": "GENkaigi 2026 in Shibuya スタッフ"
}
レスポンス (200): { id, surveyId, values, label, responseCount, createdAt }
DELETE /data/surveys/:id/data-entries/:entryId
レスポンス (200): { success: true }
GET /data/surveys/:id/data-entries
レスポンス (200): { dataEntries: [{ id, surveyId, values, label, responseCount, createdAt }] }
POST /data/surveys/:id/responses
注意: アンケートが status: "active" の場合のみ回答可能。
リクエストボディ:
{
"responses": [
{
"answers": {
"satisfaction": "満足",
"tools": ["VS Code", "Vim/Neovim"],
"feedback": "開発環境が改善されました"
},
"dataEntryId": "entry-1"
},
{
"answers": {
"satisfaction": "普通",
"tools": ["JetBrains"],
"feedback": ""
},
"params": { "team": "frontend" }
}
]
}
responses 配列: 1件以上必須answers: キーは質問の id、値はテキスト回答(string)または複数選択(string[])dataEntryId: 省略可。データエントリに紐付ける場合に指定params: 省略可。dataEntryId を使わずに直接パラメータ値を指定する場合レスポンス (201): { count: <投入件数> }
# ── Base URL を環境に合わせて設定 ──
# ローカル(プロキシ経由):
API_BASE="http://localhost:5173/api"
# ローカル(API 直接):
# API_BASE="http://localhost:8787"
# 本番:
# API_BASE="https://nisshi-dev-survey-api.nisshi.workers.dev"
# 1. アンケート作成
curl -X POST "$API_BASE/data/surveys" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "テストアンケート",
"questions": [{"type": "text", "id": "q1", "label": "感想"}],
"params": [{"key": "event", "label": "イベント", "visible": true}],
"status": "active"
}'
# 2. アンケート更新(質問追加・説明文変更など)
curl -X PUT "$API_BASE/data/surveys/SURVEY_ID" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "テストアンケート",
"description": "更新後の説明文",
"questions": [
{"type": "text", "id": "q1", "label": "感想"},
{"type": "radio", "id": "q2", "label": "満足度", "options": ["満足", "普通", "不満"], "required": true}
],
"params": [{"key": "event", "label": "イベント", "visible": true}]
}'
# 3. データエントリ作成
curl -X POST "$API_BASE/data/surveys/SURVEY_ID/data-entries" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"values": {"event": "GENkaigi 2026"}, "label": "GENkaigi 2026"}'
# 4. データエントリ更新(パラメータ値の追加・変更)
curl -X PUT "$API_BASE/data/surveys/SURVEY_ID/data-entries/ENTRY_ID" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"values": {"event": "GENkaigi 2026", "role": "スタッフ"}, "label": "GENkaigi 2026 スタッフ"}'
# 5. データエントリ削除(回答が紐づいていない場合のみ)
curl -X DELETE "$API_BASE/data/surveys/SURVEY_ID/data-entries/ENTRY_ID" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY"
# 6. 回答一括送信(dataEntryId 付き)
curl -X POST "$API_BASE/data/surveys/SURVEY_ID/responses" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"responses": [
{"answers": {"q1": "とても良かった"}, "dataEntryId": "ENTRY_ID"},
{"answers": {"q1": "改善の余地あり"}, "dataEntryId": "ENTRY_ID"}
]
}'
# 7. アンケート詳細確認(データエントリ・回答数含む)
curl "$API_BASE/data/surveys/SURVEY_ID" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY"
アンケート更新時は、必ず最新の状態を GET で取得してから変更箇所だけ修正して PUT する。
# 1. 最新の状態を取得
curl -s "$API_BASE/data/surveys/SURVEY_ID" -H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" > survey.json
# 2. JSON を加工(質問追加・選択肢変更・required 変更など)
# 3. PUT で更新
curl -X PUT "$API_BASE/data/surveys/SURVEY_ID" \
-H "X-API-Key: $NISSHI_DEV_SURVEY_API_KEY" \
-H "Content-Type: application/json" \
-d @survey_update.json
よくある更新操作:
required を変更allowOther を変更description を変更params 配列に追加し、データエントリの values も合わせて更新satisfaction, tools, feedback)allowOther: true を設定する詳しくは /designing-surveys スキルを参照。