@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
|
@@ -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
|
- 判別共用体(Discriminated Union)
|
|
23
29
|
- アクティブパターン
|
|
24
30
|
- 型拡張とインターフェース
|
|
@@ -26,16 +32,22 @@
|
|
|
26
32
|
### 第2部: 仕様とテスト
|
|
27
33
|
|
|
28
34
|
4. [データ検証](./04-data-validation.md)
|
|
35
|
+
|
|
36
|
+
|
|
29
37
|
- Result 型によるエラーハンドリング
|
|
30
38
|
- Computation Expression
|
|
31
39
|
- カスタムバリデータの作成
|
|
32
40
|
|
|
33
41
|
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
- FsCheck の基本
|
|
35
45
|
- ジェネレータの作成
|
|
36
46
|
- プロパティの定義と検証
|
|
37
47
|
|
|
38
48
|
6. [TDD と関数型プログラミング](./06-tdd-functional.md)
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
- xUnit / Expecto によるテスト
|
|
40
52
|
- Red-Green-Refactor サイクル
|
|
41
53
|
- テストファーストの関数設計
|
|
@@ -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
|
- fold による走査
|
|
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
|
- マクロコマンド
|
|
71
93
|
|
|
72
94
|
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
95
|
+
|
|
96
|
+
|
|
73
97
|
- パターンマッチによる訪問
|
|
74
98
|
- fold ベースのビジター
|
|
75
99
|
- 拡張可能なビジター
|
|
@@ -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
|
- 不変状態の管理
|
|
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
|
- MailboxProcessor(Agent)
|
|
108
144
|
- 非同期ワークフロー
|
|
109
145
|
- 並行状態管理
|
|
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
|
- Computation Expression
|
|
126
168
|
- 関数デコレーター
|
|
127
169
|
- テスタブルな設計
|
|
128
170
|
|
|
129
171
|
22. [OO から FP への移行](./22-oo-to-fp-migration.md)
|
|
172
|
+
|
|
173
|
+
|
|
130
174
|
- 移行戦略
|
|
131
175
|
- イベントソーシング
|
|
132
176
|
- 段階的な関数抽出
|
|
@@ -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
|
- enum と代数的データ型
|
|
23
29
|
- trait による抽象化
|
|
24
30
|
- ジェネリクスと trait bounds
|
|
@@ -26,16 +32,22 @@
|
|
|
26
32
|
### 第2部: 仕様とテスト
|
|
27
33
|
|
|
28
34
|
4. [データ検証](./04-data-validation.md)
|
|
35
|
+
|
|
36
|
+
|
|
29
37
|
- 型によるバリデーション
|
|
30
38
|
- Result によるエラーハンドリング
|
|
31
39
|
- カスタムバリデータの作成
|
|
32
40
|
|
|
33
41
|
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
- proptest の基本
|
|
35
45
|
- ジェネレータの作成
|
|
36
46
|
- プロパティの定義と検証
|
|
37
47
|
|
|
38
48
|
6. [TDD と関数型プログラミング](./06-tdd-and-functional.md)
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
- Rust 組み込みテストの活用
|
|
40
52
|
- Red-Green-Refactor サイクル
|
|
41
53
|
- テストファーストの関数設計
|
|
@@ -43,16 +55,22 @@
|
|
|
43
55
|
### 第3部: 構造パターン
|
|
44
56
|
|
|
45
57
|
7. [Composite パターン](./07-composite-pattern.md)
|
|
58
|
+
|
|
59
|
+
|
|
46
60
|
- 再帰的なデータ構造
|
|
47
61
|
- enum によるツリー構造
|
|
48
62
|
- fold による走査
|
|
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
|
- マクロコマンド
|
|
71
93
|
|
|
72
94
|
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
95
|
+
|
|
96
|
+
|
|
73
97
|
- match によるパターンマッチ
|
|
74
98
|
- fold ベースのビジター
|
|
75
99
|
- 拡張可能なビジター
|
|
@@ -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
|
- trait オブジェクトによる生成
|
|
82
108
|
- 依存性注入
|
|
83
109
|
|
|
84
110
|
14. [Abstract Server パターン](./14-abstract-server-pattern.md)
|
|
111
|
+
|
|
112
|
+
|
|
85
113
|
- trait による抽象化
|
|
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
|
- 不変状態の管理
|
|
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
|
- Mutex と RwLock による状態管理
|
|
108
144
|
- チャネルによるメッセージパッシング
|
|
109
145
|
- async/await と Tokio
|
|
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
|
- 関数デコレーター
|
|
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
|
- 段階的な関数抽出
|
|
@@ -75,6 +75,8 @@ enum OrderStatus:
|
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
**ポイント**:
|
|
78
|
+
|
|
79
|
+
|
|
78
80
|
- case class を使用(不変性を保証)
|
|
79
81
|
- 必要最小限のフィールド
|
|
80
82
|
- 明確な命名
|
|
@@ -98,6 +100,8 @@ object OrderCalculations:
|
|
|
98
100
|
```
|
|
99
101
|
|
|
100
102
|
**原則**:
|
|
103
|
+
|
|
104
|
+
|
|
101
105
|
- 1つの関数は1つのことを行う
|
|
102
106
|
- 入力から出力への純粋な変換
|
|
103
107
|
- 副作用なし
|
|
@@ -183,6 +187,8 @@ object ImmutableUpdates:
|
|
|
183
187
|
```
|
|
184
188
|
|
|
185
189
|
**イミュータビリティの利点**:
|
|
190
|
+
|
|
191
|
+
|
|
186
192
|
- 元のデータは変更されない
|
|
187
193
|
- 履歴の追跡が容易
|
|
188
194
|
- 並行処理が安全
|
|
@@ -75,6 +75,8 @@ object OOStyle:
|
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
**問題点**:
|
|
78
|
+
|
|
79
|
+
|
|
78
80
|
- 内部状態が可変
|
|
79
81
|
- テストが困難(状態に依存)
|
|
80
82
|
- 履歴の追跡が難しい
|
|
@@ -121,6 +123,8 @@ object FPStyle:
|
|
|
121
123
|
```
|
|
122
124
|
|
|
123
125
|
**利点**:
|
|
126
|
+
|
|
127
|
+
|
|
124
128
|
- 元のデータは不変
|
|
125
129
|
- テストが容易(入力 → 出力)
|
|
126
130
|
- 完全な履歴を保持
|
|
@@ -271,6 +275,8 @@ val account = replayEvents(events) // balance: 700
|
|
|
271
275
|
```
|
|
272
276
|
|
|
273
277
|
**利点**:
|
|
278
|
+
|
|
279
|
+
|
|
274
280
|
- 完全な監査証跡
|
|
275
281
|
- 任意の時点の状態を再構築可能
|
|
276
282
|
- デバッグが容易
|
|
@@ -9,16 +9,22 @@
|
|
|
9
9
|
### 第1部: 関数型プログラミングの基礎原則
|
|
10
10
|
|
|
11
11
|
1. [不変性とデータ変換](./01-immutability-and-data-transformation.md)
|
|
12
|
+
|
|
13
|
+
|
|
12
14
|
- case class と不変データ構造
|
|
13
15
|
- データ変換パイプライン
|
|
14
16
|
- 副作用の分離
|
|
15
17
|
|
|
16
18
|
2. [関数合成と高階関数](./02-function-composition.md)
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
- andThen と compose による関数合成
|
|
18
22
|
- カリー化と部分適用
|
|
19
23
|
- 高階関数の活用
|
|
20
24
|
|
|
21
25
|
3. [多態性の実現方法](./03-polymorphism.md)
|
|
26
|
+
|
|
27
|
+
|
|
22
28
|
- sealed trait と代数的データ型
|
|
23
29
|
- トレイトとミックスイン
|
|
24
30
|
- 型クラスによる既存型の拡張
|
|
@@ -26,16 +32,22 @@
|
|
|
26
32
|
### 第2部: 仕様とテスト
|
|
27
33
|
|
|
28
34
|
4. [データ検証](./04-data-validation.md)
|
|
35
|
+
|
|
36
|
+
|
|
29
37
|
- 型によるバリデーション
|
|
30
38
|
- Either によるエラーハンドリング
|
|
31
39
|
- カスタムバリデータの作成
|
|
32
40
|
|
|
33
41
|
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
- ScalaCheck の基本
|
|
35
45
|
- ジェネレータの作成
|
|
36
46
|
- プロパティの定義と検証
|
|
37
47
|
|
|
38
48
|
6. [TDD と関数型プログラミング](./06-tdd-functional.md)
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
- ScalaTest によるテスト
|
|
40
52
|
- Red-Green-Refactor サイクル
|
|
41
53
|
- テストファーストの関数設計
|
|
@@ -43,16 +55,22 @@
|
|
|
43
55
|
### 第3部: 構造パターン
|
|
44
56
|
|
|
45
57
|
7. [Composite パターン](./07-composite-pattern.md)
|
|
58
|
+
|
|
59
|
+
|
|
46
60
|
- 再帰的なデータ構造
|
|
47
61
|
- ADT によるツリー構造
|
|
48
62
|
- fold による走査
|
|
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
|
- マクロコマンド
|
|
71
93
|
|
|
72
94
|
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
95
|
+
|
|
96
|
+
|
|
73
97
|
- パターンマッチによる訪問
|
|
74
98
|
- fold ベースのビジター
|
|
75
99
|
- 拡張可能なビジター
|
|
@@ -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
|
- 不変状態の管理
|
|
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
|
- 状態マシン
|
|
108
144
|
- イベントバス
|
|
109
145
|
- AtomicReference による同期
|
|
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
|
- IO モナド
|
|
126
168
|
- 関数デコレーター
|
|
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
|
- 段階的な関数抽出
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
| Haskell | オプション(推論優先) | HM 型推論 | あり(型クラス) |
|
|
21
21
|
|
|
22
22
|
**メリット**:
|
|
23
|
+
|
|
24
|
+
|
|
23
25
|
- コンパイル時にバグを検出できる
|
|
24
26
|
- IDE の補完・リファクタリングが強力
|
|
25
27
|
- ドキュメントとしての型情報
|
|
@@ -39,6 +41,8 @@
|
|
|
39
41
|
| Elixir | Typespec | Dialyzer |
|
|
40
42
|
|
|
41
43
|
**メリット**:
|
|
44
|
+
|
|
45
|
+
|
|
42
46
|
- 素早いプロトタイピング
|
|
43
47
|
- 柔軟なデータ操作
|
|
44
48
|
- REPL での探索的開発
|
|
@@ -21,11 +21,15 @@ Java ──→ Python
|
|
|
21
21
|
| 2 | **Python** | 1-2 週間 | 動的型付け、ABC、デコレータ、pytest |
|
|
22
22
|
|
|
23
23
|
**Java を最初に学ぶ理由**:
|
|
24
|
+
|
|
25
|
+
|
|
24
26
|
- 静的型付けと OOP の概念が明確に分かれている
|
|
25
27
|
- JUnit 5 の構造が TDD の基本パターンを学ぶのに最適
|
|
26
28
|
- エコシステムが成熟しており、学習リソースが豊富
|
|
27
29
|
|
|
28
30
|
**Python を 2 番目に学ぶ理由**:
|
|
31
|
+
|
|
32
|
+
|
|
29
33
|
- Java との対比で動的型付けの利点と欠点を体感できる
|
|
30
34
|
- pytest のシンプルさが TDD の本質を理解させる
|
|
31
35
|
- マルチパラダイムへの橋渡し
|
|
@@ -50,6 +54,8 @@ TypeScript ──→ Ruby ──→ Go or Rust
|
|
|
50
54
|
| 5b | **Rust** | 2-3 週間 | 所有権、借用、trait、Result/Option、Clippy |
|
|
51
55
|
|
|
52
56
|
**Go と Rust はどちらか一方を選択、または順に学習**:
|
|
57
|
+
|
|
58
|
+
|
|
53
59
|
- **Go**: シンプルさを重視する場合。インターフェースの構造的部分型が新鮮
|
|
54
60
|
- **Rust**: 型安全性を深く理解したい場合。所有権システムが根本的に新しい
|
|
55
61
|
|
|
@@ -75,11 +81,15 @@ F# ──→ Scala ──→ Elixir or Clojure ──→ Haskell
|
|
|
75
81
|
| 9 | **Haskell** | 3-4 週間 | 型クラス、モナド、遅延評価、do 記法 |
|
|
76
82
|
|
|
77
83
|
**F# を FP の入口に選ぶ理由**:
|
|
84
|
+
|
|
85
|
+
|
|
78
86
|
- C# と同じ .NET ランタイム上で動作し、既存知識を活かせる
|
|
79
87
|
- 判別共用体とパターンマッチングが FP の核心を教えてくれる
|
|
80
88
|
- パイプライン演算子がデータフローの思考法を身につけさせる
|
|
81
89
|
|
|
82
90
|
**Haskell を最後に学ぶ理由**:
|
|
91
|
+
|
|
92
|
+
|
|
83
93
|
- 純粋関数型の概念(モナド、型クラス)は他の FP 言語の基礎があると理解しやすい
|
|
84
94
|
- 他の言語で「なぜ FP が有用か」を体感した後に、最も厳密な FP を学ぶ
|
|
85
95
|
|
|
@@ -182,16 +192,22 @@ PHP と C# は上記のフェーズに含まれていませんが、以下のタ
|
|
|
182
192
|
### 各フェーズで意識すべきこと
|
|
183
193
|
|
|
184
194
|
**フェーズ 1**:
|
|
195
|
+
|
|
196
|
+
|
|
185
197
|
- TDD の Red-Green-Refactor サイクルを体に染み込ませる
|
|
186
198
|
- テストを「先に」書く習慣を確立する
|
|
187
199
|
- 静的型付けと動的型付けの違いを体感する
|
|
188
200
|
|
|
189
201
|
**フェーズ 2**:
|
|
202
|
+
|
|
203
|
+
|
|
190
204
|
- 同じ FizzBuzz 仕様を異なる言語で実装し、「何が同じで何が違うか」を意識する
|
|
191
205
|
- 各言語のイディオムを尊重する(Go のシンプルさ、Ruby の表現力)
|
|
192
206
|
- リンターの指摘を通じて「その言語らしいコード」を学ぶ
|
|
193
207
|
|
|
194
208
|
**フェーズ 3**:
|
|
209
|
+
|
|
210
|
+
|
|
195
211
|
- 「なぜ不変データが有用か」を自分の言葉で説明できるようになる
|
|
196
212
|
- パターンマッチングの威力を体感する
|
|
197
213
|
- モナドを「怖いもの」ではなく「便利な道具」として理解する
|
|
@@ -19,6 +19,8 @@ end
|
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
`dup.freeze` のパターンにより:
|
|
22
|
+
|
|
23
|
+
|
|
22
24
|
- `dup` で元の配列を変更しない
|
|
23
25
|
- `freeze` で内部配列の変更を禁止
|
|
24
26
|
|
|
@@ -170,6 +172,8 @@ end
|
|
|
170
172
|
```
|
|
171
173
|
|
|
172
174
|
`then` を使うことで、処理の流れが上から下へ自然に読めます:
|
|
175
|
+
|
|
176
|
+
|
|
173
177
|
1. `(1..@count)` — 1 から count の Range を作成
|
|
174
178
|
2. `.map { ... }` — 各数値を FizzBuzzValue に変換
|
|
175
179
|
3. `.then { ... }` — 結果の配列を FizzBuzzList でラップ
|