概要

項目内容
案件IDMAS-139
カテゴリDDL・データ品質
PhaseP1
優先度★★★
所要時間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.jssetupAllSchemas では、一部の列に対して個別に setValisysReqValidationNumberBetween_ を呼び出しているが、スキーマ定義(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.jsschemas オブジェクトに 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 を使用するため、実行時間への影響は軽微。

注意事項

  1. 既存データの保護: setDataValidation は既存のデータには影響を与えない(警告が表示されるだけ)。
  2. カスタム数式の A1 参照: CUSTOM_FORMULA を使用する場合、範囲全体に適用されるため、相対参照(例: A2)の扱いに注意が必要。
  3. プルダウンとの共存: 既存の setVali(マスタ参照プルダウン)も validations DSL に統合する。

エッジケース

条件挙動理由
空欄のセルバリデーション対象外必須入力チェックは 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バリデーションの全体方針。

人間が検討すべき事項

  1. 入力拒否 (strict: true) の是非:
    • 基本は false(警告のみ)とするが、法人番号や ID 形式など、誤ると後続処理が致命的に壊れる項目については true を検討するか。
    • 結論: 初回導入時は混乱を避けるため全項目 false とし、運用状況を見て判断する。
  2. エラーメッセージの日本語化:
    • inputMessage を活用して、何が正解かをユーザーに明示する。
  3. 正規表現のメンテナンス:
    • 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.6batchUpdate のリクエスト構築に正確性が求められる。
テスト・検証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