@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.
- package/bin/claude-code-booster +5 -7
- package/lib/assets/.claude/README.md +73 -19
- package/lib/assets/.claude/agents/xp-architect.md +250 -0
- package/lib/assets/.claude/agents/xp-executive.md +207 -0
- package/lib/assets/.claude/agents/xp-interaction-designer.md +239 -0
- package/lib/assets/.claude/agents/xp-product-manager.md +245 -0
- package/lib/assets/.claude/agents/xp-programmer.md +268 -0
- package/lib/assets/.claude/agents/xp-project-manager.md +229 -0
- package/lib/assets/.claude/agents/xp-technical-writer.md +224 -0
- package/lib/assets/.claude/agents/xp-tester.md +265 -0
- package/lib/assets/.claude/agents/xp-user-representative.md +204 -0
- package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +49 -57
- package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +54 -58
- package/lib/assets/.claude/skills/analyzing-business/SKILL.md +52 -74
- package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +50 -53
- package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +56 -56
- package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +56 -109
- package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +61 -57
- package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +61 -57
- package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +57 -55
- package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +66 -67
- package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +58 -56
- package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +51 -57
- package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +45 -60
- package/lib/assets/.claude/skills/creating-adr/SKILL.md +38 -40
- package/lib/assets/.claude/skills/developing-backend/SKILL.md +49 -55
- package/lib/assets/.claude/skills/developing-frontend/SKILL.md +47 -50
- package/lib/assets/.claude/skills/developing-release/SKILL.md +60 -95
- package/lib/assets/.claude/skills/generating-slides/SKILL.md +58 -100
- package/lib/assets/.claude/skills/git-commit/SKILL.md +27 -52
- package/lib/assets/.claude/skills/killing-processes/SKILL.md +16 -70
- package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -0
- package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -0
- package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -0
- package/lib/assets/.claude/skills/{managing-docs → operating-docs}/SKILL.md +1 -1
- package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -0
- package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -0
- package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +65 -95
- package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +60 -155
- package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +158 -0
- package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +60 -119
- package/lib/assets/.claude/skills/planning-releases/SKILL.md +63 -168
- package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +62 -266
- package/lib/assets/.claude/skills/tracking-progress/SKILL.md +49 -122
- package/lib/assets/CLAUDE.md +7 -2
- package/lib/assets/README.md +3 -34
- package/lib/assets/docs/development/index.md +14 -8
- 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
- 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
- package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +69 -5
- 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
- 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
- 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
- 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
- package/lib/assets/docs/template//350/250/255/350/250/210.md +12 -2
- 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
- package/package.json +1 -1
- package/lib/assets/.claude/SKILLS_TEMPLATE.md +0 -100
- package/lib/assets/.claude/agents/roles/.gitkeep +0 -0
- package/lib/assets/.claude/skills/managing-operations/DEPLOY.md +0 -77
- package/lib/assets/.claude/skills/managing-operations/SETUP_CSHARP.md +0 -80
- package/lib/assets/.claude/skills/managing-operations/SETUP_FRONTEND.md +0 -84
- package/lib/assets/.claude/skills/managing-operations/SETUP_JAVA.md +0 -75
- package/lib/assets/.claude/skills/managing-operations/SKILL.md +0 -156
package/lib/assets/README.md
CHANGED
|
@@ -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
|
-
|
|
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
|
-
| [リリース計画](
|
|
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
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
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. **ドキュメント**: コマンドリファレンスを作成・更新
|