MAS-139: 各入力項目にセル単位の入力範囲(データバリデーション)を追加
概要
| 項目 | 内容 |
|---|---|
| 案件ID | MAS-139 |
| カテゴリ | DDL・データ品質 |
| Phase | P1 |
| 優先度 | ★★★ |
| 所要時間 | 4-6h |
| 対象ファイル | 100_config/101_sys_config.js, 200_data/201_data_validator.js, 300_ui/301_ui_assist.js |
| 前提案件 | MAS-120, MAS-134 |
目的
setupAllSchemas の DDL ロジックに setDataValidation を組み込み、各入力列にセル単位の入力ルールを宣言的に適用することで、データ入力時のミスを未然に防ぎ、データ品質を向上させる。
現在のコード
100_config/101_sys_config.js の setupAllSchemas では、一部の列に対して個別に setVali や sysReqValidationNumberBetween_ を呼び出しているが、スキーマ定義(schemas)とは分離されており、メンテナンス性が低い。
// L1135 付近
setVali('TRN_BUDG', 5, 'Q', '41_trn_budget'); setVali('TRN_BUDG', 6, 'A', '41_trn_budget'); ...
// L1197 付近
batchRequests.push(sysReqValidationNumberBetween_(rsceSheetId, 2, 5, rsceRows, 0, 1, '0〜1の小数で入力(例: 0.05 = 5%)', true));
修正方針
1. スキーマ定義の拡張 (DSL 設計)
100_config/101_sys_config.js の schemas オブジェクトに validations キーを追加し、列名(またはインデックス)をキーとしてバリデーションルールを記述できるようにする。
'MST_PART': {
headers: ["有効フラグ", "取引先コード", "法人番号", ...],
color: "#666666",
validations: {
"法人番号": { type: 'regex', pattern: '^\\d{13}$', helpText: '13桁の数値を入力してください' },
"標準決済ラグ(月)": { type: 'range', min: 0, max: 12 },
"標準支払基準日": { type: 'range', min: 1, max: 31 }
}
}
2. バリデーション種別の追加
以下のバリデーション種別をサポートする。
| 種別 | DSL 形式 | Sheets API 条件 |
|---|---|---|
range | { type: 'range', min, max } | NUMBER_BETWEEN |
date_range | { type: 'date_range', min, max } | DATE_BETWEEN |
regex | { type: 'regex', pattern } | CUSTOM_FORMULA (REGEXMATCH) |
list | { type: 'list', values: [] } | ONE_OF_LIST |
text_length | { type: 'text_length', min, max } | CUSTOM_FORMULA (LEN) |
3. setupAllSchemas の改修
schemasをループする際、validationsが定義されていれば、それを解析してbatchRequestsに追加する。- 既存の
setVali呼び出しをvalidations定義に移行する。 strict: false(警告のみ)をデフォルトとし、入力拒否は行わない。
4. 201_data_validator.js との整合
201_data_validator.jsで行っている事後チェックのうち、セル単位で完結するものはsetDataValidationにも反映する。- 複数行・複数シートにまたがる整合性チェックは引き続き
201_data_validator.jsで担当する。
影響範囲
- DDL 適用:
setupAllSchemas実行時に全シートの入力規則が更新される。 - UI/UX: 不正な値を入力した際に赤い三角マーク(警告)が表示されるようになる。
- パフォーマンス:
batchUpdateを使用するため、実行時間への影響は軽微。
注意事項
- 既存データの保護:
setDataValidationは既存のデータには影響を与えない(警告が表示されるだけ)。 - カスタム数式の A1 参照:
CUSTOM_FORMULAを使用する場合、範囲全体に適用されるため、相対参照(例:A2)の扱いに注意が必要。 - プルダウンとの共存: 既存の
setVali(マスタ参照プルダウン)もvalidationsDSL に統合する。
エッジケース
| 条件 | 挙動 | 理由 |
|---|---|---|
| 空欄のセル | バリデーション対象外 | 必須入力チェックは 201_data_validator.js で行うため。 |
| 既存の不正データ | 警告(赤三角)が表示される | データの書き換えは行わず、ユーザーに修正を促す。 |
| 複数のバリデーション | 最後に適用されたものが優先 | Sheets API の制約。1セル1ルール。 |
| 正規表現の誤り | DDL 適用時にエラー | Utilities.computeDigest 等で事前にチェックはできないため、実装時にテストが必要。 |
実データ検証
| 項目 | 確認内容 |
|---|---|
| 法人番号 | 12_mst_partner の既存データに 13 桁以外の数値やハイフンが含まれていないか。 |
| 日付範囲 | 会計年度(8月〜7月)を跨ぐ入力が許容されるべきか(通常は許容し、警告のみとする)。 |
| プルダウン値 | 18_dropdown シートの定義と MST_DICT の実データに乖離がないか。 |
関連ドキュメント
| 仕様書 | 関連箇所 |
|---|---|
| MAS-134 setupAllSchemas の高速化 | batchUpdate の実装基盤。 |
| MAS-120 取引先マスタ拡張 | 新設された列(標準決済条件)へのバリデーション適用。 |
| spec_data_validation | バリデーションの全体方針。 |
人間が検討すべき事項
- 入力拒否 (strict: true) の是非:
- 基本は
false(警告のみ)とするが、法人番号や ID 形式など、誤ると後続処理が致命的に壊れる項目についてはtrueを検討するか。 - 結論: 初回導入時は混乱を避けるため全項目
falseとし、運用状況を見て判断する。
- 基本は
- エラーメッセージの日本語化:
inputMessageを活用して、何が正解かをユーザーに明示する。
- 正規表現のメンテナンス:
101_sys_config.jsに正規表現が散らばると管理が大変になるため、Constants等に集約するか。- 結論: スキーマ定義の一部として
101_sys_config.jsに記述する。
実装プロンプト(Claude Code 用)
あなたはGAS会計システム(bizlp-gas-accounting)のシニア開発者です。
案件 MAS-139「各入力項目にセル単位の入力範囲(データバリデーション)を追加」を実装してください。
## 実行前タスク
- `100_config/101_sys_config.js` を読み込み、`setupAllSchemas` の現在の実装と `schemas` 定義を確認してください。
- `200_data/201_data_validator.js` を読み込み、既存のバリデーションロジックを確認してください。
## 修正対象ファイル
- `100_config/101_sys_config.js`
- `200_data/201_data_validator.js` (必要に応じて)
## 実装内容
### 1. バリデーション用ヘルパー関数の追加 (`101_sys_config.js`)
- `sysReqValidationRegex_(sheetId, row1Based, col1Based, numRows, pattern, helpText, strict)`
- `sysReqValidationDateBetween_(sheetId, row1Based, col1Based, numRows, minDate, maxDate, helpText, strict)`
- `sysReqValidationTextLength_(sheetId, row1Based, col1Based, numRows, min, max, helpText, strict)`
- `sysReqValidationOneOfList_(sheetId, row1Based, col1Based, numRows, values, helpText, strict)`
### 2. `setupAllSchemas` の改修
- `schemas` の各定義に `validations` プロパティを追加し、主要な列にバリデーションを定義してください。
- 法人番号: 13桁数値正規表現
- 日数・月数・ラグ: 数値範囲 (0-365, 0-12 等)
- 発生日・決済日: 日付範囲 (2020-01-01 〜 2030-12-31 等)
- 稼働率: 0〜1 の数値範囲
- `setupAllSchemas` 内のループで、`validations` を解析して `batchRequests` に追加するロジックを実装してください。
- 既存の `setVali` 呼び出しを `validations` 定義に移行し、`setVali` 関数自体も `validations` DSL を処理するようにリファクタリングしてください。
### 3. スキーマハッシュの更新
- `validations` の変更が `computeSchemaHash_` に反映されることを確認してください(JSON.stringify なので自動的に反映されるはずです)。
## 制約
- `strict: false` をデフォルトとし、ユーザーの入力を妨げないようにしてください。
- `batchUpdate` を使用し、API 呼び出し回数を最小限に抑えてください。
## 動作確認
1. `setupAllSchemas` を実行し、各シートに入力規則が適用されることを確認する。
2. 不正な値(例: 14桁の法人番号、13ヶ月のラグ)を入力し、警告が表示されることを確認する。
3. `201_data_validator.js` を実行し、既存のチェック機能と競合していないことを確認する。
推奨実行モデル
| 工程 | 推奨モデル | 理由 |
|---|---|---|
| 設計・DSL定義 | Claude Sonnet 4.6 | スキーマ定義の拡張とリファクタリングのバランスが必要。 |
| 実装 | Claude Sonnet 4.6 | batchUpdate のリクエスト構築に正確性が求められる。 |
| テスト・検証 | Claude Haiku 4.5 | 適用されたバリデーションの動作確認。 |
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-04-20 | 初版作成。setupAllSchemas への setDataValidation 統合設計。 |
仕様書作成プロンプト(再現性・監査性のため必ず記録)
展開して表示
Create development specification for MAS-139 "Cell-level Data Validation". Output to docs/dev/dev_mas-139_data_validation.md. Follow the template docs/_internal/dev_spec_prompt_template.md. Use 5-step split execution as per v1.7 principles.
Step 2-1: Skeleton (Headings only)
Step 2-2: Overview, Purpose, DSL Design, Rule Types, Scope, etc.
Step 2-3a: Edge Cases, Human-in-the-Loop, Data Integrity.
Step 2-3b: Implementation Prompt, Recommended Model, Changelog.
Step 2-4: Record the prompt used to create this spec in
ID: MAS-139 Name: 各入力項目にセル単位の入力範囲(データバリデーション)を追加 Category: DDL・データ品質 Phase: P1 Priority: ★★★ Time: 4-6h Files: 100_config/101_sys_config.js, 200_data/201_data_validator.js, 300_ui/301_ui_assist.js Pre-requisites: MAS-120, MAS-134