yodogawa 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.windsurf/templates/documentation-rules.md +143 -0
- package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
- package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
- package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
- package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
- package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
- package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
- package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
- package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
- package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
- package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
- package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
- package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
- package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
- package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
- package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
- package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
- package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
- package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
- package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
- package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
- package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
- package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
- package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
- package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
- package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
- package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
- package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
- package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
- package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
- package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
- package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
- package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
- package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
- package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
- package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
- package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
- package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
- package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
- package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
- package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
- package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
- package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
- package/.windsurf/workflows/x-CI-Setup.md +641 -0
- package/.windsurf/workflows/x-Code-Refactor.md +71 -0
- package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
- package/.windsurf/workflows/x-Component-Create.md +359 -0
- package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
- package/.windsurf/workflows/x-Database-Seed.md +300 -0
- package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
- package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
- package/.windsurf/workflows/x-Logging-Add.md +682 -0
- package/.windsurf/workflows/x-Migration-Create.md +354 -0
- package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
- package/.windsurf/workflows/x-Repository-Push.md +375 -0
- package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
- package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
- package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
- package/README.md +280 -0
- package/bin/cli.js +74 -0
- package/package.json +28 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: データベーススキーマの変更を安全にマイグレーションとして作成するワークフロー
|
|
3
|
+
auto_execution_mode: 1
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Migration-Create (x-Migration-Create)
|
|
7
|
+
|
|
8
|
+
## 目的
|
|
9
|
+
|
|
10
|
+
- データベーススキーマの変更を安全かつ追跡可能な形でマイグレーションとして作成する。
|
|
11
|
+
- 本番環境へのデプロイ時にスキーマ変更を自動適用できるようにする。
|
|
12
|
+
- ロールバック可能なマイグレーションを設計し、問題発生時に迅速に戻せるようにする。
|
|
13
|
+
- チーム全体でスキーマ変更を共有し、環境間の一貫性を保つ。
|
|
14
|
+
|
|
15
|
+
## 前提
|
|
16
|
+
|
|
17
|
+
- データベースマイグレーションツールが設定されている(ORM内蔵またはスタンドアロン)。
|
|
18
|
+
- データベース接続が確立されている。
|
|
19
|
+
- 既存のマイグレーションがすべて適用されている(clean state)。
|
|
20
|
+
- Git リポジトリが初期化されている。
|
|
21
|
+
|
|
22
|
+
## 手順
|
|
23
|
+
|
|
24
|
+
### 1. スキーマ変更の要件確認
|
|
25
|
+
|
|
26
|
+
**変更の種類**:
|
|
27
|
+
- **テーブル操作**: 新規作成、削除、リネーム
|
|
28
|
+
- **カラム操作**: 追加、削除、リネーム、型変更
|
|
29
|
+
- **制約操作**: 主キー、外部キー、一意制約、NOT NULL、CHECK制約
|
|
30
|
+
- **インデックス操作**: 追加、削除、変更
|
|
31
|
+
- **データマイグレーション**: 既存データの変換
|
|
32
|
+
|
|
33
|
+
**影響範囲の確認**:
|
|
34
|
+
- どのテーブル/カラムに影響するか
|
|
35
|
+
- 既存データへの影響(データ損失の可能性)
|
|
36
|
+
- アプリケーションコードへの影響
|
|
37
|
+
- 破壊的変更かどうか
|
|
38
|
+
|
|
39
|
+
### 2. マイグレーション戦略の選択
|
|
40
|
+
|
|
41
|
+
**マイグレーションの種類**:
|
|
42
|
+
|
|
43
|
+
**スキーマのみのマイグレーション**:
|
|
44
|
+
- DDL(Data Definition Language)のみ
|
|
45
|
+
- データ変換なし
|
|
46
|
+
- 高速に実行可能
|
|
47
|
+
|
|
48
|
+
**データマイグレーション含む**:
|
|
49
|
+
- DDL + DML(Data Manipulation Language)
|
|
50
|
+
- 既存データの変換が必要
|
|
51
|
+
- 実行時間が長い可能性
|
|
52
|
+
|
|
53
|
+
**段階的マイグレーション**(破壊的変更の場合):
|
|
54
|
+
1. 第1段階: 新しいカラム/テーブルを追加(後方互換性あり)
|
|
55
|
+
2. アプリケーションコードを更新
|
|
56
|
+
3. 第2段階: 古いカラム/テーブルを削除
|
|
57
|
+
|
|
58
|
+
### 3. マイグレーションファイルの作成
|
|
59
|
+
|
|
60
|
+
**一般的なアプローチ**:
|
|
61
|
+
|
|
62
|
+
**自動生成**:
|
|
63
|
+
- スキーマ定義ファイルの差分から自動生成
|
|
64
|
+
- ORM のモデル定義と DB の差分を検出
|
|
65
|
+
- 手動レビューが必要
|
|
66
|
+
|
|
67
|
+
**手動作成**:
|
|
68
|
+
- SQL を直接記述
|
|
69
|
+
- 細かい制御が可能
|
|
70
|
+
- エラーのリスクが高い
|
|
71
|
+
|
|
72
|
+
**マイグレーションファイルの基本構造**:
|
|
73
|
+
```
|
|
74
|
+
マイグレーションファイル:
|
|
75
|
+
├── バージョン番号/タイムスタンプ
|
|
76
|
+
├── 説明的な名前
|
|
77
|
+
├── up/apply メソッド(変更を適用)
|
|
78
|
+
└── down/revert メソッド(変更を元に戻す)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**命名規則**:
|
|
82
|
+
- タイムスタンプ + 説明: `20240101120000_add_age_to_users`
|
|
83
|
+
- 連番 + 説明: `001_add_age_to_users`
|
|
84
|
+
- 説明的で検索しやすい名前を使用
|
|
85
|
+
|
|
86
|
+
### 4. マイグレーションの設計
|
|
87
|
+
|
|
88
|
+
**安全なマイグレーションのチェックリスト**:
|
|
89
|
+
- [ ] ロールバック(down/revert)が実装されている
|
|
90
|
+
- [ ] 冪等性が保証されている(複数回実行しても安全)
|
|
91
|
+
- [ ] トランザクション内で実行される(可能な場合)
|
|
92
|
+
- [ ] データ損失のリスクが最小化されている
|
|
93
|
+
- [ ] パフォーマンスへの影響が考慮されている
|
|
94
|
+
- [ ] 環境変数や設定による制御が可能
|
|
95
|
+
|
|
96
|
+
**よくあるスキーマ変更パターン**:
|
|
97
|
+
|
|
98
|
+
**カラム追加(安全)**:
|
|
99
|
+
```sql
|
|
100
|
+
-- Up
|
|
101
|
+
ALTER TABLE users ADD COLUMN age INTEGER;
|
|
102
|
+
|
|
103
|
+
-- Down
|
|
104
|
+
ALTER TABLE users DROP COLUMN age;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**NOT NULL カラム追加(段階的)**:
|
|
108
|
+
```sql
|
|
109
|
+
-- 第1段階: NULL許可で追加
|
|
110
|
+
ALTER TABLE users ADD COLUMN email VARCHAR(255);
|
|
111
|
+
|
|
112
|
+
-- 第2段階: デフォルト値設定またはデータ投入後にNOT NULL制約追加
|
|
113
|
+
UPDATE users SET email = 'default@example.com' WHERE email IS NULL;
|
|
114
|
+
ALTER TABLE users ALTER COLUMN email SET NOT NULL;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**カラムリネーム(破壊的、段階的に実施)**:
|
|
118
|
+
```
|
|
119
|
+
1. 新カラム追加
|
|
120
|
+
2. データコピー
|
|
121
|
+
3. アプリケーションコード更新
|
|
122
|
+
4. 旧カラム削除
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**インデックス追加(並列実行)**:
|
|
126
|
+
```sql
|
|
127
|
+
-- PostgreSQL: ロックせずにインデックス作成
|
|
128
|
+
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
|
|
129
|
+
|
|
130
|
+
-- ロールバック
|
|
131
|
+
DROP INDEX CONCURRENTLY idx_users_email;
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 5. データマイグレーションの実装
|
|
135
|
+
|
|
136
|
+
**データ変換が必要な場合**:
|
|
137
|
+
|
|
138
|
+
**基本パターン**:
|
|
139
|
+
```sql
|
|
140
|
+
-- カラム追加
|
|
141
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(200);
|
|
142
|
+
|
|
143
|
+
-- 既存データの変換
|
|
144
|
+
UPDATE users SET full_name = first_name || ' ' || last_name;
|
|
145
|
+
|
|
146
|
+
-- NULL制約追加(オプション)
|
|
147
|
+
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**大量データの処理**:
|
|
151
|
+
- バッチ処理で分割実行
|
|
152
|
+
- トランザクションサイズの制御
|
|
153
|
+
- 進捗ログの出力
|
|
154
|
+
|
|
155
|
+
**ロールバック時のデータ復元**:
|
|
156
|
+
- データバックアップの作成
|
|
157
|
+
- 変換前のデータを一時保存
|
|
158
|
+
- 可逆的な変換の設計
|
|
159
|
+
|
|
160
|
+
### 6. マイグレーションのテスト
|
|
161
|
+
|
|
162
|
+
**ローカル環境でのテスト**:
|
|
163
|
+
|
|
164
|
+
**適用テスト**:
|
|
165
|
+
```bash
|
|
166
|
+
# マイグレーション適用
|
|
167
|
+
<migration-tool> migrate up
|
|
168
|
+
# または
|
|
169
|
+
<migration-tool> migrate apply
|
|
170
|
+
|
|
171
|
+
# スキーマ確認
|
|
172
|
+
<db-client> -d <database> -c "\d <table>"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**ロールバックテスト**:
|
|
176
|
+
```bash
|
|
177
|
+
# ロールバック実行
|
|
178
|
+
<migration-tool> migrate down
|
|
179
|
+
# または
|
|
180
|
+
<migration-tool> migrate revert
|
|
181
|
+
|
|
182
|
+
# スキーマが元に戻ったか確認
|
|
183
|
+
<db-client> -d <database> -c "\d <table>"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**再適用テスト(冪等性確認)**:
|
|
187
|
+
```bash
|
|
188
|
+
# 再度適用
|
|
189
|
+
<migration-tool> migrate up
|
|
190
|
+
|
|
191
|
+
# エラーなく完了することを確認
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**アプリケーションの動作確認**:
|
|
195
|
+
- 開発サーバーを起動
|
|
196
|
+
- CRUD 操作が正常に動作するか確認
|
|
197
|
+
- 新しいカラム/テーブルが使用できるか確認
|
|
198
|
+
|
|
199
|
+
### 7. マイグレーションファイルの最終確認
|
|
200
|
+
|
|
201
|
+
**レビューチェックリスト**:
|
|
202
|
+
- [ ] SQL 構文が正しいか
|
|
203
|
+
- [ ] データ損失のリスクがないか
|
|
204
|
+
- [ ] パフォーマンスへの影響が許容範囲か
|
|
205
|
+
- [ ] ロールバックが正しく実装されているか
|
|
206
|
+
- [ ] コメントで変更理由が説明されているか
|
|
207
|
+
- [ ] 依存する他のマイグレーションが明記されているか
|
|
208
|
+
|
|
209
|
+
**破壊的変更の場合**:
|
|
210
|
+
- チームレビューを必須にする
|
|
211
|
+
- ステージング環境で先にテスト
|
|
212
|
+
- データバックアップの確認
|
|
213
|
+
- ロールバック手順の文書化
|
|
214
|
+
|
|
215
|
+
### 8. マイグレーション状態の確認
|
|
216
|
+
|
|
217
|
+
**現在の状態確認**:
|
|
218
|
+
```bash
|
|
219
|
+
# 適用済みマイグレーションの確認
|
|
220
|
+
<migration-tool> migrate status
|
|
221
|
+
# または
|
|
222
|
+
<migration-tool> migrate history
|
|
223
|
+
|
|
224
|
+
# 未適用マイグレーションの確認
|
|
225
|
+
<migration-tool> migrate pending
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**マイグレーションログの確認**:
|
|
229
|
+
- いつ適用されたか
|
|
230
|
+
- 誰が適用したか
|
|
231
|
+
- どの環境で適用されたか
|
|
232
|
+
|
|
233
|
+
### 9. ドキュメント化
|
|
234
|
+
|
|
235
|
+
**マイグレーションの説明**:
|
|
236
|
+
- 変更の目的
|
|
237
|
+
- 影響範囲
|
|
238
|
+
- ロールバック手順
|
|
239
|
+
- 関連する Issue/Ticket番号
|
|
240
|
+
|
|
241
|
+
**コメント例**:
|
|
242
|
+
```sql
|
|
243
|
+
-- Migration: Add age column to users table
|
|
244
|
+
-- Purpose: Store user age for age-based features
|
|
245
|
+
-- Breaking: No (nullable column)
|
|
246
|
+
-- Rollback: Safe, no data loss
|
|
247
|
+
-- Related: TICKET-123
|
|
248
|
+
|
|
249
|
+
ALTER TABLE users ADD COLUMN age INTEGER;
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 10. Git コミット
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
git add migrations/
|
|
256
|
+
|
|
257
|
+
git commit -m "feat: add age column to users table
|
|
258
|
+
|
|
259
|
+
- Add nullable age column to users table
|
|
260
|
+
- Migration file: 20240101_add_age_to_users
|
|
261
|
+
- Supports rollback
|
|
262
|
+
- No breaking changes
|
|
263
|
+
|
|
264
|
+
Related: TICKET-123
|
|
265
|
+
|
|
266
|
+
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
267
|
+
|
|
268
|
+
Co-Authored-By: Claude <noreply@anthropic.com)"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## 完了条件
|
|
272
|
+
|
|
273
|
+
- マイグレーションファイルが作成されている
|
|
274
|
+
- ローカル環境でマイグレーションが正常に適用される
|
|
275
|
+
- ロールバックが正常に動作する
|
|
276
|
+
- アプリケーションが正常に動作する
|
|
277
|
+
- チームレビューが完了している(破壊的変更の場合)
|
|
278
|
+
- ドキュメントが更新されている
|
|
279
|
+
- Git にコミットされている
|
|
280
|
+
|
|
281
|
+
## エスカレーション
|
|
282
|
+
|
|
283
|
+
- **マイグレーション適用が失敗する**:
|
|
284
|
+
- SQL 構文エラーを確認
|
|
285
|
+
- データ型の不一致を確認
|
|
286
|
+
- 制約違反を確認
|
|
287
|
+
- トランザクションログを確認
|
|
288
|
+
|
|
289
|
+
- **データ損失のリスクがある**:
|
|
290
|
+
- バックアップを取る
|
|
291
|
+
- 段階的マイグレーションに分割
|
|
292
|
+
- データ変換スクリプトを別途作成
|
|
293
|
+
- カラム削除前に deprecated フラグを設定
|
|
294
|
+
|
|
295
|
+
- **本番環境でのパフォーマンス影響**:
|
|
296
|
+
- メンテナンスウィンドウでの実行を検討
|
|
297
|
+
- オンラインスキーマ変更ツールの使用
|
|
298
|
+
- インデックス作成を並列実行(CONCURRENTLY)
|
|
299
|
+
- バッチ処理で分割実行
|
|
300
|
+
|
|
301
|
+
- **マイグレーションの競合**:
|
|
302
|
+
- 最新の変更を pull
|
|
303
|
+
- マイグレーションの順序を調整
|
|
304
|
+
- タイムスタンプの重複を解決
|
|
305
|
+
- マージ戦略を決定
|
|
306
|
+
|
|
307
|
+
## ベストプラクティス
|
|
308
|
+
|
|
309
|
+
- **小さく分割**: 大きなスキーマ変更は複数のマイグレーションに分割
|
|
310
|
+
- **後方互換性**: 可能な限り後方互換性のある変更を優先
|
|
311
|
+
- **段階的な削除**: カラム/テーブル削除は2段階で実施
|
|
312
|
+
1. アプリケーションコードから削除
|
|
313
|
+
2. 次のリリースでスキーマから削除
|
|
314
|
+
- **デフォルト値**: NOT NULL カラムを追加する場合はデフォルト値を設定
|
|
315
|
+
- **インデックス**: パフォーマンスに影響するカラムにはインデックスを追加
|
|
316
|
+
- **外部キー**: データ整合性のため、適切な外部キー制約を設定
|
|
317
|
+
- **テスト**: マイグレーション適用前にステージング環境でテスト
|
|
318
|
+
- **バックアップ**: 本番環境でのマイグレーション前に必ずバックアップ
|
|
319
|
+
- **ロールバック計画**: 問題発生時のロールバック手順を事前に準備
|
|
320
|
+
- **命名規則**: マイグレーションファイル名は変更内容が分かりやすいものに
|
|
321
|
+
- **トランザクション**: 可能な限りトランザクション内で実行
|
|
322
|
+
- **冪等性**: 複数回実行しても安全なマイグレーションを設計
|
|
323
|
+
|
|
324
|
+
## 参考: ツール別の実装パターン
|
|
325
|
+
|
|
326
|
+
**ORM 統合型マイグレーションツール**:
|
|
327
|
+
- Prisma (Node.js)
|
|
328
|
+
- TypeORM (Node.js)
|
|
329
|
+
- Sequelize (Node.js)
|
|
330
|
+
- Django ORM (Python)
|
|
331
|
+
- SQLAlchemy + Alembic (Python)
|
|
332
|
+
- ActiveRecord (Ruby/Rails)
|
|
333
|
+
- Entity Framework (C#/.NET)
|
|
334
|
+
- GORM (Go)
|
|
335
|
+
|
|
336
|
+
**スタンドアロンマイグレーションツール**:
|
|
337
|
+
- Flyway (Java/多言語)
|
|
338
|
+
- Liquibase (Java/多言語)
|
|
339
|
+
- golang-migrate (Go)
|
|
340
|
+
- dbmate (多言語)
|
|
341
|
+
- sqitch (Perl/多言語)
|
|
342
|
+
|
|
343
|
+
**マイグレーションコマンド例**:
|
|
344
|
+
```bash
|
|
345
|
+
# ORM内蔵
|
|
346
|
+
prisma migrate dev --name add_age_to_users
|
|
347
|
+
python manage.py makemigrations
|
|
348
|
+
rails generate migration AddAgeToUsers
|
|
349
|
+
|
|
350
|
+
# スタンドアロン
|
|
351
|
+
flyway migrate
|
|
352
|
+
liquibase update
|
|
353
|
+
migrate up
|
|
354
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: インシデントやバグ報告の再現から証拠収集、仮説検証、根本原因の特定、対策提案、レポート共有までを体系的に進める調査ワークフロー
|
|
3
|
+
auto_execution_mode: 1
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Problem-RootCauseAnalysis (x-Problem-RootCauseAnalysis)
|
|
7
|
+
|
|
8
|
+
## 目的
|
|
9
|
+
|
|
10
|
+
- バグ報告や予期せぬ挙動の根本原因を特定し、再発防止策まで導き出す。
|
|
11
|
+
- 実装担当・QA・SREなど関係者と共有できる調査ログを残し、学習サイクルを回す。
|
|
12
|
+
|
|
13
|
+
## 前提
|
|
14
|
+
|
|
15
|
+
- 調査対象の現象が再現条件・発生環境とともに共有されていること。
|
|
16
|
+
- 必要なログ閲覧権限や監視ダッシュボードへのアクセスが許可されていること。
|
|
17
|
+
- セキュリティ/個人情報を含むデータを扱う場合は、組織のルールに沿ってマスキング・持ち出し制限を守ること。
|
|
18
|
+
|
|
19
|
+
## 手順
|
|
20
|
+
|
|
21
|
+
1. **インシデント概要の整理**
|
|
22
|
+
- 依頼メッセージ・チケット・アラート内容から「何が」「いつ」「どこで」発生したかを要約する。
|
|
23
|
+
- 影響範囲(ユーザー数・機能・SLA)と緊急度を明確化し、必要に応じてエスカレーションルールを確認する。
|
|
24
|
+
|
|
25
|
+
2. **現象の再現可否を確認**
|
|
26
|
+
- 再現手順が提示されていなければ依頼元へ質問して補完する。
|
|
27
|
+
- 再現環境(本番 / ステージング / ローカル)を決定し、安全に検証できる範囲を確保する。
|
|
28
|
+
|
|
29
|
+
3. **観測データの収集**
|
|
30
|
+
- ログ、メトリクス、トレース、アラート履歴など使える証拠を列挙し、優先度順に取得する。
|
|
31
|
+
- 時系列(発生前→直後→平常時)で比較できるようメモを残す。
|
|
32
|
+
- `run_command` や MCP (ログ閲覧ツール等) を使う際は、実行目的と安全性を確認してから操作する。
|
|
33
|
+
|
|
34
|
+
4. **仮説の構築と検証計画**
|
|
35
|
+
- 観測した事実から原因候補を3〜5個程度洗い出し、「もし○○が原因なら△△が起きるはず」と期待結果を定義する。
|
|
36
|
+
- 検証順序を決め、必要なら performance-engineer や security-engineer など他エージェントの支援を計画する。
|
|
37
|
+
|
|
38
|
+
5. **検証の実施**
|
|
39
|
+
- 仮説ごとにログ再確認・設定差分照合・リクエスト追跡などの検証アクションを行う。
|
|
40
|
+
- 各検証結果を「仮説 / 期待結果 / 実際の結果 / 判定」で記録し、却下した仮説も残す。
|
|
41
|
+
|
|
42
|
+
6. **根本原因の特定と影響分析**
|
|
43
|
+
- 最も整合する仮説に対し、なぜ起きたかをシーケンス図や因果関係で説明できるレベルまで掘り下げる。
|
|
44
|
+
- 影響したコンポーネント・依存サービス・再発条件を整理し、関連チームへの共有事項を抽出する。
|
|
45
|
+
|
|
46
|
+
7. **恒久対応と暫定対応の提案**
|
|
47
|
+
- 恒久対策(コード修正・設定変更・設計見直しなど)と暫定的な緩和策(リトライ増加・スロットリング等)を分けて提示する。
|
|
48
|
+
- 必要なタスク、担当、期限、テスト指標を簡潔にまとめる。
|
|
49
|
+
|
|
50
|
+
8. **レポート化とフォローアップ**
|
|
51
|
+
- 事象概要 / タイムライン / 根本原因 / 対策 / 教訓 を含む報告テンプレートを埋め、依頼元に共有する。
|
|
52
|
+
- 再発防止のためにドキュメント更新やモニタリング強化が必要なら提案する。
|
|
53
|
+
- 未解決のフォローアップがある場合はTODOとして明示する。
|
|
54
|
+
|
|
55
|
+
## 完了条件
|
|
56
|
+
|
|
57
|
+
- 根本原因が証拠付きで説明され、影響範囲と再発条件が整理されている。
|
|
58
|
+
- 恒久対策と暫定対策、必要なフォローアップタスクが明文化されている。
|
|
59
|
+
- 調査ログ(仮説と検証結果)が共有済みで、関係者が次のアクションに移れる状態になっている。
|
|
60
|
+
|
|
61
|
+
## エスカレーション
|
|
62
|
+
|
|
63
|
+
- 高優先度インシデント(SLA違反の恐れ、広範囲障害)の場合は即座にインシデントコマンダー/SREへ通知する。
|
|
64
|
+
- 権限が必要なログや本番操作が絡む場合は、アクセス権限者に連絡し自律的に実行しない。
|
|
65
|
+
- 調査が24時間以上停滞する、または仮説が立てられない場合は、チームリードに状況共有し追加リソースを依頼する。
|