@k2works/claude-code-booster 3.1.1 → 3.2.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/lib/assets/.claude/skills/operating-docs/SKILL.md +19 -0
- package/lib/assets/CLAUDE.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +11 -6
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +12 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +6 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +44 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +44 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +4 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +10 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +44 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +44 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +2 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +6 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +6 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +44 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +4 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +16 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +4 -0
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +6 -0
- package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +8 -0
- package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +16 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +2 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +2 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +2 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +2 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +2 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +2 -0
- package/lib/assets/docs/article/grokkingfp/java/part-1.md +2 -0
- package/lib/assets/docs/article/grokkingfp/java/part-2.md +8 -0
- package/lib/assets/docs/article/grokkingfp/java/part-6.md +4 -0
- package/lib/assets/docs/article/grokkingfp/python/part-1.md +6 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +2 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +2 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-4.md +2 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-1.md +2 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-3.md +2 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-6.md +2 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +2 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +2 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +2 -0
- package/lib/assets/docs/design/index.md +5 -0
- package/lib/assets/docs/index.md +3 -3
- package/lib/assets/docs/reference/Java/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +17 -15
- package/lib/assets/docs/reference/SonarQube/343/203/255/343/203/274/343/202/253/343/203/253/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 +2 -0
- package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +2 -0
- package/lib/assets/docs/reference/images/.gitkeep +0 -0
- package/lib/assets/docs/reference/images/Ansoff.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BMC.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BrandValue.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/BusinessActivitiy.svg +4 -0
- package/lib/assets/docs/reference/images/HRM.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/OrganizationElemnts.svg +4 -0
- package/lib/assets/docs/reference/images/PPM.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/ProductMix.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/SWOT.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/VRIO.drawio.svg +4 -0
- package/lib/assets/docs/reference/images/ValueChain.drawio.svg +4 -0
- package/lib/assets/docs/reference/index.md +11 -5
- package/lib/assets/docs/reference//343/202/263/343/203/274/343/203/207/343/202/243/343/203/263/343/202/260/343/201/250/343/203/206/343/202/271/343/203/210/343/202/254/343/202/244/343/203/211.md +8 -8
- package/lib/assets/docs/reference//343/203/206/343/202/271/343/203/210/346/210/246/347/225/245/343/202/254/343/202/244/343/203/211.md +12 -12
- package/lib/assets/docs/reference//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +15 -15
- package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/203/273/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/343/202/254/343/202/244/343/203/211.md +2 -0
- package/lib/assets/docs/reference//343/203/255/343/202/270/343/202/253/343/203/253/343/202/267/343/203/263/343/202/255/343/203/263/343/202/260.md +1367 -0
- package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2637 -0
- package/lib/assets/docs/reference//350/250/200/350/252/236/345/210/245/351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +2 -0
- package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1391 -0
- package/lib/assets/docs/reference//351/235/236/346/251/237/350/203/275/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +12 -12
- package/lib/assets/docs/template/index.md +10 -9
- package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +4 -2
- package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +573 -0
- package/lib/assets/mkdocs.yml +33 -29
- package/package.json +1 -1
|
@@ -93,6 +93,7 @@ description: 設計ドキュメントの一覧表示、進捗確認、内容参
|
|
|
93
93
|
|
|
94
94
|
- タスク項目(リスト)の前には空行が必要
|
|
95
95
|
- 番号付きリストのサブリスト前にも空行が必要
|
|
96
|
+
- 番号付きリストのサブリストは 5 スペースインデント(3 スペースは NG)
|
|
96
97
|
- コロンで終わる行の直後にリストがある場合も空行が必要
|
|
97
98
|
- 太字ラベル(半角・全角コロン両方)の直後にリストがある場合も空行が必要
|
|
98
99
|
|
|
@@ -126,6 +127,24 @@ description: 設計ドキュメントの一覧表示、進捗確認、内容参
|
|
|
126
127
|
- コントロールパネル > ファイルサービス > SMB で設定
|
|
127
128
|
```
|
|
128
129
|
|
|
130
|
+
**NG 例** - 番号付きリストのサブリストのインデントが浅い:
|
|
131
|
+
|
|
132
|
+
```markdown
|
|
133
|
+
1. **データとしてのパターン**
|
|
134
|
+
|
|
135
|
+
- すべてのパターンがデータ構造として表現される
|
|
136
|
+
- パターン間の境界が明確
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**OK 例**:
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
1. **データとしてのパターン**
|
|
143
|
+
|
|
144
|
+
- すべてのパターンがデータ構造として表現される
|
|
145
|
+
- パターン間の境界が明確
|
|
146
|
+
```
|
|
147
|
+
|
|
129
148
|
**NG 例** - コロンで終わる行の直後にリスト:
|
|
130
149
|
|
|
131
150
|
```markdown
|
package/lib/assets/CLAUDE.md
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
よいソフトウェアについての考えと規律と経験に関する知見は @docs/reference 内を参照してください。
|
|
12
12
|
|
|
13
|
+
あなたは @docs/reference/ロジカルシンキング.md に従い論理的に考え、問題を分析し、解決策を構築します。
|
|
14
|
+
|
|
13
15
|
あなたは @docs/reference/開発ガイド.md に従いソフトウェア開発を手段として問題解決に取り組みます。
|
|
14
16
|
|
|
15
17
|
あなたは既存のソフトウエア開発のベストプラクティスと最新の AI テクノロジーを融合させることによりソフトウエア開発にイノベーションをもたらします。
|
|
@@ -151,6 +151,8 @@ BorderedShape o-- Shape : wraps
|
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
**ポイント**:
|
|
154
|
+
|
|
155
|
+
|
|
154
156
|
- `mapv` を使用してベクターを返す(イミュータブル)
|
|
155
157
|
- 各子要素に対して同じ操作を適用
|
|
156
158
|
|
|
@@ -483,16 +485,19 @@ stop
|
|
|
483
485
|
### 4.3 関数型での組み合わせの利点
|
|
484
486
|
|
|
485
487
|
1. **データとしてのパターン**
|
|
486
|
-
|
|
487
|
-
|
|
488
|
+
|
|
489
|
+
- すべてのパターンがデータ構造として表現される
|
|
490
|
+
- パターン間の境界が明確
|
|
488
491
|
|
|
489
492
|
2. **合成可能性**
|
|
490
|
-
|
|
491
|
-
|
|
493
|
+
|
|
494
|
+
- 関数合成により自然にパターンを組み合わせ可能
|
|
495
|
+
- パイプラインで処理を連結
|
|
492
496
|
|
|
493
497
|
3. **テスト容易性**
|
|
494
|
-
|
|
495
|
-
|
|
498
|
+
|
|
499
|
+
- 各パターンが純粋関数で実装
|
|
500
|
+
- 組み合わせもテストしやすい
|
|
496
501
|
|
|
497
502
|
## 5. テストコード
|
|
498
503
|
|
|
@@ -71,6 +71,8 @@ funcs --> effects : 境界で実行
|
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
**ポイント**:
|
|
74
|
+
|
|
75
|
+
|
|
74
76
|
- プレーンなマップを使用(クラスではなく)
|
|
75
77
|
- 必要最小限のフィールド
|
|
76
78
|
- 明確な命名
|
|
@@ -90,6 +92,8 @@ funcs --> effects : 境界で実行
|
|
|
90
92
|
```
|
|
91
93
|
|
|
92
94
|
**原則**:
|
|
95
|
+
|
|
96
|
+
|
|
93
97
|
- 1つの関数は1つのことを行う
|
|
94
98
|
- 入力から出力への純粋な変換
|
|
95
99
|
- 副作用なし
|
|
@@ -116,6 +120,8 @@ funcs --> effects : 境界で実行
|
|
|
116
120
|
```
|
|
117
121
|
|
|
118
122
|
**スレッドマクロ `->` の活用**:
|
|
123
|
+
|
|
124
|
+
|
|
119
125
|
- データの流れが明確
|
|
120
126
|
- 各ステップが独立
|
|
121
127
|
- デバッグしやすい
|
|
@@ -140,6 +146,8 @@ funcs --> effects : 境界で実行
|
|
|
140
146
|
```
|
|
141
147
|
|
|
142
148
|
**検証関数のパターン**:
|
|
149
|
+
|
|
150
|
+
|
|
143
151
|
- 述語関数(`?` で終わる)を使用
|
|
144
152
|
- 合成可能な小さな検証
|
|
145
153
|
- 明確なエラー条件
|
|
@@ -164,6 +172,8 @@ funcs --> effects : 境界で実行
|
|
|
164
172
|
```
|
|
165
173
|
|
|
166
174
|
**イミュータビリティの利点**:
|
|
175
|
+
|
|
176
|
+
|
|
167
177
|
- 元のデータは変更されない
|
|
168
178
|
- 履歴の追跡が容易
|
|
169
179
|
- 並行処理が安全
|
|
@@ -185,6 +195,8 @@ funcs --> effects : 境界で実行
|
|
|
185
195
|
```
|
|
186
196
|
|
|
187
197
|
**純粋関数の条件**:
|
|
198
|
+
|
|
199
|
+
|
|
188
200
|
1. 同じ入力に対して常に同じ出力
|
|
189
201
|
2. 副作用がない
|
|
190
202
|
3. 外部状態に依存しない
|
|
@@ -80,6 +80,8 @@ inherit --> compose : 変換
|
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
**問題点**:
|
|
83
|
+
|
|
84
|
+
|
|
83
85
|
- 内部状態が可変
|
|
84
86
|
- テストが困難(状態に依存)
|
|
85
87
|
- 履歴の追跡が難しい
|
|
@@ -120,6 +122,8 @@ inherit --> compose : 変換
|
|
|
120
122
|
```
|
|
121
123
|
|
|
122
124
|
**利点**:
|
|
125
|
+
|
|
126
|
+
|
|
123
127
|
- 元のデータは不変
|
|
124
128
|
- テストが容易(入力 → 出力)
|
|
125
129
|
- 完全な履歴を保持
|
|
@@ -248,6 +252,8 @@ rectangle "フェーズ3" {
|
|
|
248
252
|
```
|
|
249
253
|
|
|
250
254
|
**利点**:
|
|
255
|
+
|
|
256
|
+
|
|
251
257
|
- 完全な監査証跡
|
|
252
258
|
- 任意の時点の状態を再構築可能
|
|
253
259
|
- デバッグが容易
|
|
@@ -9,16 +9,22 @@
|
|
|
9
9
|
### 第1部: 関数型プログラミングの基礎原則
|
|
10
10
|
|
|
11
11
|
1. [不変性とデータ変換](./01-immutability-and-data-transformation.md)
|
|
12
|
+
|
|
13
|
+
|
|
12
14
|
- 不変データ構造の重要性
|
|
13
15
|
- データ変換パイプライン
|
|
14
16
|
- 副作用の分離
|
|
15
17
|
|
|
16
18
|
2. [関数合成と高階関数](./02-function-composition.md)
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
- 関数合成の基本
|
|
18
22
|
- 部分適用とカリー化
|
|
19
23
|
- 高階関数の活用
|
|
20
24
|
|
|
21
25
|
3. [多態性の実現方法](./03-polymorphism.md)
|
|
26
|
+
|
|
27
|
+
|
|
22
28
|
- マルチメソッドによるディスパッチ
|
|
23
29
|
- プロトコルとレコード
|
|
24
30
|
- マルチメソッド vs プロトコルの使い分け
|
|
@@ -26,16 +32,22 @@
|
|
|
26
32
|
### 第2部: 仕様とテスト
|
|
27
33
|
|
|
28
34
|
4. [Clojure Spec による仕様定義](./04-clojure-spec.md)
|
|
35
|
+
|
|
36
|
+
|
|
29
37
|
- データ構造の仕様定義
|
|
30
38
|
- 関数仕様の定義(fdef)
|
|
31
39
|
- 実行時検証と自動テスト生成
|
|
32
40
|
|
|
33
41
|
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
- test.check の基本
|
|
35
45
|
- ジェネレータの作成
|
|
36
46
|
- プロパティの定義と検証
|
|
37
47
|
|
|
38
48
|
6. [テスト駆動開発と関数型プログラミング](./06-tdd-in-functional.md)
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
- Red-Green-Refactor サイクル
|
|
40
52
|
- テストファーストの関数設計
|
|
41
53
|
- リファクタリングと不変性
|
|
@@ -43,18 +55,24 @@
|
|
|
43
55
|
### 第3部: デザインパターン - 構造パターン
|
|
44
56
|
|
|
45
57
|
7. [Composite パターン](./07-composite-pattern.md)
|
|
58
|
+
|
|
59
|
+
|
|
46
60
|
- 個別オブジェクトと複合オブジェクトの統一的な扱い
|
|
47
61
|
- Shape(図形)の移動・拡大を統一インターフェースで操作
|
|
48
62
|
- Switchable(スイッチ)のグループ化と一括操作
|
|
49
63
|
- マルチメソッドによる多態性の実現
|
|
50
64
|
|
|
51
65
|
8. [Decorator パターン](./08-decorator-pattern.md)
|
|
66
|
+
|
|
67
|
+
|
|
52
68
|
- 機能の動的な追加
|
|
53
69
|
- JournaledShape: 操作履歴の記録(ジャーナリング)
|
|
54
70
|
- 関数デコレータ: ログ、リトライ、キャッシュ
|
|
55
71
|
- デコレータの組み合わせ
|
|
56
72
|
|
|
57
73
|
9. [Adapter パターン](./09-adapter-pattern.md)
|
|
74
|
+
|
|
75
|
+
|
|
58
76
|
- インターフェースの変換
|
|
59
77
|
- VariableLightAdapter: 可変強度ライトをオン/オフに適応
|
|
60
78
|
- データフォーマットアダプター: 新旧フォーマット変換
|
|
@@ -63,18 +81,24 @@
|
|
|
63
81
|
### 第4部: デザインパターン - 振る舞いパターン
|
|
64
82
|
|
|
65
83
|
10. [Strategy パターン](./10-strategy-pattern.md)
|
|
84
|
+
|
|
85
|
+
|
|
66
86
|
- アルゴリズムをカプセル化し交換可能にする
|
|
67
87
|
- 料金計算: 通常・割引・会員・数量割引の各戦略
|
|
68
88
|
- 関数型アプローチ: 高階関数による戦略の合成
|
|
69
89
|
- マルチメソッドによる多態性の実現
|
|
70
90
|
|
|
71
91
|
11. [Command パターン](./11-command-pattern.md)
|
|
92
|
+
|
|
93
|
+
|
|
72
94
|
- 操作をデータとしてカプセル化
|
|
73
95
|
- テキストコマンド: 挿入・削除・置換
|
|
74
96
|
- キャンバスコマンド: 図形の追加・削除・移動
|
|
75
97
|
- Undo/Redo 機能と MacroCommand
|
|
76
98
|
|
|
77
99
|
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
100
|
+
|
|
101
|
+
|
|
78
102
|
- データ構造と操作の分離
|
|
79
103
|
- JSON/XML 変換 Visitor の実装
|
|
80
104
|
- 面積・周囲長計算 Visitor
|
|
@@ -83,12 +107,16 @@
|
|
|
83
107
|
### 第5部: デザインパターン - 生成パターン
|
|
84
108
|
|
|
85
109
|
13. [Abstract Factory パターン](./13-abstract-factory-pattern.md)
|
|
110
|
+
|
|
111
|
+
|
|
86
112
|
- 関連するオブジェクトのファミリーを一貫して生成
|
|
87
113
|
- ShapeFactory: Standard/Outlined/Filled の各実装
|
|
88
114
|
- UIFactory: プラットフォーム別 UI コンポーネント生成
|
|
89
115
|
- マルチメソッドによる製品生成のディスパッチ
|
|
90
116
|
|
|
91
117
|
14. [Abstract Server パターン](./14-abstract-server-pattern.md)
|
|
118
|
+
|
|
119
|
+
|
|
92
120
|
- 依存関係逆転の原則(DIP)の実現
|
|
93
121
|
- Switchable: Light/Fan/Motor の統一インターフェース
|
|
94
122
|
- Repository: データアクセスの抽象化
|
|
@@ -97,27 +125,37 @@
|
|
|
97
125
|
### 第6部: 実践的なケーススタディ
|
|
98
126
|
|
|
99
127
|
15. [ゴシップ好きなバスの運転手](./15-gossiping-bus-drivers.md)
|
|
128
|
+
|
|
129
|
+
|
|
100
130
|
- バス運転手が停留所で噂を共有するシミュレーション
|
|
101
131
|
- 無限シーケンス(cycle)による循環ルート表現
|
|
102
132
|
- 集合演算による噂の伝播
|
|
103
133
|
- 状態変換パイプラインの実装
|
|
104
134
|
|
|
105
135
|
16. [給与計算システム](./16-payroll-system.md)
|
|
136
|
+
|
|
137
|
+
|
|
106
138
|
- ドメインモデリング
|
|
107
139
|
- 支払いスケジュールと給与タイプ
|
|
108
140
|
- Clojure Spec によるデータ検証
|
|
109
141
|
|
|
110
142
|
17. [レンタルビデオシステム](./17-video-rental-system.md)
|
|
143
|
+
|
|
144
|
+
|
|
111
145
|
- 料金計算ロジックの設計
|
|
112
146
|
- ポリシーパターンの適用
|
|
113
147
|
- テキスト/HTML フォーマッターの実装
|
|
114
148
|
|
|
115
149
|
18. [並行処理システム](./18-concurrency-system.md)
|
|
150
|
+
|
|
151
|
+
|
|
116
152
|
- Clojure エージェントによる非同期処理
|
|
117
153
|
- 状態機械パターン
|
|
118
154
|
- イベント駆動アーキテクチャ
|
|
119
155
|
|
|
120
156
|
19. [Wa-Tor シミュレーション](./19-wator-simulation.md)
|
|
157
|
+
|
|
158
|
+
|
|
121
159
|
- 捕食者-被食者モデルの実装
|
|
122
160
|
- セルオートマトンとマルチメソッド
|
|
123
161
|
- GUI との統合(Quil)
|
|
@@ -126,16 +164,22 @@
|
|
|
126
164
|
### 第7部: まとめと応用
|
|
127
165
|
|
|
128
166
|
20. [パターン間の相互作用](./20-pattern-interactions.md)
|
|
167
|
+
|
|
168
|
+
|
|
129
169
|
- Composite と Decorator の組み合わせ
|
|
130
170
|
- Command と Observer の連携
|
|
131
171
|
- 複合的なアーキテクチャ設計
|
|
132
172
|
|
|
133
173
|
21. [関数型デザインのベストプラクティス](./21-best-practices.md)
|
|
174
|
+
|
|
175
|
+
|
|
134
176
|
- データ中心設計
|
|
135
177
|
- 純粋関数と副作用の分離
|
|
136
178
|
- テスト可能な設計
|
|
137
179
|
|
|
138
180
|
22. [オブジェクト指向から関数型への移行](./22-oo-to-fp-migration.md)
|
|
181
|
+
|
|
182
|
+
|
|
139
183
|
- 既存コードのリファクタリング戦略
|
|
140
184
|
- 段階的な移行アプローチ
|
|
141
185
|
- 共存と統合
|
|
@@ -9,16 +9,22 @@
|
|
|
9
9
|
### 第1部: 関数型プログラミングの基礎原則
|
|
10
10
|
|
|
11
11
|
1. [不変性とデータ変換](./01-immutability-and-data-transformation.md)
|
|
12
|
+
|
|
13
|
+
|
|
12
14
|
- マップと構造体による不変データ
|
|
13
15
|
- パイプ演算子によるデータ変換
|
|
14
16
|
- Enum と Stream による遅延評価
|
|
15
17
|
|
|
16
18
|
2. [関数合成と高階関数](./02-function-composition.md)
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
- 無名関数とキャプチャ演算子
|
|
18
22
|
- 関数合成のパターン
|
|
19
23
|
- 高階関数の活用
|
|
20
24
|
|
|
21
25
|
3. [多態性の実現方法](./03-polymorphism.md)
|
|
26
|
+
|
|
27
|
+
|
|
22
28
|
- プロトコルによる多態性
|
|
23
29
|
- ビヘイビアとコールバック
|
|
24
30
|
- パターンマッチングによる型の切り替え
|
|
@@ -26,16 +32,22 @@
|
|
|
26
32
|
### 第2部: 仕様とテスト
|
|
27
33
|
|
|
28
34
|
4. [データ検証](./04-data-validation.md)
|
|
35
|
+
|
|
36
|
+
|
|
29
37
|
- Ecto.Changeset によるバリデーション
|
|
30
38
|
- カスタムバリデータの作成
|
|
31
39
|
- with 式によるエラーハンドリング
|
|
32
40
|
|
|
33
41
|
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
- StreamData の基本
|
|
35
45
|
- ジェネレータの作成
|
|
36
46
|
- プロパティの定義と検証
|
|
37
47
|
|
|
38
48
|
6. [TDD と関数型プログラミング](./06-tdd-functional.md)
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
- ExUnit によるテスト
|
|
40
52
|
- Red-Green-Refactor サイクル
|
|
41
53
|
- ドキュメントテスト(doctest)
|
|
@@ -43,16 +55,22 @@
|
|
|
43
55
|
### 第3部: 構造パターン
|
|
44
56
|
|
|
45
57
|
7. [Composite パターン](./07-composite-pattern.md)
|
|
58
|
+
|
|
59
|
+
|
|
46
60
|
- 再帰的なデータ構造
|
|
47
61
|
- ネストした構造の操作
|
|
48
62
|
- アキュムレータを使った走査
|
|
49
63
|
|
|
50
64
|
8. [Decorator パターン](./08-decorator-pattern.md)
|
|
65
|
+
|
|
66
|
+
|
|
51
67
|
- 関数合成によるデコレーション
|
|
52
68
|
- 高階関数でのラッピング
|
|
53
69
|
- マクロによる振る舞いの追加
|
|
54
70
|
|
|
55
71
|
9. [Adapter パターン](./09-adapter-pattern.md)
|
|
72
|
+
|
|
73
|
+
|
|
56
74
|
- 関数アダプター
|
|
57
75
|
- プロトコル変換
|
|
58
76
|
- レガシーコードとの統合
|
|
@@ -60,16 +78,22 @@
|
|
|
60
78
|
### 第4部: 振る舞いパターン
|
|
61
79
|
|
|
62
80
|
10. [Strategy パターン](./10-strategy-pattern.md)
|
|
81
|
+
|
|
82
|
+
|
|
63
83
|
- 第一級関数としての戦略
|
|
64
84
|
- モジュールによる戦略実装
|
|
65
85
|
- 動的な戦略切り替え
|
|
66
86
|
|
|
67
87
|
11. [Command パターン](./11-command-pattern.md)
|
|
88
|
+
|
|
89
|
+
|
|
68
90
|
- 不変コマンドデータ
|
|
69
91
|
- コマンドの履歴と Undo
|
|
70
92
|
- GenServer によるコマンド管理
|
|
71
93
|
|
|
72
94
|
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
95
|
+
|
|
96
|
+
|
|
73
97
|
- パターンマッチによる訪問
|
|
74
98
|
- プロトコルベースのビジター
|
|
75
99
|
- Enum.reduce による走査
|
|
@@ -77,11 +101,15 @@
|
|
|
77
101
|
### 第5部: 生成パターン
|
|
78
102
|
|
|
79
103
|
13. [Abstract Factory パターン](./13-abstract-factory-pattern.md)
|
|
104
|
+
|
|
105
|
+
|
|
80
106
|
- 関数ファクトリー
|
|
81
107
|
- モジュールベースの生成
|
|
82
108
|
- 設定による依存性注入
|
|
83
109
|
|
|
84
110
|
14. [Abstract Server パターン](./14-abstract-server-pattern.md)
|
|
111
|
+
|
|
112
|
+
|
|
85
113
|
- ビヘイビアによる抽象化
|
|
86
114
|
- 実装の差し替え
|
|
87
115
|
- テスタブルな設計
|
|
@@ -89,26 +117,36 @@
|
|
|
89
117
|
### 第6部: ケーススタディ
|
|
90
118
|
|
|
91
119
|
15. [ゴシップ好きなバスの運転手](./15-gossiping-bus-drivers.md)
|
|
120
|
+
|
|
121
|
+
|
|
92
122
|
- Agent による状態管理
|
|
93
123
|
- シミュレーションの実装
|
|
94
124
|
- 再帰的な処理
|
|
95
125
|
|
|
96
126
|
16. [給与計算システム](./16-payroll-system.md)
|
|
127
|
+
|
|
128
|
+
|
|
97
129
|
- ドメインモデリング
|
|
98
130
|
- 多態的な計算
|
|
99
131
|
- レポート生成
|
|
100
132
|
|
|
101
133
|
17. [レンタルビデオシステム](./17-video-rental-system.md)
|
|
134
|
+
|
|
135
|
+
|
|
102
136
|
- 状態遷移の管理
|
|
103
137
|
- イベントソーシング
|
|
104
138
|
- ビジネスルールの実装
|
|
105
139
|
|
|
106
140
|
18. [並行処理システム](./18-concurrency-system.md)
|
|
141
|
+
|
|
142
|
+
|
|
107
143
|
- GenServer による状態管理
|
|
108
144
|
- Task による並行実行
|
|
109
145
|
- OTP パターン
|
|
110
146
|
|
|
111
147
|
19. [Wa-Tor シミュレーション](./19-wator-simulation.md)
|
|
148
|
+
|
|
149
|
+
|
|
112
150
|
- セルオートマトン
|
|
113
151
|
- 不変グリッドの更新
|
|
114
152
|
- プロセスベースのシミュレーション
|
|
@@ -116,17 +154,23 @@
|
|
|
116
154
|
### 第7部: まとめと応用
|
|
117
155
|
|
|
118
156
|
20. [パターン間の相互作用](./20-pattern-interactions.md)
|
|
157
|
+
|
|
158
|
+
|
|
119
159
|
- Composite + Decorator
|
|
120
160
|
- Command + Observer
|
|
121
161
|
- パターンの組み合わせ
|
|
122
162
|
|
|
123
163
|
21. [ベストプラクティス](./21-best-practices.md)
|
|
164
|
+
|
|
165
|
+
|
|
124
166
|
- データ中心設計
|
|
125
167
|
- 純粋関数の分離
|
|
126
168
|
- OTP パターンの活用
|
|
127
169
|
- テスタブルな設計
|
|
128
170
|
|
|
129
171
|
22. [OO から FP への移行](./22-oo-to-fp-migration.md)
|
|
172
|
+
|
|
173
|
+
|
|
130
174
|
- 移行戦略(Strangler Fig、アダプター)
|
|
131
175
|
- イベントソーシング
|
|
132
176
|
- 段階的な関数抽出
|
|
@@ -76,6 +76,8 @@ type AccountOO(id: string, initialBalance: decimal) =
|
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
**問題点**:
|
|
79
|
+
|
|
80
|
+
|
|
79
81
|
- 内部状態が可変
|
|
80
82
|
- テストが困難(状態に依存)
|
|
81
83
|
- 履歴の追跡が難しい
|
|
@@ -130,6 +132,8 @@ module Account =
|
|
|
130
132
|
```
|
|
131
133
|
|
|
132
134
|
**改善点**:
|
|
135
|
+
|
|
136
|
+
|
|
133
137
|
- 状態が不変
|
|
134
138
|
- 元のデータは変更されない
|
|
135
139
|
- Result 型でエラーを表現
|
|
@@ -172,6 +176,8 @@ let getName (animal: Animal) : string =
|
|
|
172
176
|
```
|
|
173
177
|
|
|
174
178
|
**利点**:
|
|
179
|
+
|
|
180
|
+
|
|
175
181
|
- 新しい動物を追加すると、コンパイラがすべての `match` を更新するよう警告
|
|
176
182
|
- 関数を追加しても既存のコードに影響なし
|
|
177
183
|
- パターンマッチングによる網羅性チェック
|
|
@@ -212,6 +218,8 @@ let createInMemoryRepo<'T> (getId: 'T -> string) : Repository<'T> =
|
|
|
212
218
|
```
|
|
213
219
|
|
|
214
220
|
**利点**:
|
|
221
|
+
|
|
222
|
+
|
|
215
223
|
- テスト用のモックが簡単
|
|
216
224
|
- 部分的な実装が可能
|
|
217
225
|
- 関数を引数として渡せる
|
|
@@ -255,6 +263,8 @@ let replay (events: AccountEvent list) : Account =
|
|
|
255
263
|
```
|
|
256
264
|
|
|
257
265
|
**利点**:
|
|
266
|
+
|
|
267
|
+
|
|
258
268
|
- 完全な履歴を保持
|
|
259
269
|
- 任意の時点の状態を再構築可能
|
|
260
270
|
- 監査ログとして使用可能
|