@sk8metal/michi-cli 0.1.0 → 0.2.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/CHANGELOG.md +17 -0
- package/README.md +1 -0
- package/dist/scripts/__tests__/validate-phase.test.js +83 -0
- package/dist/scripts/__tests__/validate-phase.test.js.map +1 -1
- package/dist/scripts/config/config-schema.d.ts +14 -0
- package/dist/scripts/config/config-schema.d.ts.map +1 -1
- package/dist/scripts/config/config-schema.js +9 -0
- package/dist/scripts/config/config-schema.js.map +1 -1
- package/dist/scripts/phase-runner.d.ts.map +1 -1
- package/dist/scripts/phase-runner.js +2 -2
- package/dist/scripts/phase-runner.js.map +1 -1
- package/dist/scripts/validate-phase.d.ts.map +1 -1
- package/dist/scripts/validate-phase.js +18 -3
- package/dist/scripts/validate-phase.js.map +1 -1
- package/dist/src/__tests__/integration/setup/claude.test.js +82 -0
- package/dist/src/__tests__/integration/setup/claude.test.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +1 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/setup-existing.d.ts +1 -0
- package/dist/src/commands/setup-existing.d.ts.map +1 -1
- package/dist/src/commands/setup-existing.js +33 -0
- package/dist/src/commands/setup-existing.js.map +1 -1
- package/docs/user-guide/guides/agent-skills-integration.md +217 -0
- package/docs/user-guide/guides/customization.md +2 -2
- package/docs/user-guide/guides/multi-project.md +2 -2
- package/docs/user-guide/guides/phase-automation.md +25 -25
- package/docs/user-guide/guides/workflow.md +8 -20
- package/docs/user-guide/reference/config.md +2 -2
- package/docs/user-guide/reference/tasks-template.md +2 -2
- package/docs/user-guide/testing/test-planning-flow.md +1 -1
- package/package.json +2 -3
- package/scripts/__tests__/validate-phase.test.ts +100 -0
- package/scripts/config/config-schema.ts +11 -0
- package/scripts/phase-runner.ts +12 -3
- package/scripts/validate-phase.ts +21 -3
- package/templates/claude/agents/design-reviewer/AGENT.md +497 -0
- package/templates/claude/agents/e2e-first-planner/AGENT.md +410 -0
- package/templates/claude/agents/oss-license-checker/AGENT.md +265 -0
- package/templates/claude/agents/pr-resolver/AGENT.md +196 -0
- package/templates/claude/agents/stable-version-auditor/AGENT.md +279 -0
- package/templates/claude/commands/kiro/kiro-spec-impl.md +13 -4
- package/templates/claude/commands/kiro/kiro-spec-tasks.md +17 -3
- package/templates/claude/commands/michi/design-review.md +66 -0
- package/templates/claude/commands/michi/e2e-plan.md +113 -0
- package/templates/claude/commands/michi/license-check.md +80 -0
- package/templates/claude/commands/michi/pr-resolve.md +153 -0
- package/templates/claude/commands/michi/version-audit.md +91 -0
- package/templates/claude/skills/design-review/SKILL.md +648 -0
- package/templates/claude/skills/e2e-first-planning/SKILL.md +360 -0
- package/templates/claude/skills/oss-license/SKILL.md +232 -0
- package/templates/claude/skills/stable-version/SKILL.md +252 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: e2e-first-planning
|
|
3
|
+
description: |
|
|
4
|
+
E2Eファースト開発計画策定ガイド。
|
|
5
|
+
Walking Skeleton、MVP計画、縦割りタスク分割をサポート。
|
|
6
|
+
allowed-tools: Read, Grep, Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# E2Eファースト計画策定スキル
|
|
10
|
+
|
|
11
|
+
## 目的
|
|
12
|
+
|
|
13
|
+
E2E(End-to-End)ファーストの開発計画を策定し、リスクを早期発見し、価値を段階的に提供する。
|
|
14
|
+
|
|
15
|
+
## E2Eファーストとは
|
|
16
|
+
|
|
17
|
+
### 定義
|
|
18
|
+
|
|
19
|
+
**E2Eファースト**: ユーザーの視点から始めて終わりまで動作する最小限の機能を最優先で実装するアプローチ。
|
|
20
|
+
|
|
21
|
+
### 重要な原則
|
|
22
|
+
|
|
23
|
+
1. **価値の早期提供**: ユーザーが触れる機能を優先
|
|
24
|
+
2. **リスクの早期発見**: インテグレーション問題を早期に検出
|
|
25
|
+
3. **継続的なフィードバック**: 動くものを見せて方向性を確認
|
|
26
|
+
4. **技術的実現可能性の検証**: 最初から本番環境を意識
|
|
27
|
+
|
|
28
|
+
### なぜE2Eファーストが重要か
|
|
29
|
+
|
|
30
|
+
| 利点 | 説明 |
|
|
31
|
+
|------|------|
|
|
32
|
+
| 🎯 **ユーザー価値重視** | 常に動作する機能を提供 |
|
|
33
|
+
| 🚨 **早期リスク発見** | 統合の問題を早期に検出 |
|
|
34
|
+
| 🔄 **継続的フィードバック** | ステークホルダーとの早期合意 |
|
|
35
|
+
| 🏗️ **技術的実現可能性** | アーキテクチャの妥当性を検証 |
|
|
36
|
+
| 📊 **進捗の可視化** | 動作する機能 = 進捗 |
|
|
37
|
+
|
|
38
|
+
## アンチパターン: 横割り開発
|
|
39
|
+
|
|
40
|
+
### ❌ 避けるべき開発順序
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Phase 1: UI全体を作る
|
|
44
|
+
Phase 2: API全体を作る
|
|
45
|
+
Phase 3: DB全体を作る
|
|
46
|
+
Phase 4: 統合(← ここで大量の問題発見)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**問題点:**
|
|
50
|
+
- 統合まで動作する機能がゼロ
|
|
51
|
+
- リスクが最後に集中
|
|
52
|
+
- ユーザーフィードバックが遅い
|
|
53
|
+
- 見積もりの精度が低い
|
|
54
|
+
|
|
55
|
+
### ✅ 推奨: 縦割り開発(E2Eスライス)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Phase 1: ログイン機能(UI + API + DB)← 動作する
|
|
59
|
+
Phase 2: ダッシュボード(UI + API + DB)← 動作する
|
|
60
|
+
Phase 3: データ編集(UI + API + DB)← 動作する
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**利点:**
|
|
64
|
+
- 各フェーズで動作する機能を提供
|
|
65
|
+
- リスクを段階的に管理
|
|
66
|
+
- 継続的なフィードバック
|
|
67
|
+
- 見積もりの精度向上
|
|
68
|
+
|
|
69
|
+
## 計画策定フレームワーク
|
|
70
|
+
|
|
71
|
+
### フェーズ1: Skeleton(骨組み)
|
|
72
|
+
|
|
73
|
+
**目的**: プロジェクトの基本構造を定義
|
|
74
|
+
|
|
75
|
+
**成果物:**
|
|
76
|
+
- システムアーキテクチャ図
|
|
77
|
+
- 主要コンポーネントの識別
|
|
78
|
+
- 技術スタックの決定
|
|
79
|
+
- 開発環境のセットアップ
|
|
80
|
+
|
|
81
|
+
**期間**: 1-3日
|
|
82
|
+
|
|
83
|
+
**チェックリスト:**
|
|
84
|
+
- [ ] プロジェクト構造が明確か
|
|
85
|
+
- [ ] 技術スタックが決定したか
|
|
86
|
+
- [ ] 開発環境が構築できたか
|
|
87
|
+
- [ ] チーム全員が構造を理解したか
|
|
88
|
+
|
|
89
|
+
### フェーズ2: Walking Skeleton(歩く骨組み)
|
|
90
|
+
|
|
91
|
+
**目的**: 最小限のE2E機能を実装
|
|
92
|
+
|
|
93
|
+
**成果物:**
|
|
94
|
+
- ユーザーから見て動作する最小機能
|
|
95
|
+
- CI/CD パイプラインの構築
|
|
96
|
+
- 本番環境へのデプロイ
|
|
97
|
+
- 監視・ログの基本設定
|
|
98
|
+
|
|
99
|
+
**期間**: 1-2週間
|
|
100
|
+
|
|
101
|
+
**例: Webアプリケーション**
|
|
102
|
+
```
|
|
103
|
+
ユーザー → ログイン → 簡単なダッシュボード表示 → ログアウト
|
|
104
|
+
(UI + API + DB + デプロイ)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**チェックリスト:**
|
|
108
|
+
- [ ] E2Eで動作するか
|
|
109
|
+
- [ ] 本番環境にデプロイできるか
|
|
110
|
+
- [ ] CI/CDが機能するか
|
|
111
|
+
- [ ] 監視が動作するか
|
|
112
|
+
|
|
113
|
+
### フェーズ3: MVP(Minimum Viable Product)
|
|
114
|
+
|
|
115
|
+
**目的**: 実際のユーザーに価値を提供できる最小限の機能セット
|
|
116
|
+
|
|
117
|
+
**成果物:**
|
|
118
|
+
- コア機能の実装
|
|
119
|
+
- ユーザーが実際に利用できる状態
|
|
120
|
+
- フィードバック収集の仕組み
|
|
121
|
+
- ドキュメント
|
|
122
|
+
|
|
123
|
+
**期間**: 4-8週間
|
|
124
|
+
|
|
125
|
+
**チェックリスト:**
|
|
126
|
+
- [ ] ユーザーが価値を感じるか
|
|
127
|
+
- [ ] フィードバックを収集できるか
|
|
128
|
+
- [ ] スケールするアーキテクチャか
|
|
129
|
+
- [ ] 運用可能な状態か
|
|
130
|
+
|
|
131
|
+
## タスク分割の原則
|
|
132
|
+
|
|
133
|
+
### 縦割り(推奨)
|
|
134
|
+
|
|
135
|
+
**定義**: 機能単位でUI→API→DBまで完結させる
|
|
136
|
+
|
|
137
|
+
**例:**
|
|
138
|
+
```
|
|
139
|
+
タスク1: ユーザー登録機能
|
|
140
|
+
- UI: 登録フォーム
|
|
141
|
+
- API: POST /api/users
|
|
142
|
+
- DB: usersテーブル作成
|
|
143
|
+
- Test: E2Eテスト
|
|
144
|
+
|
|
145
|
+
タスク2: ログイン機能
|
|
146
|
+
- UI: ログインフォーム
|
|
147
|
+
- API: POST /api/auth/login
|
|
148
|
+
- DB: sessionsテーブル
|
|
149
|
+
- Test: E2Eテスト
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**利点:**
|
|
153
|
+
- 各タスク完了時に動作する機能ができる
|
|
154
|
+
- 統合の問題を早期発見
|
|
155
|
+
- 進捗が可視化しやすい
|
|
156
|
+
|
|
157
|
+
### 横割り(非推奨)
|
|
158
|
+
|
|
159
|
+
**定義**: レイヤー単位で全機能を作る
|
|
160
|
+
|
|
161
|
+
**例:**
|
|
162
|
+
```
|
|
163
|
+
タスク1: UI全画面作成
|
|
164
|
+
タスク2: API全エンドポイント作成
|
|
165
|
+
タスク3: DB全テーブル作成
|
|
166
|
+
タスク4: 統合(← ここで問題発覚)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**問題点:**
|
|
170
|
+
- 最後まで動作する機能がゼロ
|
|
171
|
+
- 統合時に大量の問題
|
|
172
|
+
- 進捗が見えにくい
|
|
173
|
+
|
|
174
|
+
## E2Eスライスの特定方法
|
|
175
|
+
|
|
176
|
+
### Step 1: ユーザーストーリーから始める
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
ユーザーストーリー:
|
|
180
|
+
「ECサイトの管理者として、商品を登録したい」
|
|
181
|
+
|
|
182
|
+
E2Eスライス:
|
|
183
|
+
1. 商品登録フォームを表示(UI)
|
|
184
|
+
2. 入力データを受け取る(API)
|
|
185
|
+
3. データベースに保存(DB)
|
|
186
|
+
4. 成功メッセージを表示(UI)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Step 2: 最小限の実装を定義
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
Phase 1 (Walking Skeleton):
|
|
193
|
+
- 商品名のみ登録可能
|
|
194
|
+
- 画像・説明・価格は後回し
|
|
195
|
+
- バリデーションは最小限
|
|
196
|
+
|
|
197
|
+
Phase 2 (MVP):
|
|
198
|
+
- 画像アップロード追加
|
|
199
|
+
- 価格・在庫管理追加
|
|
200
|
+
- 詳細なバリデーション
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Step 3: 依存関係を整理
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
優先度1: ログイン機能(他の機能の前提)
|
|
207
|
+
優先度2: 商品一覧表示(データ確認のため)
|
|
208
|
+
優先度3: 商品登録(メイン機能)
|
|
209
|
+
優先度4: 商品編集(登録の拡張)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## マイルストーン設計
|
|
213
|
+
|
|
214
|
+
### マイルストーン1: Walking Skeleton
|
|
215
|
+
|
|
216
|
+
**目標**: 基本的なE2E動作を確認
|
|
217
|
+
|
|
218
|
+
**成果物:**
|
|
219
|
+
- ログイン → ダッシュボード表示 → ログアウト
|
|
220
|
+
- CI/CDパイプライン
|
|
221
|
+
- デプロイ自動化
|
|
222
|
+
|
|
223
|
+
**期間**: 1-2週間
|
|
224
|
+
|
|
225
|
+
**完了条件:**
|
|
226
|
+
- [ ] 本番環境にデプロイ済み
|
|
227
|
+
- [ ] E2Eテストが通る
|
|
228
|
+
- [ ] CI/CDが動作する
|
|
229
|
+
|
|
230
|
+
### マイルストーン2: MVP
|
|
231
|
+
|
|
232
|
+
**目標**: ユーザーに価値を提供
|
|
233
|
+
|
|
234
|
+
**成果物:**
|
|
235
|
+
- コア機能3つ
|
|
236
|
+
- ユーザードキュメント
|
|
237
|
+
- フィードバック収集の仕組み
|
|
238
|
+
|
|
239
|
+
**期間**: 4-6週間
|
|
240
|
+
|
|
241
|
+
**完了条件:**
|
|
242
|
+
- [ ] ユーザーが実際に利用できる
|
|
243
|
+
- [ ] フィードバックを収集できる
|
|
244
|
+
- [ ] パフォーマンステスト済み
|
|
245
|
+
|
|
246
|
+
### マイルストーン3: 機能拡張
|
|
247
|
+
|
|
248
|
+
**目標**: ユーザーフィードバックを基に機能追加
|
|
249
|
+
|
|
250
|
+
**成果物:**
|
|
251
|
+
- 追加機能
|
|
252
|
+
- パフォーマンス最適化
|
|
253
|
+
- セキュリティ強化
|
|
254
|
+
|
|
255
|
+
**期間**: 継続的
|
|
256
|
+
|
|
257
|
+
## 計画ドキュメントフォーマット
|
|
258
|
+
|
|
259
|
+
### E2E計画テンプレート
|
|
260
|
+
|
|
261
|
+
```markdown
|
|
262
|
+
# プロジェクト名 - E2E計画
|
|
263
|
+
|
|
264
|
+
## 概要
|
|
265
|
+
- プロジェクトの目的
|
|
266
|
+
- ターゲットユーザー
|
|
267
|
+
- 提供価値
|
|
268
|
+
|
|
269
|
+
## Walking Skeleton(1-2週間)
|
|
270
|
+
|
|
271
|
+
### 目標
|
|
272
|
+
最小限のE2E機能を動作させる
|
|
273
|
+
|
|
274
|
+
### E2Eスライス
|
|
275
|
+
1. ログイン機能(UI + API + DB)
|
|
276
|
+
2. ダッシュボード表示(UI + API + DB)
|
|
277
|
+
|
|
278
|
+
### 技術的準備
|
|
279
|
+
- [ ] CI/CDパイプライン構築
|
|
280
|
+
- [ ] デプロイ自動化
|
|
281
|
+
- [ ] 監視設定
|
|
282
|
+
|
|
283
|
+
## MVP(4-6週間)
|
|
284
|
+
|
|
285
|
+
### 目標
|
|
286
|
+
ユーザーに価値を提供できる最小機能セット
|
|
287
|
+
|
|
288
|
+
### E2Eスライス(優先順)
|
|
289
|
+
1. ユーザー登録(UI + API + DB)
|
|
290
|
+
2. データ一覧表示(UI + API + DB)
|
|
291
|
+
3. データ編集(UI + API + DB)
|
|
292
|
+
|
|
293
|
+
### 完了条件
|
|
294
|
+
- [ ] ユーザーが実際に利用できる
|
|
295
|
+
- [ ] フィードバック収集可能
|
|
296
|
+
- [ ] パフォーマンステスト済み
|
|
297
|
+
|
|
298
|
+
## リスク管理
|
|
299
|
+
|
|
300
|
+
| リスク | 対策 | 担当 |
|
|
301
|
+
|--------|------|------|
|
|
302
|
+
| 外部API統合の遅延 | モックAPIを先行実装 | チームA |
|
|
303
|
+
| パフォーマンス問題 | 早期負荷テスト | チームB |
|
|
304
|
+
|
|
305
|
+
## タイムライン
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
Week 1-2: Walking Skeleton
|
|
309
|
+
Week 3-4: MVP Core機能
|
|
310
|
+
Week 5-6: MVP追加機能
|
|
311
|
+
Week 7+: フィードバック対応
|
|
312
|
+
```
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## チームへの共有方法
|
|
316
|
+
|
|
317
|
+
### キックオフミーティング
|
|
318
|
+
|
|
319
|
+
1. **E2Eファーストの説明**(15分)
|
|
320
|
+
- なぜ横割りではなく縦割りか
|
|
321
|
+
- 各フェーズの目標
|
|
322
|
+
|
|
323
|
+
2. **Walking Skeletonのデモ**(10分)
|
|
324
|
+
- どこまで動くものを作るか
|
|
325
|
+
- 技術的な準備作業
|
|
326
|
+
|
|
327
|
+
3. **タスク分割の確認**(15分)
|
|
328
|
+
- 各E2Eスライスの説明
|
|
329
|
+
- 依存関係の確認
|
|
330
|
+
|
|
331
|
+
### 定期レビュー
|
|
332
|
+
|
|
333
|
+
- **毎週**: E2Eスライス単位でデモ
|
|
334
|
+
- **隔週**: マイルストーン進捗確認
|
|
335
|
+
- **月次**: ユーザーフィードバック共有
|
|
336
|
+
|
|
337
|
+
## よくある質問
|
|
338
|
+
|
|
339
|
+
### Q1: すべてを最初から完璧に作る必要はないか?
|
|
340
|
+
|
|
341
|
+
A: **不要です**。Walking Skeletonは最小限の実装で十分。重要なのは「E2Eで動作すること」。
|
|
342
|
+
|
|
343
|
+
### Q2: 横割りの方が効率的では?
|
|
344
|
+
|
|
345
|
+
A: **短期的には効率的に見えますが**、統合時の問題で結果的に遅延します。E2Eファーストは早期リスク発見により全体効率を向上します。
|
|
346
|
+
|
|
347
|
+
### Q3: レガシーシステムでもE2Eファーストは可能か?
|
|
348
|
+
|
|
349
|
+
A: **可能です**。まず新機能を小さなE2Eスライスで実装し、段階的に既存システムと統合します。
|
|
350
|
+
|
|
351
|
+
### Q4: チームメンバーがフルスタック対応できない場合は?
|
|
352
|
+
|
|
353
|
+
A: **ペアプログラミングや知識共有**で対応。または、E2Eスライス単位でフロント/バック担当を決めて密に連携。
|
|
354
|
+
|
|
355
|
+
## 参考資料
|
|
356
|
+
|
|
357
|
+
- [Walking Skeleton - Alistair Cockburn](https://alistair.cockburn.us/walking-skeleton/)
|
|
358
|
+
- [Vertical Slice Architecture - Jimmy Bogard](https://jimmybogard.com/vertical-slice-architecture/)
|
|
359
|
+
- [Shape Up - Basecamp](https://basecamp.com/shapeup)
|
|
360
|
+
- [The Lean Startup - Eric Ries](http://theleanstartup.com/)
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oss-license
|
|
3
|
+
description: |
|
|
4
|
+
OSSライセンス確認とコンプライアンスガイド。
|
|
5
|
+
許可/禁止ライセンス一覧、確認ツール使用法をガイド。
|
|
6
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# OSSライセンス確認スキル
|
|
10
|
+
|
|
11
|
+
## 目的
|
|
12
|
+
|
|
13
|
+
依存パッケージのライセンスを確認し、ライセンス違反リスクを早期発見する。
|
|
14
|
+
|
|
15
|
+
## 重要な原則
|
|
16
|
+
|
|
17
|
+
### ✅ 許可ライセンス(一般的に使用可能)
|
|
18
|
+
|
|
19
|
+
- **MIT License** - 最も寛容なライセンス
|
|
20
|
+
- **Apache License 2.0** - 特許条項付き
|
|
21
|
+
- **BSD 2-Clause / 3-Clause** - シンプルな寛容ライセンス
|
|
22
|
+
- **ISC License** - MITと同等
|
|
23
|
+
- **CC0 / Public Domain** - 著作権放棄
|
|
24
|
+
|
|
25
|
+
### ⚠️ 要注意ライセンス(条件付き使用)
|
|
26
|
+
|
|
27
|
+
- **LGPL v2.1 / v3.0** - 動的リンクのみ許可(静的リンクは要注意)
|
|
28
|
+
- **MPL 2.0 (Mozilla Public License)** - ファイル単位のコピーレフト
|
|
29
|
+
- **CC BY-SA** - ドキュメント用(ShareAlike条項あり)
|
|
30
|
+
- **EPL (Eclipse Public License)** - 弱いコピーレフト
|
|
31
|
+
|
|
32
|
+
### ❌ 禁止ライセンス(商用利用時に要確認)
|
|
33
|
+
|
|
34
|
+
- **GPL v2 / v3** - 強いコピーレフト(全体がGPLになる)
|
|
35
|
+
- **AGPL v3** - ネットワーク経由でも適用される最も強いコピーレフト
|
|
36
|
+
- **SSPL (Server Side Public License)** - MongoDBなどで使用
|
|
37
|
+
- **CPAL (Common Public Attribution License)** - 帰属表示要求
|
|
38
|
+
|
|
39
|
+
## ライセンス確認ツール
|
|
40
|
+
|
|
41
|
+
### Node.js プロジェクト
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# license-checker インストール
|
|
45
|
+
npm install -g license-checker
|
|
46
|
+
|
|
47
|
+
# 依存関係のライセンス一覧
|
|
48
|
+
license-checker --summary
|
|
49
|
+
|
|
50
|
+
# 問題のあるライセンスを検出
|
|
51
|
+
license-checker --failOn "GPL;AGPL;SSPL"
|
|
52
|
+
|
|
53
|
+
# JSON出力(詳細分析用)
|
|
54
|
+
license-checker --json > licenses.json
|
|
55
|
+
|
|
56
|
+
# 特定ライセンスのみ表示
|
|
57
|
+
license-checker --onlyAllow "MIT;Apache-2.0;BSD"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Python プロジェクト
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# pip-licenses インストール
|
|
64
|
+
pip install pip-licenses
|
|
65
|
+
|
|
66
|
+
# 一覧表示
|
|
67
|
+
pip-licenses
|
|
68
|
+
|
|
69
|
+
# Markdown形式で出力
|
|
70
|
+
pip-licenses --format=markdown
|
|
71
|
+
|
|
72
|
+
# 許可リスト形式(違反を検出)
|
|
73
|
+
pip-licenses --allow-only="MIT;Apache 2.0;BSD"
|
|
74
|
+
|
|
75
|
+
# 禁止リスト形式
|
|
76
|
+
pip-licenses --fail-on="GPL;AGPL"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Java プロジェクト(Gradle)
|
|
80
|
+
|
|
81
|
+
```gradle
|
|
82
|
+
// build.gradleに追加
|
|
83
|
+
plugins {
|
|
84
|
+
id 'com.github.hierynomus.license' version '0.16.1'
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
license {
|
|
88
|
+
header rootProject.file('LICENSE_HEADER')
|
|
89
|
+
strictCheck true
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
または Maven:
|
|
94
|
+
|
|
95
|
+
```xml
|
|
96
|
+
<plugin>
|
|
97
|
+
<groupId>org.codehaus.mojo</groupId>
|
|
98
|
+
<artifactId>license-maven-plugin</artifactId>
|
|
99
|
+
<version>2.0.0</version>
|
|
100
|
+
</plugin>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### PHP プロジェクト(Composer)
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# composer-licenses インストール
|
|
107
|
+
composer require dominikzogg/composer-licenses --dev
|
|
108
|
+
|
|
109
|
+
# ライセンス一覧
|
|
110
|
+
./vendor/bin/composer-licenses
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 汎用ツール
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# FOSSA CLI(多言語対応)
|
|
117
|
+
fossa analyze
|
|
118
|
+
fossa test
|
|
119
|
+
|
|
120
|
+
# Snyk(セキュリティ + ライセンス)
|
|
121
|
+
snyk test --all-projects
|
|
122
|
+
snyk monitor
|
|
123
|
+
|
|
124
|
+
# Black Duck(エンタープライズ)
|
|
125
|
+
# GitHub App: License Compliance Action
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## ライセンス違反発見時の対応フロー
|
|
129
|
+
|
|
130
|
+
### Step 1: 問題のある依存関係を特定
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Node.js の例
|
|
134
|
+
license-checker --json | jq '.[] | select(.licenses | contains("GPL"))'
|
|
135
|
+
|
|
136
|
+
# Python の例
|
|
137
|
+
pip-licenses --fail-on="GPL"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Step 2: 依存関係の調査
|
|
141
|
+
|
|
142
|
+
1. **直接依存か間接依存か確認**
|
|
143
|
+
```bash
|
|
144
|
+
# Node.js
|
|
145
|
+
npm ls <package-name>
|
|
146
|
+
|
|
147
|
+
# Python
|
|
148
|
+
pipdeptree -p <package-name>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
2. **使用箇所を特定**
|
|
152
|
+
```bash
|
|
153
|
+
grep -r "import <package-name>" .
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Step 3: 代替パッケージを調査
|
|
157
|
+
|
|
158
|
+
- **同等機能のパッケージを検索**
|
|
159
|
+
- npmtrends.com(Node.js)
|
|
160
|
+
- pypi.org(Python)
|
|
161
|
+
- Maven Central(Java)
|
|
162
|
+
|
|
163
|
+
- **ライセンス互換性を確認**
|
|
164
|
+
- 代替パッケージのライセンスをチェック
|
|
165
|
+
- 依存関係も確認
|
|
166
|
+
|
|
167
|
+
### Step 4: 対応策の実施
|
|
168
|
+
|
|
169
|
+
**A) 代替パッケージに置換**
|
|
170
|
+
```bash
|
|
171
|
+
npm uninstall <問題パッケージ>
|
|
172
|
+
npm install <代替パッケージ>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**B) 除外(使用していない場合)**
|
|
176
|
+
```bash
|
|
177
|
+
npm uninstall <問題パッケージ>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**C) 法務/コンプライアンスチームに相談**
|
|
181
|
+
- GPLライセンスの影響範囲を評価
|
|
182
|
+
- デュアルライセンスの可能性を確認
|
|
183
|
+
- 商用ライセンス購入の検討
|
|
184
|
+
|
|
185
|
+
## ライセンス互換性マトリクス
|
|
186
|
+
|
|
187
|
+
| 使用するライセンス | 依存先で許可されるライセンス |
|
|
188
|
+
|------------------|--------------------------|
|
|
189
|
+
| MIT/BSD/Apache | ほぼすべて(GPL除く) |
|
|
190
|
+
| GPL v2 | GPL v2のみ |
|
|
191
|
+
| GPL v3 | GPL v3, AGPL v3 |
|
|
192
|
+
| LGPL | すべて(動的リンク時) |
|
|
193
|
+
| 商用ライセンス | MIT/BSD/Apache推奨 |
|
|
194
|
+
|
|
195
|
+
## CI/CDへの組み込み
|
|
196
|
+
|
|
197
|
+
### GitHub Actions 例
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
name: License Check
|
|
201
|
+
|
|
202
|
+
on: [push, pull_request]
|
|
203
|
+
|
|
204
|
+
jobs:
|
|
205
|
+
license-check:
|
|
206
|
+
runs-on: ubuntu-latest
|
|
207
|
+
steps:
|
|
208
|
+
- uses: actions/checkout@v2
|
|
209
|
+
|
|
210
|
+
- name: Install license-checker
|
|
211
|
+
run: npm install -g license-checker
|
|
212
|
+
|
|
213
|
+
- name: Check licenses
|
|
214
|
+
run: license-checker --failOn "GPL;AGPL;SSPL"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Screwdriver 例
|
|
218
|
+
|
|
219
|
+
```yaml
|
|
220
|
+
jobs:
|
|
221
|
+
main:
|
|
222
|
+
steps:
|
|
223
|
+
- license-check: npm run license-check
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 参考資料
|
|
227
|
+
|
|
228
|
+
- [SPDX License List](https://spdx.org/licenses/) - 標準ライセンス一覧
|
|
229
|
+
- [choosealicense.com](https://choosealicense.com/) - ライセンス選択ガイド
|
|
230
|
+
- [OSS Watch License Compliance](https://www.oss-watch.ac.uk/) - コンプライアンスガイド
|
|
231
|
+
- [FOSSA Documentation](https://fossa.com/docs) - ライセンス管理ツール
|
|
232
|
+
- [GNU License List](https://www.gnu.org/licenses/license-list.html) - GPLとの互換性情報
|