最終更新: 2026/06/22 18:56
MAS-116: データ整備のマイグレーションスクリプト基盤
概要
| 項目 | 内容 |
|---|---|
| 案件ID | MAS-116 |
| カテゴリ | DevOps |
| Phase | P1 |
| 優先度 | ★★★ |
| 所要時間 | 30分 |
| 対象ファイル | CLAUDE.md(ガイドライン追記)docs/_internal/data_maintenance.md(テンプレート追記) |
目的
データ整備(マスタ追加・DDLスキーマ変更等)を800_ops/配下のコードとして記述し、dev/prodの両環境で安全に実行する仕組みを確立する。
現在のステータス: 実質パターン確立済み
既存の3ファイルが事実上のマイグレーション基盤として機能している。
| ファイル | 関数名 | 冪等性チェック | ログ表示 |
|---|---|---|---|
804_migration_d01_d03.js | migrationD01D03() | 主科目コードの重複チェック | alert + logInfo |
805_migration_d04_d06.js | migrationD04D06() | 説明列の入力済みチェック | alert + logInfo |
806_cleanup_empty_rows.js | cleanupEmptyRows() | 空行なしなら何もしない | alert + logInfo |
メニュー登録も完了(101_sys_config.js L347-355: 「🔧 マイグレーション」メニュー)。
確立済みパターン
function migrationXXX() {
const FUNC = '関数名';
try {
// 1. シート取得
var sheet = Utils.getSheetByKey('KEY', 'fallback_name');
// 2. 既存データ読み込み(冪等性チェック用)
var data = sheet.getDataRange().getValues();
// 3. 冪等性チェック付きで変更を適用
var added = 0, skipped = 0;
for (各変更) {
if (既に存在) { skipped++; continue; }
// 変更適用
added++;
}
// 4. 結果サマリーを表示
var summary = '追加: ' + added + '件 / スキップ: ' + skipped + '件';
Utils.logInfo(FUNC, summary);
SpreadsheetApp.getUi().alert('マイグレーション完了', summary, SpreadsheetApp.getUi().ButtonSet.OK);
} catch (e) {
Utils.logError(FUNC, e);
SpreadsheetApp.getUi().alert('エラー', e.message, SpreadsheetApp.getUi().ButtonSet.OK);
}
}
残作業: ガイドラインの明文化
パターンは確立済みだが、命名規則・テンプレート・運用手順がドキュメント化されていない。
明文化すべき内容
| 項目 | ルール |
|---|---|
| ファイル命名 | 8XX_migration_dNN_dNN.js(案件ID範囲を含める) |
| 関数命名 | migrationDNNDNN()(ファイル名と対応) |
| 冪等性 | 必須。「既に存在したらスキップ」のチェックを含める |
| ログ出力 | Utils.logInfo + SpreadsheetApp.getUi().alert の両方 |
| メニュー登録 | 101_sys_config.js の「🔧 マイグレーション」メニューに追加 |
| 実行順序 | dev で実行・検証 → npm run push:prod → prod で実行 |
| 実行済み記録 | データの存在チェックで冪等性を担保(別途スタンプは不要) |
修正方針
CLAUDE.md への追記
「GAS ファイル番号体系」セクションの 800_ops/ の説明に、マイグレーションスクリプトのガイドラインを追記。
data_maintenance.md へのテンプレート追記
新規マイグレーション案件を作成する際のテンプレートを追記。
注意事項
- 804-806のファイル番号は既に使用済み。次のマイグレーションは807から
- prod デプロイ時に
900_test/は自動削除されるが、800_ops/は残る。マイグレーションスクリプトは prod にもデプロイされる setupAllSchemasと マイグレーションの実行順序に依存関係がある場合はドキュメントに明記する
人間が検討すべき事項
- 実行済みマイグレーションの記録方法(03_sys_params に適用済みリストを保持するか): 現行は冪等性チェックのみで十分に機能しており、追加記録は不要と判断
- ロールバック手順の要否: 現状の規模では手動対応で十分
実装プロンプト(Claude Code 用)
あなたはGAS会計システム(bizlp-gas-accounting)のシニア開発者です。
案件 S-44「マイグレーションスクリプト基盤」のガイドライン明文化を行ってください。
## 実行前タスク
以下のファイルを読み込んでください:
1. `800_ops/804_migration_d01_d03.js` — 確立済みパターンの参考実装
2. `800_ops/805_migration_d04_d06.js` — 同上
3. `800_ops/806_cleanup_empty_rows.js` — 同上
4. `100_config/101_sys_config.js` — L347-355のマイグレーションメニュー登録
5. `CLAUDE.md` — 「GAS ファイル番号体系」セクション
6. `docs/_internal/data_maintenance.md`
7. `docs/dev/dev_mas-116_migration_framework.md`
## 実装内容
### A: CLAUDE.md への追記
「GAS ファイル番号体系」の800_ops/の行の後に、以下のガイドラインを追記:
- マイグレーションスクリプトの命名規則(ファイル名・関数名)
- 冪等性の必須要件
- ログ出力パターン(logInfo + alert)
- メニュー登録手順
- 実行手順(dev → 検証 → push:prod → prod実行)
### B: data_maintenance.md へのテンプレート追記
「マイグレーションスクリプト テンプレート」セクションを追加し、新規スクリプト作成時のコードテンプレートを記載。
## 制約
- 既存の804-806ファイルは変更しない
- CLAUDE.md の既存セクション構造を維持
推奨実行モデル
| 工程 | 推奨モデル | 理由 |
|---|---|---|
| 仕様書作成(本ドキュメント) | Claude Opus 4.6 | 既存パターンの分析とガイドラインの体系化 |
| 実装 | Claude Haiku 4.5 | ドキュメント追記のみ。コード変更なし |
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-04-14 | 初版作成 |