@k2works/claude-code-booster 1.13.0 → 2.0.1

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.
Files changed (64) hide show
  1. package/bin/claude-code-booster +5 -7
  2. package/lib/assets/.claude/README.md +73 -19
  3. package/lib/assets/.claude/agents/xp-architect.md +250 -0
  4. package/lib/assets/.claude/agents/xp-executive.md +207 -0
  5. package/lib/assets/.claude/agents/xp-interaction-designer.md +239 -0
  6. package/lib/assets/.claude/agents/xp-product-manager.md +245 -0
  7. package/lib/assets/.claude/agents/xp-programmer.md +268 -0
  8. package/lib/assets/.claude/agents/xp-project-manager.md +229 -0
  9. package/lib/assets/.claude/agents/xp-technical-writer.md +224 -0
  10. package/lib/assets/.claude/agents/xp-tester.md +265 -0
  11. package/lib/assets/.claude/agents/xp-user-representative.md +204 -0
  12. package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +49 -57
  13. package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +54 -58
  14. package/lib/assets/.claude/skills/analyzing-business/SKILL.md +52 -74
  15. package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +50 -53
  16. package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +56 -56
  17. package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +56 -109
  18. package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +61 -57
  19. package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +61 -57
  20. package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +57 -55
  21. package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +66 -67
  22. package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +58 -56
  23. package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +51 -57
  24. package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +45 -60
  25. package/lib/assets/.claude/skills/creating-adr/SKILL.md +38 -40
  26. package/lib/assets/.claude/skills/developing-backend/SKILL.md +49 -55
  27. package/lib/assets/.claude/skills/developing-frontend/SKILL.md +47 -50
  28. package/lib/assets/.claude/skills/developing-release/SKILL.md +60 -95
  29. package/lib/assets/.claude/skills/generating-slides/SKILL.md +58 -100
  30. package/lib/assets/.claude/skills/git-commit/SKILL.md +27 -52
  31. package/lib/assets/.claude/skills/killing-processes/SKILL.md +16 -70
  32. package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -0
  33. package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -0
  34. package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -0
  35. package/lib/assets/.claude/skills/{managing-docs → operating-docs}/SKILL.md +1 -1
  36. package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -0
  37. package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -0
  38. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +65 -95
  39. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +60 -155
  40. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +158 -0
  41. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +60 -119
  42. package/lib/assets/.claude/skills/planning-releases/SKILL.md +63 -168
  43. package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +62 -266
  44. package/lib/assets/.claude/skills/tracking-progress/SKILL.md +49 -122
  45. package/lib/assets/CLAUDE.md +7 -2
  46. package/lib/assets/README.md +3 -34
  47. package/lib/assets/docs/development/index.md +14 -8
  48. package/lib/assets/docs/reference//343/202/250/343/202/257/343/202/271/343/203/210/343/203/252/343/203/274/343/203/240/343/203/227/343/203/255/343/202/260/343/203/251/343/203/237/343/203/263/343/202/260.md +29 -39
  49. package/lib/assets/docs/reference//351/201/213/347/224/250/343/202/271/343/202/257/343/203/252/343/203/227/343/203/210/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +421 -0
  50. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +69 -5
  51. package/lib/assets/docs/template/AWS/343/202/271/343/203/206/343/203/274/343/202/270/343/203/263/343/202/260/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +1366 -0
  52. package/lib/assets/docs/template/AWS/343/203/227/343/203/255/343/203/200/343/202/257/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +634 -0
  53. package/lib/assets/docs/template//343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +547 -0
  54. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273.md +123 -1
  55. package/lib/assets/docs/template//350/250/255/350/250/210.md +12 -2
  56. package/lib/assets/docs/template//351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +688 -0
  57. package/package.json +1 -1
  58. package/lib/assets/.claude/SKILLS_TEMPLATE.md +0 -100
  59. package/lib/assets/.claude/agents/roles/.gitkeep +0 -0
  60. package/lib/assets/.claude/skills/managing-operations/DEPLOY.md +0 -77
  61. package/lib/assets/.claude/skills/managing-operations/SETUP_CSHARP.md +0 -80
  62. package/lib/assets/.claude/skills/managing-operations/SETUP_FRONTEND.md +0 -84
  63. package/lib/assets/.claude/skills/managing-operations/SETUP_JAVA.md +0 -75
  64. package/lib/assets/.claude/skills/managing-operations/SKILL.md +0 -156
@@ -53,40 +53,9 @@ claude mcp add -s project codex -- npx @openai/codex mcp-server
53
53
 
54
54
  `.claude/skills/` ディレクトリに定義された Skills により、AI アシスタントがタスクに応じた専門的な指示を自動的に読み込みます。Progressive Disclosure(段階的開示)により、必要なスキルのみがコンテキストに展開されます。
55
55
 
56
- ##### Skills 一覧
57
-
58
- | カテゴリ | スキル | 説明 |
59
- | :--- | :--- | :--- |
60
- | **オーケストレーション** | `orchestrating-analysis` | 分析フェーズ全体のワークフロー案内 |
61
- | | `orchestrating-development` | 開発フェーズ全体の TDD ワークフロー案内 |
62
- | | `orchestrating-project` | 計画・進捗管理フェーズ全体のワークフロー案内 |
63
- | **分析** | `analyzing-business` | ビジネスアーキテクチャ分析 |
64
- | | `analyzing-requirements` | RDRA 2.0 に基づく要件定義 |
65
- | | `analyzing-usecases` | ユースケース・ユーザーストーリー作成 |
66
- | | `analyzing-architecture` | アーキテクチャ設計 |
67
- | | `analyzing-data-model` | データモデル設計 |
68
- | | `analyzing-domain-model` | ドメインモデル設計 |
69
- | | `analyzing-ui-design` | UI 設計 |
70
- | | `analyzing-tech-stack` | 技術スタック選定 |
71
- | | `analyzing-test-strategy` | テスト戦略策定 |
72
- | | `analyzing-non-functional` | 非機能要件定義 |
73
- | | `analyzing-operation` | 運用要件定義 |
74
- | **開発** | `developing-backend` | バックエンド TDD(インサイドアウト) |
75
- | | `developing-frontend` | フロントエンド TDD(アウトサイドイン) |
76
- | | `developing-release` | リリースワークフロー(品質ゲート・バージョン管理・CHANGELOG) |
77
- | **計画・進捗** | `planning-releases` | リリース・イテレーション計画 |
78
- | | `syncing-github-project` | GitHub Project 同期 |
79
- | | `tracking-progress` | 進捗分析・レポート生成 |
80
- | **運用** | `managing-operations` | 環境構築・デプロイ・監視 |
81
- | | `killing-processes` | 開発プロセス強制終了 |
82
- | **ドキュメント・Git** | `managing-docs` | ドキュメント管理・Lint |
83
- | | `git-commit` | Conventional Commits 準拠のコミット |
84
- | | `creating-adr` | ADR 作成 |
85
- | **共通** | `ai-agent-guidelines` | AI Agent 実行ガイドライン |
86
-
87
- ##### カスタマイズ
88
-
89
- 新しいスキルを追加するには、`.claude/skills/<skill-name>/SKILL.md` を作成します。テンプレートは `.claude/SKILLS_TEMPLATE.md` を参照してください。
56
+ Skills 一覧は [CLAUDE.md の Skills 体系](CLAUDE.md#skills-体系) を参照してください。
57
+
58
+ 新しいスキルの追加・改善には `/skill-creator` プラグインを使用します。テスト・評価・最適化を含むスキル作成ワークフローが自動化されます。
90
59
 
91
60
  **[⬆ back to top](#構成)**
92
61
 
@@ -4,20 +4,26 @@
4
4
 
5
5
  ## ドキュメント一覧
6
6
 
7
- ### 計画
7
+ ### リリース計画
8
8
 
9
9
  | ドキュメント | 説明 |
10
- | :--- | :--- |
11
- | [リリース計画](./release_plan.md) | リリース全体のスコープ・スケジュール・ベロシティ・バッファ戦略 |
10
+ |-------------|------|
11
+ | [リリース計画](release_plan.md) | リリース全体のスコープ・スケジュール・ベロシティ・バッファ戦略 |
12
12
 
13
13
  ### イテレーション計画
14
14
 
15
- イテレーション開始時に作成します。
15
+ | イテレーション | 計画 | ふりかえり | 完了報告書 | 状態 |
16
+ |---------------|------|-----------|-----------|------|
16
17
 
17
- ### ふりかえり
18
+ イテレーション開始時に行を追加します。
18
19
 
19
- イテレーション終了時に作成します。
20
+ ### 進捗サマリー
20
21
 
21
- ### 完了報告書
22
+ | イテレーション | 計画 SP | 実績 SP | 達成率 |
23
+ |---------------|---------|---------|--------|
24
+ | **累計** | **0** | **0** | **-** |
22
25
 
23
- イテレーション終了時に作成します。
26
+ ### フェーズ進捗
27
+
28
+ | フェーズ | 内容 | SP | 完了 SP | 状態 |
29
+ |---------|------|-----|---------|------|
@@ -381,47 +381,37 @@ right side
381
381
  ## 5. XPチーム全体
382
382
 
383
383
  ```plantuml
384
-
385
384
  @startuml
386
- digraph XPTeam {
387
- A [label="XPチーム全体"]
388
- B [label="テスター"]
389
- C [label="インタラクションデザイナー"]
390
- D [label="アーキテクト"]
391
- E [label="プロジェクトマネージャー"]
392
- F [label="プロダクトマネージャー"]
393
- G [label="経営幹部"]
394
- H [label="テクニカルライター"]
395
- I [label="ユーザー"]
396
- J [label="プログラマー"]
397
-
398
- A -> B
399
- A -> C
400
- A -> D
401
- A -> E
402
- A -> F
403
- A -> G
404
- A -> H
405
- A -> I
406
- A -> J
407
-
408
- G -> E
409
- G -> F
410
- G -> I
411
- E -> D
412
- D -> J
413
- E -> J
414
- J -> I
415
- E -> C
416
- E -> I
417
- C -> I
418
- E -> B
419
- B -> J
420
- B -> I
421
- E -> H
422
- H -> I
423
- F -> I
385
+ title XPチーム全体
386
+
387
+ rectangle "XPチーム全体" as team {
388
+ actor "経営幹部" as G
389
+ actor "プロジェクトマネージャー" as E
390
+ actor "プロダクトマネージャー" as F
391
+ actor "アーキテクト" as D
392
+ actor "プログラマー" as J
393
+ actor "テスター" as B
394
+ actor "インタラクションデザイナー" as C
395
+ actor "テクニカルライター" as H
396
+ actor "ユーザー" as I
424
397
  }
398
+
399
+ G --> E
400
+ G --> F
401
+ G --> I
402
+ E --> D
403
+ E --> J
404
+ E --> C
405
+ E --> B
406
+ E --> H
407
+ E --> I
408
+ D --> J
409
+ F --> I
410
+ B --> J
411
+ B --> I
412
+ C --> I
413
+ J --> I
414
+ H --> I
425
415
  @enduml
426
416
  ```
427
417
 
@@ -0,0 +1,421 @@
1
+ # 運用スクリプト作成ガイド
2
+
3
+ ## 概要
4
+
5
+ 本ガイドは `ops/scripts/` 配下に配置する運用スクリプトのネーミングルール、ディレクトリ構成、実装スタイルを定義します。Gulp タスクランナーと連携し、環境構築・デプロイ・プロビジョニング・運用タスクを自動化します。
6
+
7
+ ## ディレクトリ構成
8
+
9
+ ```text
10
+ ops/
11
+ ├── scripts/
12
+ │ ├── shared.js # 共通ユーティリティ
13
+ │ ├── ssh.js # SSH/SCP ヘルパー
14
+ │ ├── deploy_dev.js # 開発環境デプロイ
15
+ │ ├── deploy_stg.js # ステージング環境デプロイ
16
+ │ ├── deploy_prd.js # 本番環境デプロイ
17
+ │ ├── provision_stg.js # ステージング環境プロビジョニング
18
+ │ ├── provision_prd.js # 本番環境プロビジョニング
19
+ │ ├── develop.js # アプリケーション開発タスク
20
+ │ ├── release.js # リリースワークフロー
21
+ │ ├── journal.js # 開発ジャーナル生成
22
+ │ ├── mkdocs.js # ドキュメントビルド
23
+ │ ├── vault.js # シークレット管理
24
+ │ ├── ssh_stg.js # ステージング SSH・踏み台
25
+ │ ├── ssh_prd.js # 本番 SSH・踏み台
26
+ │ ├── sonar_local.js # SonarQube ローカル環境
27
+ │ └── sonar_aws.js # SonarQube AWS 環境
28
+ ├── terraform/ # IaC(Terraform)
29
+ ├── docker/ # Docker 関連設定
30
+ └── nix/ # Nix 開発環境(任意)
31
+ ```
32
+
33
+ ## ネーミングルール
34
+
35
+ ### ファイル名
36
+
37
+ `{カテゴリ}_{環境}.js` の形式で命名する。
38
+
39
+ | カテゴリ | 説明 | 例 |
40
+ |---------|------|-----|
41
+ | `deploy` | デプロイスクリプト | `deploy_dev.js`, `deploy_stg.js`, `deploy_prd.js` |
42
+ | `provision` | IaC プロビジョニング | `provision_stg.js`, `provision_prd.js` |
43
+ | `ssh` | SSH・踏み台操作 | `ssh.js`(共通), `ssh_stg.js`, `ssh_prd.js` |
44
+ | `develop` | アプリケーション開発タスク | `develop.js` |
45
+ | `release` | リリースワークフロー | `release.js` |
46
+ | `journal` | 開発ジャーナル | `journal.js` |
47
+ | `mkdocs` | ドキュメント | `mkdocs.js` |
48
+ | `sonar` | コード品質分析 | `sonar_local.js`, `sonar_aws.js` |
49
+ | `shared` | 共通ユーティリティ | `shared.js` |
50
+ | `vault` | シークレット管理 | `vault.js` |
51
+
52
+ **環境サフィックス**:
53
+
54
+ | サフィックス | 環境 | 例 |
55
+ |-------------|------|-----|
56
+ | `_dev` | 開発環境 | `deploy_dev.js` |
57
+ | `_stg` | ステージング環境 | `deploy_stg.js`, `provision_stg.js` |
58
+ | `_prd` | 本番環境 | `deploy_prd.js`, `provision_prd.js` |
59
+ | `_local` | ローカル環境 | `sonar_local.js` |
60
+ | `_aws` | AWS 環境 | `sonar_aws.js` |
61
+ | なし | 環境非依存 / 共通 | `shared.js`, `ssh.js`, `release.js` |
62
+
63
+ ### Gulp タスク名
64
+
65
+ `{カテゴリ}:{環境}:{アクション}` の形式で命名する。
66
+
67
+ ```
68
+ deploy:dev:build # 開発環境: ビルド
69
+ deploy:dev:push # 開発環境: Registry プッシュ
70
+ deploy:dev # 開発環境: デプロイ実行
71
+ deploy:dev:status # 開発環境: ステータス確認
72
+ deploy:dev:logs # 開発環境: ログ取得
73
+ deploy:dev:clean # 開発環境: クリーンアップ
74
+ deploy:dev:setup # 開発環境: 初回セットアップ
75
+ deploy:dev:help # 開発環境: ヘルプ
76
+
77
+ provision:stg:plan # ステージング: Terraform plan
78
+ provision:stg:vpc # ステージング: VPC プロビジョニング
79
+ provision:stg:rds # ステージング: RDS プロビジョニング
80
+ provision:stg:ecs # ステージング: ECS プロビジョニング
81
+ provision:stg # ステージング: 全リソース一括
82
+ provision:stg:destroy # ステージング: 全リソース廃棄
83
+ provision:stg:help # ステージング: ヘルプ
84
+
85
+ ssh:stg:login # ステージング: 踏み台ログイン
86
+ ssh:stg:tunnel # ステージング: SSH トンネル
87
+ ssh:stg:backup # ステージング: DB バックアップ
88
+ ssh:stg:restore # ステージング: DB リストア
89
+
90
+ dev:sms # SMS 開発サーバー起動
91
+ dev:sms:product # SMS product プロファイル起動
92
+ tdd:sms # SMS TDD モード
93
+ ```
94
+
95
+ ## 実装スタイル
96
+
97
+ ### 基本構造
98
+
99
+ すべてのスクリプトは以下の構造に従う。
100
+
101
+ ```javascript
102
+ 'use strict';
103
+
104
+ import path from 'path';
105
+ import { execSync } from 'child_process';
106
+ import { cleanDockerEnv } from './shared.js';
107
+
108
+ // ============================================
109
+ // 設定
110
+ // ============================================
111
+
112
+ const PREFIX = 'DEV'; // 環境変数プレフィックス
113
+
114
+ /** サービス定義 */
115
+ const SERVICES = [
116
+ { name: 'backend', port: 8080, container: 'app-backend', label: 'Backend' },
117
+ { name: 'frontend', port: 3000, container: 'app-frontend', label: 'Frontend' },
118
+ ];
119
+
120
+ // ============================================
121
+ // ヘルパー関数
122
+ // ============================================
123
+
124
+ /**
125
+ * JSDoc コメントで関数の目的・引数・戻り値を記述
126
+ * @param {string} param - パラメータの説明
127
+ * @returns {string}
128
+ */
129
+ function helperFunction(param) {
130
+ // 実装
131
+ }
132
+
133
+ // ============================================
134
+ // Gulp タスク
135
+ // ============================================
136
+
137
+ export default function(gulp) {
138
+ // タスク登録
139
+ gulp.task('deploy:dev:build', (done) => {
140
+ // タスク実装
141
+ done();
142
+ });
143
+ }
144
+ ```
145
+
146
+ ### コーディング規約
147
+
148
+ #### 1. strict mode
149
+
150
+ すべてのファイルの先頭に `'use strict';` を記述する。
151
+
152
+ #### 2. ESM(ES Modules)
153
+
154
+ `import` / `export` 構文を使用する。`require` は使用しない。
155
+
156
+ ```javascript
157
+ // Good
158
+ import path from 'path';
159
+ import { execSync } from 'child_process';
160
+ import { cleanDockerEnv } from './shared.js';
161
+
162
+ // Bad
163
+ const path = require('path');
164
+ ```
165
+
166
+ #### 3. セクション区切り
167
+
168
+ コード内のセクションは以下のコメントで区切る。
169
+
170
+ ```javascript
171
+ // ============================================
172
+ // 設定
173
+ // ============================================
174
+
175
+ // ============================================
176
+ // ヘルパー関数
177
+ // ============================================
178
+
179
+ // ============================================
180
+ // Gulp タスク
181
+ // ============================================
182
+ ```
183
+
184
+ #### 4. JSDoc コメント
185
+
186
+ すべての関数に JSDoc コメントを記述する。
187
+
188
+ ```javascript
189
+ /**
190
+ * docker build に渡すオプションを組み立てる
191
+ * @returns {string} ビルドオプション文字列
192
+ */
193
+ function dockerBuildOptions() {
194
+ // ...
195
+ }
196
+ ```
197
+
198
+ #### 5. 環境変数の管理
199
+
200
+ 環境変数は `.env` ファイルで管理し、環境プレフィックス(`DEV_`, `STG_`, `PRD_`)で名前空間を分離する。
201
+
202
+ ```javascript
203
+ // 環境変数プレフィックスで名前空間を分離
204
+ const PREFIX = 'STG';
205
+ const awsProfile = () => process.env.STG_AWS_PROFILE || '';
206
+ const sshHost = () => process.env[`${PREFIX}_SSH_HOST`];
207
+ ```
208
+
209
+ **環境変数の命名規則**:
210
+
211
+ | プレフィックス | 環境 | 例 |
212
+ |-------------|------|-----|
213
+ | `DEV_` | 開発環境 | `DEV_SSH_HOST`, `DEV_SSH_USER` |
214
+ | `STG_` | ステージング環境 | `STG_AWS_PROFILE`, `STG_DB_USERNAME` |
215
+ | `PRD_` | 本番環境 | `PRD_AWS_PROFILE`, `PRD_DB_USERNAME` |
216
+ | `GHCR_` | GitHub Container Registry | `GHCR_USER`, `GHCR_TOKEN` |
217
+ | `DOCKER_` | Docker 関連 | `DOCKER_BUILD_NETWORK`, `DOCKER_BUILD_DNS` |
218
+
219
+ #### 6. サービス定義
220
+
221
+ 複数サービスを扱うスクリプトでは、サービスを配列で定義する。
222
+
223
+ ```javascript
224
+ const SERVICES = [
225
+ { name: 'sms', port: 8080, container: 'app-sms', label: 'SMS(販売管理)' },
226
+ { name: 'fas', port: 8081, container: 'app-fas', label: 'FAS(財務会計)' },
227
+ ];
228
+ ```
229
+
230
+ サービス定義を基に、個別タスクと一括タスクを動的に生成する。
231
+
232
+ ```javascript
233
+ // 個別タスク: deploy:dev:build:sms, deploy:dev:build:fas
234
+ SERVICES.forEach((svc) => {
235
+ gulp.task(`deploy:dev:build:${svc.name}`, (done) => {
236
+ buildImage(svc);
237
+ done();
238
+ });
239
+ });
240
+
241
+ // 一括タスク: deploy:dev:build(全サービス)
242
+ gulp.task('deploy:dev:build', gulp.series(
243
+ ...SERVICES.map((svc) => `deploy:dev:build:${svc.name}`)
244
+ ));
245
+ ```
246
+
247
+ #### 7. エラーハンドリング
248
+
249
+ `execSync` のエラーは適切にキャッチし、ユーザーにわかりやすいメッセージを表示する。
250
+
251
+ ```javascript
252
+ try {
253
+ execSync(command, { stdio: 'inherit', env: cleanDockerEnv() });
254
+ } catch (err) {
255
+ console.error(`エラー: ${err.message}`);
256
+ process.exit(1);
257
+ }
258
+ ```
259
+
260
+ #### 8. ヘルプタスク
261
+
262
+ 各カテゴリにヘルプタスクを提供する。
263
+
264
+ ```javascript
265
+ gulp.task('deploy:dev:help', (done) => {
266
+ console.log(`
267
+ === 開発環境デプロイコマンド ===
268
+
269
+ deploy:dev:build 全サービスをローカルビルド
270
+ deploy:dev:push 全イメージを Registry にプッシュ
271
+ deploy:dev 全サービスをデプロイ
272
+ deploy:dev:status コンテナ状態を確認
273
+ deploy:dev:logs コンテナログを表示
274
+ deploy:dev:clean 開発環境を完全削除
275
+ deploy:dev:setup 初回セットアップ
276
+ deploy:dev:help このヘルプを表示
277
+ `);
278
+ done();
279
+ });
280
+ ```
281
+
282
+ ## 共通ユーティリティ(shared.js)
283
+
284
+ 環境をまたいで共通的に使用するユーティリティ関数を `shared.js` に集約する。
285
+
286
+ ```javascript
287
+ 'use strict';
288
+
289
+ /**
290
+ * DOCKER_HOST を除外した環境変数を返す
291
+ * Docker Desktop 使用時に DOCKER_HOST が設定されていると接続エラーが発生するため除外する
292
+ * @returns {Object} DOCKER_HOST を除外した環境変数
293
+ */
294
+ export function cleanDockerEnv() {
295
+ const env = { ...process.env };
296
+ delete env.DOCKER_HOST;
297
+ return env;
298
+ }
299
+ ```
300
+
301
+ ## SSH ヘルパー(ssh.js)
302
+
303
+ SSH/SCP 操作を共通化する。環境プレフィックスで接続先を切り替える。
304
+
305
+ ```javascript
306
+ /**
307
+ * SSH 接続パラメータを取得
308
+ * @param {string} [prefix='DEV'] 環境変数プレフィックス
309
+ * @returns {{ host: string, user: string, port: string, keyFile: string | undefined }}
310
+ */
311
+ export function getSSHConfig(prefix = 'DEV') {
312
+ const host = process.env[`${prefix}_SSH_HOST`];
313
+ const user = process.env[`${prefix}_SSH_USER`];
314
+ const port = process.env[`${prefix}_SSH_PORT`] || '22';
315
+ const keyFile = process.env[`${prefix}_SSH_KEY`];
316
+
317
+ if (!host || !user) {
318
+ throw new Error(`${prefix}_SSH_HOST と ${prefix}_SSH_USER を .env に設定してください`);
319
+ }
320
+
321
+ return { host, user, port, keyFile };
322
+ }
323
+
324
+ /**
325
+ * SSH でリモートコマンドを実行
326
+ * @param {string} command 実行するコマンド
327
+ * @param {object} [options] オプション
328
+ * @param {boolean} [options.ignoreError] エラーを無視するか
329
+ * @param {boolean} [options.capture] 出力を文字列で返すか
330
+ * @param {string} [options.prefix] 環境変数プレフィックス
331
+ * @returns {string} 標準出力
332
+ */
333
+ export function sshExec(command, options = {}) {
334
+ // 実装
335
+ }
336
+
337
+ /**
338
+ * SCP でローカルファイル/ディレクトリをリモートに転送
339
+ * @param {string} localPath ローカルパス
340
+ * @param {string} remotePath リモートパス
341
+ * @param {object} [options] オプション
342
+ * @param {boolean} [options.recursive] ディレクトリを再帰的に転送
343
+ * @param {string} [options.prefix] 環境変数プレフィックス
344
+ */
345
+ export function scpUpload(localPath, remotePath, options = {}) {
346
+ // 実装
347
+ }
348
+ ```
349
+
350
+ ## AWS 連携パターン
351
+
352
+ ### aws-vault ラッパー
353
+
354
+ AWS 操作では `aws-vault exec` 経由で認証情報を自動取得する。
355
+
356
+ ```javascript
357
+ /**
358
+ * aws-vault ラッパーを組み立てる
359
+ * @returns {string} コマンドプレフィックス
360
+ */
361
+ function awsExecPrefix() {
362
+ const profile = process.env.STG_AWS_PROFILE || '';
363
+ if (!profile) return '';
364
+ return `aws-vault exec ${profile} -- `;
365
+ }
366
+ ```
367
+
368
+ ### Terraform 操作
369
+
370
+ ```javascript
371
+ /**
372
+ * Terraform コマンドを実行
373
+ * @param {string} subcommand - Terraform サブコマンド
374
+ * @param {object} options - オプション
375
+ */
376
+ function terraform(subcommand, options = {}) {
377
+ const prefix = awsExecPrefix();
378
+ const cmd = `${prefix}terraform ${subcommand}`;
379
+ execSync(cmd, { cwd: options.cwd, stdio: 'inherit' });
380
+ }
381
+ ```
382
+
383
+ ## Gulp タスク登録パターン
384
+
385
+ ### gulpfile.js
386
+
387
+ ```javascript
388
+ import gulp from 'gulp';
389
+ import deployDev from './ops/scripts/deploy_dev.js';
390
+ import deployStg from './ops/scripts/deploy_stg.js';
391
+ import provisionStg from './ops/scripts/provision_stg.js';
392
+
393
+ // 各モジュールのタスクを登録
394
+ deployDev(gulp);
395
+ deployStg(gulp);
396
+ provisionStg(gulp);
397
+ ```
398
+
399
+ ### package.json のスクリプト
400
+
401
+ ```json
402
+ {
403
+ "scripts": {
404
+ "deploy:dev": "npx gulp deploy:dev",
405
+ "deploy:stg": "npx gulp deploy:stg",
406
+ "provision:stg": "npx gulp provision:stg"
407
+ }
408
+ }
409
+ ```
410
+
411
+ ## スクリプト作成の手順
412
+
413
+ 新しい運用スクリプトを作成する際は以下の手順に従う。
414
+
415
+ 1. **ネーミング**: `{カテゴリ}_{環境}.js` でファイル名を決定
416
+ 2. **テンプレート**: 基本構造(設定→ヘルパー関数→Gulp タスク)に従って実装
417
+ 3. **共通関数**: `shared.js` と `ssh.js` の既存関数を活用
418
+ 4. **環境変数**: `.env.example` に必要な環境変数を追記
419
+ 5. **ヘルプ**: `{カテゴリ}:{環境}:help` タスクを作成
420
+ 6. **gulpfile.js**: タスクを登録
421
+ 7. **ドキュメント**: コマンドリファレンスを作成・更新