# consentFlow Webform Development Guide > consentFlow の Form.io スキーマ (webform JSON) を編集する全タスクの入口。Form.io コンポーネント `key` ↔ Notes アイテム `{key}` の 1:1 マッピングが前提。`` は consentFlow 側設定 (デフォルト `CF_`、既存アプリのモダナイズでは空文字もあり) で、**webform 側は接頭語非依存で書く** ([references/data-binding.md](https://mcp.cflow.cloud/docs/data-binding.md) §1)。 MCP endpoint (Streamable HTTP, no auth): https://mcp.cflow.cloud/mcp ## Docs - [consentFlow Webform Development](https://mcp.cflow.cloud/docs/skill.md) - [data-binding — Form.io key と Notes アイテムのマッピング、隠しフィールドの正しい型](https://mcp.cflow.cloud/docs/data-binding.md) - [json-conventions — JSON ファイル整形、スキーマライフサイクル、prune scope](https://mcp.cflow.cloud/docs/json-conventions.md) - [layout-styling — レイアウト・グルーピング、styleBlock CSS、modalEdit ダイアログ、参照モード disabled](https://mcp.cflow.cloud/docs/layout-styling.md) - [scripting — Form.io 拡張点、button の自動注入変数、Chart.js、カスタムバリデータ](https://mcp.cflow.cloud/docs/scripting.md) - [server-data — フォーム内 JS からサーバ側 Notes データを読み取る全経路](https://mcp.cflow.cloud/docs/server-data.md) ## Sections - skill#overview — Overview (https://mcp.cflow.cloud/docs/skill.md) - skill#premise — このガイドの前提 (Premise) (https://mcp.cflow.cloud/docs/skill.md) - skill#red-flags-stop-and-check — Red Flags — STOP and check (https://mcp.cflow.cloud/docs/skill.md) - skill#quick-reference-reference — Quick Reference (やりたいこと → 読む reference) (https://mcp.cflow.cloud/docs/skill.md) - skill#decision-flow-js-notes — Decision flow: フォーム内 JS から Notes フィールド値を読みたい (https://mcp.cflow.cloud/docs/skill.md) - skill#when-not-to-apply — When NOT to apply (https://mcp.cflow.cloud/docs/skill.md) - skill#tips — 運用ルール (新規 TIPS の追記先) (https://mcp.cflow.cloud/docs/skill.md) - data-binding#1-form-io-notes — 1. Form.io ↔ Notes フィールド命名規則 (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#1-1-valueproperty-datatype — 1. Form.io ↔ Notes フィールド命名規則 > 1.1 ⚠ `valueProperty` / `dataType` を**後から**変えると、既存文書の値が照合できなくなる (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#2-type-textfield-hidden-true-type — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#sec — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う > 何が起きるか (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#sec-2 — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う > 正しい設定 (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#type-hidden — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う > `type: "hidden"` で省略してよい / 入れない方がよいプロパティ (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#sec-3 — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う > 既存フォームを点検したいとき (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#sec-4 — 2. 「裏で持つだけの値」は `type: "textfield" + hidden:true` ではなく `type: "hidden"` を使う > 参考実装 (実運用フォームの実例) (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#3-input-false-skip — 3. `input: false` のコンポーネントはデータ系ライフサイクルを skip する (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#4-32-000-richtext — 4. 32,000 バイト超の文字列値は黙って RichText アイテムになりビュー列から消える (https://mcp.cflow.cloud/docs/data-binding.md) - data-binding#red-flags — Red Flags (https://mcp.cflow.cloud/docs/data-binding.md) - json-conventions#1-json — 1. JSON ファイル肥大化を避けるためのインデント運用 (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-1 — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.1 症状の見分け方 (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-2-json-round-trip — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.2 アンチパターン: 標準外の JSON フォーマッタでの round-trip (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-3 — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.3 推奨フォーマット (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-4-node-js — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.4 正規化レシピ (Node.js) (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-5 — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.5 編集時のチェックリスト (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-6-1-json-node-parse-stringify — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.6 改行ゼロの 1 行 JSON は Node の parse→stringify round-trip で構造編集する (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#1-7 — 1. JSON ファイル肥大化を避けるためのインデント運用 > 1.7 削除すべき不要スキーマ要素 (補足) (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#2-webformrevisionjson-fieldjson — 2. WebFormRevisionJson と FieldJson の使い分け (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#2-1-fieldjson-default — 2. WebFormRevisionJson と FieldJson の使い分け > 2.1 FieldJson は公開時プレビューの「評価済み」スナップショット — default 系は新規文書で再評価されない (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#3-prune-prefix-schema-data-referencedkeys — 3. 孤児アイテム自動削除 (prune) は prefix 空時に schema/Data 由来 referencedKeys で managed scope 判定 (https://mcp.cflow.cloud/docs/json-conventions.md) - json-conventions#red-flags — Red Flags (https://mcp.cflow.cloud/docs/json-conventions.md) - layout-styling#1-panel-container — 1. レイアウトのグルーピングは `panel` を使う — `container` は原則禁止 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#2-disabled-choices-js-ace-quill — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#leaf — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > 自作再帰で leaf に到達できない (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#choices-js-select-tags-selectmultiple — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > Choices.js (select / tags / selectMultiple) は `component.disabled = true` だけでは UI が止まらない (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#ace-quill-form-io-disabled — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > ACE / Quill エディタは Form.io の disabled が内部インスタンスに伝わらない (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#datagrid-2-columns-input-disabled — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > DataGrid 2 行目以降 / columns 配下の input が disabled 属性を持たない (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#checkbox-radio-blanket-css-input — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > checkbox / radio は blanket CSS (`input { pointer-events: none }`) では止まらない (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#ccc-css-radio-selected — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > 参照モードの選択肢ラベル配色 (選択中=黒太字 / 非選択=#ccc) はコア共通 CSS の `radio-selected` 機構 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#why-how-to-apply — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > Why / How to apply (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#2-1-webformreadonlycopyflg — 2. 参照モードで disabled が当たらない罠 (Choices.js / ACE / Quill / DataGrid) > 2.1 参照モードのテキストコピー許可 (WebFormReadOnlyCopyFlg) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#3-styleblock-css — 3. styleBlock (フォーム内カスタム CSS) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec — 3. styleBlock (フォーム内カスタム CSS) > 標準形 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec-2 — 3. styleBlock (フォーム内カスタム CSS) > ルール (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec-3 — 3. styleBlock (フォーム内カスタム CSS) > 禁止事項・注意 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#xpages-dom-styleblockglobal — 3. styleBlock (フォーム内カスタム CSS) > フォーム外の XPages DOM は `styleBlockGlobal` で狙う (承認フロー/承認履歴/親子文書パネル等) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec-4 — 3. styleBlock (フォーム内カスタム CSS) > 実装挙動の詳細 (デバッグ時に役立つ) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec-5 — 3. styleBlock (フォーム内カスタム CSS) > スコープ化されない要素を狙うアンチパターン (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#3-1-styleblock — 3. styleBlock (フォーム内カスタム CSS) > 3.1 styleBlock テンプレート運用 (推奨) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-modaledit-true-panel — 4. `modalEdit: true` Panel をダイアログとして使う (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-1 — 4. `modalEdit: true` Panel をダイアログとして使う > 4.1 最小定義 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-2-dom — 4. `modalEdit: true` Panel をダイアログとして使う > 4.2 自動生成される DOM 構造 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-3 — 4. `modalEdit: true` Panel をダイアログとして使う > 4.3 モーダル内のボタンから親フォームへ値を書く (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-3-1 — 4. `modalEdit: true` Panel をダイアログとして使う > 4.3.1 ダイアログ内の一時フィールドはセット後にリセットする (サーバー永続化を避ける) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-4-bootstrap-card-choices-js-dropdown — 4. `modalEdit: true` Panel をダイアログとして使う > 4.4 Bootstrap `.card` 装飾の打ち消し + 推奨レイアウト (Choices.js dropdown overflow) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-5 — 4. `modalEdit: true` Panel をダイアログとして使う > 4.5 「開く」ボタンをアイコン化したい (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#4-6 — 4. `modalEdit: true` Panel をダイアログとして使う > 4.6 落とし穴と注意点 (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#5-radio-selectboxes-segmented-control-css — 5. radio / selectboxes を「ボタン群 (segmented control)」に CSS で見せるとき (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#sec-6 — 5. radio / selectboxes を「ボタン群 (segmented control)」に CSS で見せるとき > 落とし穴: 選択状態が出ない (= 「選択が押せない」ように見える) (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#6-panel-customconditional — 6. 「ステップ切替」を panel × `customConditional` で作るときの素通りゲート (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#6-1 — 6. 「ステップ切替」を panel × `customConditional` で作るときの素通りゲート > 6.1 切替フラグは「保存値」ではなく**ページ変数**を読む — 開くたび先頭ステップに戻す (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#6-2 — 6. 「ステップ切替」を panel × `customConditional` で作るときの素通りゲート > 6.2 ⚠ この修正はフォームの再エクスポートで消えることがある — 機械ガードを置く (https://mcp.cflow.cloud/docs/layout-styling.md) - layout-styling#red-flags — Red Flags (https://mcp.cflow.cloud/docs/layout-styling.md) - scripting#1-javascript-script-form-io — 1. JavaScript ロジックは `