yukichant 3.1.0-beta.6 → 4.0.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/.cursor/rules ADDED
@@ -0,0 +1,58 @@
1
+ # yukichant プロジェクトルール
2
+
3
+ ## 言語設定
4
+
5
+ **このプロジェクトでは、すべてのコミュニケーションを日本語で行ってください。**
6
+
7
+ - すべての説明・応答は日本語で記述する
8
+ - コミットメッセージは日本語で記述する
9
+ - コードコメントは日本語で記述する
10
+ - レビューコメントは日本語で記述する
11
+ - エラーメッセージの説明は日本語で記述する
12
+
13
+ ## コミットメッセージフォーマット
14
+
15
+ コミットメッセージは以下のフォーマットで記述してください:
16
+
17
+ ```
18
+ [種別] 簡潔な説明
19
+ ```
20
+
21
+ ### 種別の例
22
+ - `[feat]`: 新機能追加
23
+ - `[fix]`: バグ修正
24
+ - `[perf]`: パフォーマンス改善
25
+ - `[refactor]`: コード整理
26
+ - `[test]`: テスト追加/修正
27
+ - `[docs]`: ドキュメント更新
28
+ - `[deps]`: 依存関係の更新
29
+ - `[chore]`: その他の変更
30
+
31
+ ### 例
32
+ ```
33
+ [feat] Levenshtein距離アルゴリズムを追加
34
+ [fix] デコード時の形態素解析エラーを修正
35
+ [docs] 誤字修正アルゴリズムの使い方を追加
36
+ [refactor] 類似度計算処理を関数化
37
+ [test] typo-correctionのテストケースを追加
38
+ ```
39
+
40
+ ## コーディング規約
41
+
42
+ - ES Modules(`import`/`export`)を使用
43
+ - 非同期処理は`async`/`await`を使用
44
+ - 関数型プログラミングスタイル(`map`, `filter`, `reduce`を活用)
45
+ - Unicode正規表現(`\p{scx=Han}`など)を積極的に使用
46
+
47
+ ## プロジェクト概要
48
+
49
+ yukichantは、テキストを日本語の詠唱呪文に変換し、元に戻すことができるNode.js製CLIツールです。
50
+
51
+ ### 主要コンポーネント
52
+ - `src/index.js`: エンコード/デコードのコアロジック
53
+ - `src/typo-correction.js`: 誤字修正機能(Jaro-Winkler / Levenshtein)
54
+ - `src/machine-encrypt.js`: ローター型暗号実装
55
+ - `data/meisi.json`, `data/dousi.json`: 名詞・動詞辞書
56
+
57
+ 詳細は `AGENTS.md` を参照してください。
58
+
@@ -0,0 +1,2 @@
1
+ [ "$CI" = "true" ] && exit 0
2
+ npx --no -- commitlint --edit $1
@@ -0,0 +1,26 @@
1
+ {
2
+ "branches": ["master"],
3
+ "plugins": [
4
+ ["@semantic-release/commit-analyzer", {
5
+ "preset": "conventionalcommits",
6
+ "releaseRules": [
7
+ { "breaking": true, "release": "major" },
8
+ { "type": "feat", "release": "minor" },
9
+ { "type": "fix", "release": "patch" },
10
+ { "type": "perf", "release": "patch" },
11
+ { "type": "refactor", "release": "patch" },
12
+ { "type": "revert", "release": "patch" }
13
+ ]
14
+ }],
15
+ ["@semantic-release/release-notes-generator", {
16
+ "preset": "conventionalcommits"
17
+ }],
18
+ "@semantic-release/changelog",
19
+ "@semantic-release/npm",
20
+ ["@semantic-release/git", {
21
+ "assets": ["package.json", "CHANGELOG.md"],
22
+ "message": "[release] ${nextRelease.version}"
23
+ }],
24
+ "@semantic-release/github"
25
+ ]
26
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,505 @@
1
+ # AGENTS.md
2
+
3
+ このドキュメントは、AIエージェント(コーディングアシスタント)がyukichantプロジェクトを理解し、効果的に開発支援を行うためのガイドです。
4
+
5
+ ## 重要な指示
6
+
7
+ **このプロジェクトでは、すべてのコミュニケーションを日本語で行ってください。**
8
+
9
+ - コード提案時の説明は日本語で記述する
10
+ - コミットメッセージは日本語で記述する
11
+ - レビューコメントは日本語で記述する
12
+ - エラーメッセージの説明は日本語で記述する
13
+ - ドキュメント・コメントは日本語で記述する
14
+
15
+ ## プロジェクト概要
16
+
17
+ **yukichant**は、テキストデータを日本語の詠唱呪文(魔法の言葉)に変換し、元のテキストに復号できるNode.js製のCLIツールです。
18
+
19
+ ### 主な機能
20
+ - **エンコード**: 任意のテキストを呪文風の日本語文章に変換
21
+ - **デコード**: 呪文を元のテキストに復号
22
+ - **誤字修正**: 呪文のタイポを自動修正してデコード(Jaro-Winkler / Levenshtein)
23
+ - **ランダム生成**: ランダムな呪文を生成
24
+
25
+ ### 技術スタック
26
+ - **言語**: JavaScript (ES Modules)
27
+ - **形態素解析**: kuromoji(yukidic辞書使用)
28
+ - **文字列類似度**: Jaro-Winkler(独自実装)、fastest-levenshtein
29
+ - **暗号化**: 独自のローター型暗号実装
30
+
31
+ ## アーキテクチャ
32
+
33
+ ### ディレクトリ構造
34
+
35
+ ```
36
+ yukichant/
37
+ ├── src/ # ソースコード
38
+ │ ├── cli.js # CLIエントリーポイント(commander使用)
39
+ │ ├── index.js # メインロジック(encode/decode/generate)
40
+ │ ├── machine-encrypt.js # ローター型暗号実装
41
+ │ ├── typo-correction.js # 誤字修正ロジック
42
+ │ ├── fuzzy-kanji-match.js # 漢字類似度マッチング
43
+ │ └── jaro-winkler.js # Jaro-Winkler実装
44
+ ├── data/ # 名詞・動詞データ(JSON)
45
+ │ ├── meisi.json # 名詞辞書(16進数コード→名詞リスト)
46
+ │ └── dousi.json # 動詞辞書(16進数コード→動詞リスト)
47
+ ├── dic/ # kuromoji用辞書(yukidic)
48
+ ├── benchmark/ # ベンチマーク・精度測定
49
+ │ ├── magi_ocr_data/ # Magiプロジェクトから取得したOCRテストデータ
50
+ │ ├── results/ # 検証結果の保存先(.gitignore対象)
51
+ │ └── scripts/ # ベンチマーク実行スクリプト
52
+ ├── __tests__/ # Jest単体テスト
53
+ └── raw_data/ # 辞書生成用スクリプト・元データ
54
+ ```
55
+
56
+ ### データフロー
57
+
58
+ #### エンコード
59
+ ```
60
+ テキスト
61
+ → UTF-8バイト配列
62
+ → ローター暗号でスクランブル
63
+ → 16進数(2桁)に変換
64
+ → 名詞/動詞マッピング(4語ごとに動詞)
65
+ → 呪文文字列
66
+ ```
67
+
68
+ #### デコード
69
+ ```
70
+ 呪文文字列
71
+ → kuromoji形態素解析
72
+ → 辞書マッチング(正規表現)
73
+ → (オプション)誤字修正
74
+ → 16進数コード復元
75
+ → ローター暗号で復号
76
+ → UTF-8テキスト
77
+ ```
78
+
79
+ ## 重要なコンポーネント
80
+
81
+ ### 1. `src/index.js` - コアロジック
82
+
83
+ #### `encode(text, option, data, encoder)`
84
+ - テキストをUTF-8バイト配列に変換
85
+ - `simpleEnigma`でスクランブル
86
+ - 16進数コードを名詞・動詞にマッピング
87
+ - パターン: `名詞 名詞 名詞 動詞。` の繰り返し
88
+
89
+ #### `decode(text, option, data, decoder)`
90
+ - `kuromoji`で形態素解析
91
+ - 辞書から逆引き(名詞/動詞 → 16進数コード)
92
+ - オプションで誤字修正(`typo-correction.js`)
93
+ - `simpleEnigma`で復号
94
+
95
+ #### `generate(length, data, generater)`
96
+ - ランダムバイト配列を生成
97
+ - エンコードして呪文を生成
98
+
99
+ ### 2. `src/typo-correction.js` - 誤字修正
100
+
101
+ #### 主要関数
102
+
103
+ ##### `exec(text, option)`
104
+ 誤字修正のメインエントリーポイント
105
+ - `kuromoji`で形態素解析
106
+ - 未知の形態素を検出・修正
107
+ - オプションに応じて類似度アルゴリズムを選択
108
+
109
+ ##### `findClosestWord(word, wordList, useLevenshtein, option)`
110
+ 最も近い単語を辞書から検索
111
+ - `useLevenshtein=true`: Levenshtein距離
112
+ - `useLevenshtein=false`: Jaro-Winkler距離(デフォルト)
113
+
114
+ ##### `nearTokenMatch(tokenStr, option)`
115
+ TF-IDF重み付けを使った高度なマッチング
116
+ - 漢字の部首・構造情報を活用
117
+ - `fuzzy-kanji-match.js`と連携
118
+
119
+ ##### `organizeUnknownTokens(ntokens, option)`
120
+ 連続する未知の形態素をまとめる
121
+ - 副詞・助詞の処理
122
+ - 形態素の位置情報を保持
123
+
124
+ #### オプション
125
+ - `is_tfidf`: TF-IDF重み付けを使用(デフォルト: false)
126
+ - `Levenshtein`: Levenshtein距離を使用(デフォルト: false、Jaro-Winkler)
127
+ - `v`: デバッグ出力(修正前後を表示)
128
+ - `Vv`: 詳細デバッグ出力(類似度スコアなど)
129
+
130
+ ### 3. `src/machine-encrypt.js` - ローター型暗号
131
+
132
+ Enigma機を模した暗号化アルゴリズム
133
+ - バイトコードの頻度分布を均等化
134
+ - 同じ入力に対して異なる暗号文を生成可能
135
+
136
+ ### 4. `src/jaro-winkler.js` - 文字列類似度
137
+
138
+ #### `JaroWinklerDistance`クラス
139
+ - `similarity(s1, s2)`: 0~1の類似度スコア(1が完全一致)
140
+ - 接頭辞一致に高い重みを与える(日本語に適している)
141
+ - パラメータ:
142
+ - `prefixScale`: 0.1(接頭辞の重み)
143
+ - `boostThreshold`: 0.7
144
+ - `prefixLength`: 4
145
+
146
+ ### 5. データ形式
147
+
148
+ #### `data/meisi.json`, `data/dousi.json`
149
+ ```json
150
+ {
151
+ "00": ["単語1", "単語2", ...],
152
+ "01": [...],
153
+ ...
154
+ "FF": [...]
155
+ }
156
+ ```
157
+ - キー: 2桁16進数(00~FF、256種類)
158
+ - 値: その16進数に対応する単語のリスト
159
+
160
+ ## 開発ガイドライン
161
+
162
+ ### コーディング規約
163
+ - ES Modules(`import`/`export`)を使用
164
+ - 非同期処理は`async`/`await`
165
+ - 関数型プログラミングスタイル(`map`, `filter`, `reduce`多用)
166
+ - Unicode正規表現(`\p{scx=Han}`など)を積極的に使用
167
+
168
+ ### テスト
169
+ ```bash
170
+ npm test # Jestで単体テスト実行
171
+ ```
172
+
173
+ テストファイル: `__tests__/*.js`
174
+
175
+ ### ビルド・実行
176
+ ```bash
177
+ # 開発モード(エンコード)
178
+ npm run dev unko
179
+
180
+ # 開発モード(デコード)
181
+ echo "呪文" | npm run dev -- -d
182
+
183
+ # 誤字修正付きデコード
184
+ echo "呪文" | npm run dev -- -d -s
185
+
186
+ # Levenshteinアルゴリズム使用
187
+ echo "呪文" | npm run dev -- -d -s --levenshtein
188
+
189
+ # デバッグ出力
190
+ echo "呪文" | npm run dev -- -d -s -vv
191
+ ```
192
+
193
+ ### 辞書データ更新
194
+ ```bash
195
+ # meisi.jsonを再生成
196
+ ./raw_data/meisi_json_generator
197
+
198
+ # dousi.jsonの生成
199
+ ./raw_data/json_generator
200
+ ```
201
+
202
+ ### ベンチマーク
203
+ ```bash
204
+ # 全アルゴリズム比較 + レポート生成(デフォルト)
205
+ npm run benchmark
206
+
207
+ # 単一アルゴリズムのテスト
208
+ npm run benchmark:single [algorithm]
209
+
210
+ # 全アルゴリズムの比較(レポートなし)
211
+ npm run benchmark:compare
212
+
213
+ # レポート生成のみ(既存のサマリーから)
214
+ npm run benchmark:report
215
+
216
+ # 最新結果を収集してレポート生成
217
+ npm run benchmark:report:latest
218
+
219
+ # ChatGPT APIを使用したテスト(上位50件、デフォルト: gpt-5-mini)
220
+ export OPENAI_API_KEY="sk-..."
221
+ npm run benchmark:chatgpt
222
+ npm run benchmark:chatgpt -- --model gpt-5 --limit 30
223
+ npm run benchmark:chatgpt -- --model gpt-5-nano --limit 100
224
+ ```
225
+
226
+ **注意**: ChatGPTの結果は`chatgpt/{model}/`ディレクトリにモデル別に保存されます。レポート生成時に各モデルの最新結果が自動的に集計され、比較レポートに表示されます。
227
+
228
+ ## よくある変更タスク
229
+
230
+ ### 1. 新しい名詞・動詞を追加
231
+ - `raw_data/spell.txt`を編集
232
+ - `npm run json-generate`で再生成
233
+ - テストで動作確認
234
+
235
+ ### 2. 誤字修正アルゴリズムの調整
236
+ - `src/jaro-winkler.js`のパラメータ調整
237
+ - または`src/typo-correction.js`の閾値調整
238
+ - `__tests__/typo-correction.js`でテスト
239
+
240
+ ### 3. 新しい類似度アルゴリズムの追加
241
+ - `src/typo-correction.js`の`calculateSimilarity()`に条件分岐追加
242
+ - `src/cli.js`にコマンドラインオプション追加
243
+ - テストケース追加
244
+
245
+ ### 4. 暗号化方式の変更
246
+ - `src/machine-encrypt.js`を編集
247
+ - エンコード/デコード両方で一貫性を保つ
248
+ - バージョン互換性に注意
249
+
250
+ ### 5. ベンチマークデータの追加
251
+ - `benchmark/magi_ocr_data/dataset.tsv`にテストケースを追加
252
+ - TSV形式: `id`, `ocr_result`, `expected`, `description`, `image_file`
253
+ - `npm run benchmark:compare`で全アルゴリズムの精度を測定
254
+
255
+ ## デバッグ Tips
256
+
257
+ ### 形態素解析の確認
258
+ ```javascript
259
+ // typo-correction.jsのexec()内
260
+ if (option.Vv === true) {
261
+ console.log('ntokens', ntokens); // 形態素リスト表示
262
+ }
263
+ ```
264
+
265
+ ### 類似度スコアの確認
266
+ ```bash
267
+ echo "罹刹に烙印を秘術を帰ら。" | npm run dev -- -d -s -vv
268
+ # → アルゴリズム名、類似度スコア、候補単語数を表示
269
+ ```
270
+
271
+ ### 辞書マッチング確認
272
+ ```javascript
273
+ // index.jsのdecode()内
274
+ console.log('decodeHash', Object.keys(decodeHash).length); // 辞書サイズ
275
+ console.log('textCodeList', textCodeList); // マッチした単語リスト
276
+ ```
277
+
278
+ ## 依存関係
279
+
280
+ ### 重要な外部ライブラリ
281
+ - **kuromoji**: 日本語形態素解析(辞書: yukidic)
282
+ - **yukidic**: カスタム形態素解析辞書(git submodule)
283
+ - **fastest-levenshtein**: 高速Levenshtein距離計算
284
+ - **natural**: TF-IDF計算(NLP)
285
+ - **commander**: CLIフレームワーク
286
+ - **picocolors**: ターミナル色付け
287
+
288
+ ### インストール時の注意
289
+ ```bash
290
+ npm install
291
+ # → postinstallでyukidicをgit cloneする
292
+ ```
293
+
294
+ ## パフォーマンス考慮事項
295
+
296
+ ### ボトルネック
297
+ 1. **kuromoji初期化**: 初回起動時に辞書読み込みが発生
298
+ 2. **形態素解析**: 長文のデコード時に時間がかかる
299
+ 3. **類似度計算**: 辞書サイズ×未知語数に比例
300
+
301
+ ### 最適化ポイント
302
+ - kuromojiのtokenizerをキャッシュ(`typo-correction.js`でモジュールスコープ変数)
303
+ - `fastest-levenshtein`を使用(C++バインディングで高速)
304
+ - 正規表現を事前コンパイル
305
+
306
+ ## セキュリティ考慮事項
307
+
308
+ ### 制限事項
309
+ - **暗号学的に安全ではない**: 暗号化は難読化目的のみ
310
+ - **既知平文攻撃に弱い**: 辞書が公開されているため
311
+ - **機密情報の保護には使用しない**
312
+
313
+ ### 適切な用途
314
+ - ✅ テキストの難読化・遊び
315
+ - ✅ データのエンコード(可逆圧縮的用途)
316
+ - ❌ パスワード保存
317
+ - ❌ 暗号通信
318
+
319
+ ## トラブルシューティング
320
+
321
+ ### 問題: デコードが失敗する
322
+ - 誤字修正モード(`-s`)を試す
323
+ - `-vv`オプションで詳細ログを確認
324
+ - 辞書に単語が存在するか確認
325
+
326
+ ### 問題: 形態素解析エラー
327
+ - `yukidic`辞書が正しくインストールされているか確認
328
+ - `npm install`を再実行
329
+
330
+ ### 問題: テストが失敗する
331
+ - Node.jsバージョン確認(>=12.22.8)
332
+ - `NODE_OPTIONS=--experimental-vm-modules jest`が必要
333
+
334
+ ## レビュー・コミットガイドライン
335
+
336
+ ### レビュー時のチェックポイント
337
+ - エンコード/デコードの一貫性が保たれているか
338
+ - 既存の呪文がデコード可能か(後方互換性)
339
+ - ユニットテストが追加/更新されているか
340
+ - パフォーマンスへの影響
341
+ - 日本語のドキュメント・コメントが適切か
342
+
343
+ ### コミットメッセージ
344
+ **Conventional Commits形式**で記載すること。semantic-releaseによる自動バージョニングに使用される。
345
+
346
+ フォーマット: `種別: 簡潔な説明`(日本語の説明を推奨)
347
+
348
+ 種別とリリースへの影響:
349
+ - `feat`: 新機能追加 → **マイナー**リリース(例: 1.0.0 → 1.1.0)
350
+ - `fix`: バグ修正 → **パッチ**リリース(例: 1.0.0 → 1.0.1)
351
+ - `perf`: パフォーマンス改善 → **パッチ**リリース
352
+ - `refactor`: コード整理 → **パッチ**リリース
353
+ - `revert`: 変更の取り消し → **パッチ**リリース
354
+ - `test`: テスト追加/修正 → リリースなし
355
+ - `docs`: ドキュメント更新 → リリースなし
356
+ - `chore`: その他の変更 → リリースなし
357
+ - `ci`: CI設定の変更 → リリースなし
358
+ - `deps`: 依存関係の更新 → リリースなし
359
+
360
+ 破壊的変更がある場合はフッターに`BREAKING CHANGE:`を記載 → **メジャー**リリース
361
+
362
+ 例:
363
+ ```
364
+ feat: Levenshtein距離アルゴリズムを追加
365
+ fix: デコード時の形態素解析エラーを修正
366
+ docs: 誤字修正アルゴリズムの使い方を追加
367
+ refactor: 類似度計算処理を関数化
368
+ test: typo-correctionのテストケースを追加
369
+
370
+ feat: 暗号化方式を変更
371
+
372
+ BREAKING CHANGE: 既存の呪文との互換性がなくなります
373
+ ```
374
+
375
+ **注意**: commitlint + huskyにより、ローカルでのコミット時にメッセージ形式がバリデーションされる。形式に沿わないコミットは拒否される。
376
+
377
+ ### リリースフロー
378
+
379
+ バージョン管理とnpm公開はsemantic-releaseにより完全自動化されている。
380
+
381
+ 1. 開発者がブランチで作業し、Conventional Commits形式でコミット
382
+ 2. PRを作成すると、GitHub Actionsがdry-runでバージョン予告をPRにコメント
383
+ 3. PRをmasterにマージすると、semantic-releaseが自動的に:
384
+ - コミットメッセージからバージョンを決定
385
+ - `package.json`のバージョンを更新
386
+ - `CHANGELOG.md`を生成
387
+ - Gitタグを作成
388
+ - npmに公開
389
+ - GitHubリリースを作成
390
+
391
+ **手動でのバージョン変更やタグ作成は不要。**
392
+
393
+ ## ベンチマーク機能
394
+
395
+ ### 概要
396
+
397
+ `benchmark/`ディレクトリには、誤字修正機能の精度を測定するためのテストデータとスクリプトが含まれています。
398
+
399
+ ### データソース
400
+
401
+ - **Magi OCRデータ**: [Chantプロジェクト](https://github.com/xztaityozx/Chant)から取得したOCRテストデータ
402
+ - 画像に書かれた呪文をOCRで読み取った結果と正解データのペア
403
+ - yukichantの誤字修正機能の精度評価に使用
404
+
405
+ ### ディレクトリ構造
406
+
407
+ ```
408
+ benchmark/
409
+ ├── magi_ocr_data/ # Magiプロジェクトから取得したOCRテストデータ
410
+ │ ├── dataset.tsv # テストデータ(TSV形式)
411
+ │ └── images/ # OCR元画像(オプション)
412
+ ├── results/ # 検証結果の保存先(.gitignore対象)
413
+ │ ├── jaro-winkler/ # Jaro-Winklerアルゴリズムの結果
414
+ │ ├── levenshtein/ # Levenshteinアルゴリズムの結果
415
+ │ ├── tfidf/ # TF-IDF使用時の結果
416
+ │ ├── tfidf-levenshtein/ # TF-IDF + Levenshteinの結果
417
+ │ ├── chatgpt/ # ChatGPT APIを使用した結果(モデル別)
418
+ │ │ ├── gpt-5/ # GPT-5の結果
419
+ │ │ ├── gpt-5-mini/ # GPT-5-miniの結果
420
+ │ │ └── gpt-5-nano/ # GPT-5-nanoの結果
421
+ │ └── summary/ # 全体サマリー
422
+ └── scripts/ # ベンチマーク実行スクリプト
423
+ ├── run-accuracy-test.js # 単一アルゴリズムのテスト
424
+ ├── compare-algorithms.js # 全アルゴリズムの比較
425
+ ├── generate-report.js # レポート生成
426
+ ├── run-chatgpt-test.js # ChatGPT APIテスト
427
+ ├── prompt-template.txt # ChatGPT用プロンプトテンプレート
428
+ └── README_CHATGPT.md # ChatGPTテストの詳細ドキュメント
429
+ ```
430
+
431
+ ### データフォーマット
432
+
433
+ #### 入力データ(dataset.tsv)
434
+ ```tsv
435
+ id ocr_result expected description image_file
436
+ 001 罹刹に烙印を秘術を帰ら。 羅刹に烙印を秘術を刻ら。 漢字の誤認識(罹→羅、帰→刻) test001.png
437
+ ```
438
+
439
+ #### 検証結果(results/{algorithm}/YYYYMMDD_HHMMSS_result.tsv)
440
+ ```tsv
441
+ id input expected corrected is_correct algorithm options execution_time_ms
442
+ 001 罹刹に烙印を秘術を帰ら。 羅刹に烙印を秘術を刻ら。 羅刹に烙印を秘術を刻ら。 true jaro-winkler {"is_tfidf":false} 45.2
443
+ ```
444
+
445
+ ### 使用方法
446
+
447
+ ```bash
448
+ # 全アルゴリズム比較 + レポート生成(デフォルト)
449
+ npm run benchmark
450
+
451
+ # 単一アルゴリズムのテスト
452
+ npm run benchmark:single [algorithm]
453
+
454
+ # 全アルゴリズムの比較(レポートなし)
455
+ npm run benchmark:compare
456
+
457
+ # レポート生成のみ(精度順にソート、最速・バランス推奨を表示)
458
+ npm run benchmark:report
459
+
460
+ # ChatGPT APIを使用したテスト(上位50件、コスト削減のため)
461
+ export OPENAI_API_KEY="sk-..."
462
+ npm run benchmark:chatgpt
463
+ npm run benchmark:chatgpt -- --model gpt-5 --limit 30
464
+ npm run benchmark:chatgpt -- --model gpt-5-nano --limit 100
465
+ ```
466
+
467
+ **注意**: ChatGPTの結果は`chatgpt/{model}/`ディレクトリにモデル別に保存されます。レポート生成時に各モデルの最新結果が自動的に集計され、比較レポートに表示されます。
468
+
469
+ ### ChatGPT APIテスト
470
+
471
+ ChatGPT APIを使用したプロンプトベースの誤字修正テストも利用可能です。
472
+
473
+ **特徴**:
474
+ - プロンプトテンプレートをカスタマイズ可能(`benchmark/scripts/prompt-template.txt`)
475
+ - 予算の都合上、デフォルトで上位50件のみテスト
476
+ - 複数のモデル(gpt-5-nano, gpt-5-mini, gpt-5)をサポート
477
+ - 結果は他のアルゴリズムと同様にサマリーに統合される
478
+
479
+ **詳細**: `benchmark/scripts/README_CHATGPT.md` を参照
480
+
481
+ ### 精度指標
482
+
483
+ - **正解率(Accuracy)**: 完全一致した割合
484
+ - **平均実行時間**: 1件あたりの平均処理時間(ミリ秒)
485
+
486
+ ### ベンチマーク結果の活用
487
+
488
+ 1. **アルゴリズムの比較**: 各アルゴリズムの精度と速度を比較
489
+ 2. **パラメータ調整**: アルゴリズムのパラメータを調整して精度向上
490
+ 3. **リグレッションテスト**: コード変更後の精度低下を検出
491
+ 4. **デフォルトアルゴリズムの選定**: 最適なアルゴリズムを選択
492
+
493
+ ## 参考リンク
494
+
495
+ - [kuromoji.js](https://github.com/takuyaa/kuromoji.js)
496
+ - [yukidic辞書](https://github.com/amanoese/yukidic)
497
+ - [Jaro-Winkler距離](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance)
498
+ - [Levenshtein距離](https://en.wikipedia.org/wiki/Levenshtein_distance)
499
+ - [Enigma暗号機](https://en.wikipedia.org/wiki/Enigma_machine)
500
+ - [Chantプロジェクト(Magi)](https://github.com/xztaityozx/Chant) - OCRテストデータの出典
501
+
502
+ ---
503
+
504
+ **このドキュメントは、AIエージェントがプロジェクトを理解し、コンテキストに沿った提案を行うためのガイドです。人間の開発者が読む場合は、まず[README.md](./README.md)と[develop.md](./doc/develop.md)を参照してください。**
505
+
package/CHANGELOG.md ADDED
@@ -0,0 +1,84 @@
1
+ ## [4.0.0](https://github.com/amanoese/yukichant/compare/v3.0.5...v4.0.0) (2026-02-28)
2
+
3
+ ### ⚠ BREAKING CHANGES
4
+
5
+ * Node.js 18.x以前のサポートを廃止。
6
+ Node.js 20.x以上が必須になりました。
7
+ エントリポイントの構造が変更されています。
8
+
9
+ Made-with: Cursor
10
+ * Node.js 18.x以前はサポート対象外になります
11
+
12
+ Made-with: Cursor
13
+
14
+ ### Features
15
+
16
+ * Add Jaro-Winkler algorithm support for typo correction ([4a5c9fa](https://github.com/amanoese/yukichant/commit/4a5c9faec266bdce66a9f9f5d75906ad53035a4c))
17
+ * v4.0.0リリース(破壊的変更の明示) ([598a4ad](https://github.com/amanoese/yukichant/commit/598a4ad452c7feb08405f7b7421b4dfdaa06f024))
18
+ * サポートNode.jsバージョンを20.x以上に更新 ([6615716](https://github.com/amanoese/yukichant/commit/66157167273b902276fbfdba8cde89ac2eeef9c1))
19
+
20
+ ### Bug Fixes
21
+
22
+ * BREAKING CHANGEがmajorリリースになるよう修正 ([87f8b62](https://github.com/amanoese/yukichant/commit/87f8b626bcd071ae4dbfc4c6677c48ec200b4c8a))
23
+ * ci環境でcommitlintフックをスキップするように修正 ([3f7c8ee](https://github.com/amanoese/yukichant/commit/3f7c8ee56507c3251bfb9cbb2bd7ccdfc32fbf35))
24
+ * dry-run実行時の環境変数を上書きしてブランチ認識を修正 ([49760c7](https://github.com/amanoese/yukichant/commit/49760c7fee5b9b56b6c2301f2b0f6acf5195f494))
25
+ * リリースプレビューで--branches masterを指定してブランチ認識を修正 ([4ea4ee3](https://github.com/amanoese/yukichant/commit/4ea4ee3fa467e8c2d1df5fd3617436be658147df))
26
+ * リリースプレビューにnpmトークン検証を追加 ([2085fb9](https://github.com/amanoese/yukichant/commit/2085fb9cb703d6108bb4da79017b4a31f5ce7f45))
27
+ * リリースプレビューのdry-run失敗とコメント表示を修正 ([358b05d](https://github.com/amanoese/yukichant/commit/358b05df2228af59384eeb32e94c6267831046e1))
28
+ * リリースプレビューのシェル互換性を修正 ([11d8a9d](https://github.com/amanoese/yukichant/commit/11d8a9d50b1bd13039cf79cf3b1401a39d9c5970))
29
+ * リリースプレビューをmasterシミュレートで実行し、コメント差分時のみ追加する方式に変更 ([559514e](https://github.com/amanoese/yukichant/commit/559514eda5b7927a9da50dce03d4404c5b5f4786))
30
+ * リリースプレビューをコミットメッセージ直接解析方式に変更 ([2383828](https://github.com/amanoese/yukichant/commit/2383828043248252f39a4358a4f2b0a15946f1cf))
31
+
32
+ ## [3.1.0](https://github.com/amanoese/yukichant/compare/v3.0.5...v3.1.0) (2026-02-28)
33
+
34
+ ### ⚠ BREAKING CHANGES
35
+
36
+ * Node.js 18.x以前のサポートを廃止。
37
+ Node.js 20.x以上が必須になりました。
38
+ エントリポイントの構造が変更されています。
39
+
40
+ Made-with: Cursor
41
+ * Node.js 18.x以前はサポート対象外になります
42
+
43
+ Made-with: Cursor
44
+
45
+ ### Features
46
+
47
+ * Add Jaro-Winkler algorithm support for typo correction ([4a5c9fa](https://github.com/amanoese/yukichant/commit/4a5c9faec266bdce66a9f9f5d75906ad53035a4c))
48
+ * v4.0.0リリース(破壊的変更の明示) ([598a4ad](https://github.com/amanoese/yukichant/commit/598a4ad452c7feb08405f7b7421b4dfdaa06f024))
49
+ * サポートNode.jsバージョンを20.x以上に更新 ([6615716](https://github.com/amanoese/yukichant/commit/66157167273b902276fbfdba8cde89ac2eeef9c1))
50
+
51
+ ### Bug Fixes
52
+
53
+ * ci環境でcommitlintフックをスキップするように修正 ([3f7c8ee](https://github.com/amanoese/yukichant/commit/3f7c8ee56507c3251bfb9cbb2bd7ccdfc32fbf35))
54
+ * dry-run実行時の環境変数を上書きしてブランチ認識を修正 ([49760c7](https://github.com/amanoese/yukichant/commit/49760c7fee5b9b56b6c2301f2b0f6acf5195f494))
55
+ * リリースプレビューで--branches masterを指定してブランチ認識を修正 ([4ea4ee3](https://github.com/amanoese/yukichant/commit/4ea4ee3fa467e8c2d1df5fd3617436be658147df))
56
+ * リリースプレビューにnpmトークン検証を追加 ([2085fb9](https://github.com/amanoese/yukichant/commit/2085fb9cb703d6108bb4da79017b4a31f5ce7f45))
57
+ * リリースプレビューのdry-run失敗とコメント表示を修正 ([358b05d](https://github.com/amanoese/yukichant/commit/358b05df2228af59384eeb32e94c6267831046e1))
58
+ * リリースプレビューのシェル互換性を修正 ([11d8a9d](https://github.com/amanoese/yukichant/commit/11d8a9d50b1bd13039cf79cf3b1401a39d9c5970))
59
+ * リリースプレビューをmasterシミュレートで実行し、コメント差分時のみ追加する方式に変更 ([559514e](https://github.com/amanoese/yukichant/commit/559514eda5b7927a9da50dce03d4404c5b5f4786))
60
+ * リリースプレビューをコミットメッセージ直接解析方式に変更 ([2383828](https://github.com/amanoese/yukichant/commit/2383828043248252f39a4358a4f2b0a15946f1cf))
61
+
62
+ ## [3.1.0](https://github.com/amanoese/yukichant/compare/v3.0.5...v3.1.0) (2026-02-28)
63
+
64
+ ### ⚠ BREAKING CHANGES
65
+
66
+ * Node.js 18.x以前はサポート対象外になります
67
+
68
+ Made-with: Cursor
69
+
70
+ ### Features
71
+
72
+ * Add Jaro-Winkler algorithm support for typo correction ([4a5c9fa](https://github.com/amanoese/yukichant/commit/4a5c9faec266bdce66a9f9f5d75906ad53035a4c))
73
+ * サポートNode.jsバージョンを20.x以上に更新 ([6615716](https://github.com/amanoese/yukichant/commit/66157167273b902276fbfdba8cde89ac2eeef9c1))
74
+
75
+ ### Bug Fixes
76
+
77
+ * ci環境でcommitlintフックをスキップするように修正 ([3f7c8ee](https://github.com/amanoese/yukichant/commit/3f7c8ee56507c3251bfb9cbb2bd7ccdfc32fbf35))
78
+ * dry-run実行時の環境変数を上書きしてブランチ認識を修正 ([49760c7](https://github.com/amanoese/yukichant/commit/49760c7fee5b9b56b6c2301f2b0f6acf5195f494))
79
+ * リリースプレビューで--branches masterを指定してブランチ認識を修正 ([4ea4ee3](https://github.com/amanoese/yukichant/commit/4ea4ee3fa467e8c2d1df5fd3617436be658147df))
80
+ * リリースプレビューにnpmトークン検証を追加 ([2085fb9](https://github.com/amanoese/yukichant/commit/2085fb9cb703d6108bb4da79017b4a31f5ce7f45))
81
+ * リリースプレビューのdry-run失敗とコメント表示を修正 ([358b05d](https://github.com/amanoese/yukichant/commit/358b05df2228af59384eeb32e94c6267831046e1))
82
+ * リリースプレビューのシェル互換性を修正 ([11d8a9d](https://github.com/amanoese/yukichant/commit/11d8a9d50b1bd13039cf79cf3b1401a39d9c5970))
83
+ * リリースプレビューをmasterシミュレートで実行し、コメント差分時のみ追加する方式に変更 ([559514e](https://github.com/amanoese/yukichant/commit/559514eda5b7927a9da50dce03d4404c5b5f4786))
84
+ * リリースプレビューをコミットメッセージ直接解析方式に変更 ([2383828](https://github.com/amanoese/yukichant/commit/2383828043248252f39a4358a4f2b0a15946f1cf))