shiden 0.3.5 → 0.4.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.
Files changed (34) hide show
  1. package/README.md +38 -0
  2. package/dist/cli/commands/curriculum.js +78 -0
  3. package/dist/cli/commands/curriculum.js.map +1 -0
  4. package/dist/cli/index.js +3 -0
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/curriculum/CurriculumRepository.js +202 -0
  7. package/dist/curriculum/CurriculumRepository.js.map +1 -0
  8. package/dist/curriculum/CurriculumService.js +113 -0
  9. package/dist/curriculum/CurriculumService.js.map +1 -0
  10. package/dist/curriculum/database.js +63 -0
  11. package/dist/curriculum/database.js.map +1 -0
  12. package/dist/curriculum/index.js +4 -0
  13. package/dist/curriculum/index.js.map +1 -0
  14. package/dist/curriculum/types.js +2 -0
  15. package/dist/curriculum/types.js.map +1 -0
  16. package/dist/types/cli/commands/curriculum.d.ts +6 -0
  17. package/dist/types/cli/commands/curriculum.d.ts.map +1 -0
  18. package/dist/types/curriculum/CurriculumRepository.d.ts +48 -0
  19. package/dist/types/curriculum/CurriculumRepository.d.ts.map +1 -0
  20. package/dist/types/curriculum/CurriculumService.d.ts +42 -0
  21. package/dist/types/curriculum/CurriculumService.d.ts.map +1 -0
  22. package/dist/types/curriculum/database.d.ts +14 -0
  23. package/dist/types/curriculum/database.d.ts.map +1 -0
  24. package/dist/types/curriculum/index.d.ts +5 -0
  25. package/dist/types/curriculum/index.d.ts.map +1 -0
  26. package/dist/types/curriculum/types.d.ts +42 -0
  27. package/dist/types/curriculum/types.d.ts.map +1 -0
  28. package/package.json +4 -3
  29. package/src/data/curriculum.db +0 -0
  30. package/templates/.github/prompts/lesson-plan.md +47 -0
  31. package/templates/.github/prompts/materials.md +32 -0
  32. package/templates/AGENTS.md +36 -0
  33. package/src/data/theories.db-shm +0 -0
  34. package/src/data/theories.db-wal +0 -0
package/README.md CHANGED
@@ -71,6 +71,35 @@ npx shiden theories get theory-003
71
71
  npx shiden theories related theory-003 -d 2
72
72
  ```
73
73
 
74
+ ## 🆕 v0.4.0: 学習指導要領CLI(NEW!)
75
+
76
+ **文部科学省の学習指導要領(小学校・中学校・高等学校)をGraphRAG DBとして内蔵**。
77
+ 教科・学年・キーワードで素早く参照できます。
78
+
79
+ ```bash
80
+ # キーワード検索
81
+ npx shiden curriculum search "プログラミング"
82
+ npx shiden curriculum search "論理的思考"
83
+
84
+ # 教科別検索
85
+ npx shiden curriculum subject 算数
86
+ npx shiden curriculum subject 英語
87
+
88
+ # 学年別検索
89
+ npx shiden curriculum grade "第3学年"
90
+
91
+ # 統計表示
92
+ npx shiden curriculum stats
93
+ ```
94
+
95
+ ### 収録コンテンツ
96
+
97
+ | ドキュメント | セクション数 | 内容 |
98
+ |-------------|-------------|------|
99
+ | 小学校学習指導要領 | 2,469 | 国語、算数、理科、社会、英語、道徳、総合等 |
100
+ | 中学校学習指導要領 | (追加予定) | 各教科・特別活動 |
101
+ | 高等学校学習指導要領 | (追加予定) | 各教科・科目 |
102
+
74
103
  ### カテゴリ一覧
75
104
 
76
105
  | カテゴリ | 件数 | 説明 |
@@ -171,6 +200,9 @@ your-project/
171
200
  # Agent Skillsファイルをプロジェクトにコピー
172
201
  npx shiden init
173
202
 
203
+ # スキルを更新
204
+ npx shiden update
205
+
174
206
  # 教育理論CLI
175
207
  npx shiden theories categories # カテゴリ一覧
176
208
  npx shiden theories search "キーワード" # 検索
@@ -178,6 +210,12 @@ npx shiden theories get <id> # 詳細取得
178
210
  npx shiden theories list # 一覧
179
211
  npx shiden theories related <id> # 関連理論
180
212
 
213
+ # 学習指導要領CLI (v0.4.0 NEW!)
214
+ npx shiden curriculum search "キーワード" # 全文検索
215
+ npx shiden curriculum subject <教科名> # 教科別検索
216
+ npx shiden curriculum grade <学年> # 学年別検索
217
+ npx shiden curriculum stats # 統計表示
218
+
181
219
  # バージョン表示
182
220
  npx shiden -v
183
221
  npx shiden --version
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import { CurriculumService, isCurriculumDbAvailable, } from '../../curriculum/index.js';
3
+ /**
4
+ * curriculum コマンドを作成
5
+ */
6
+ export function createCurriculumCommand() {
7
+ const program = new Command('curriculum');
8
+ program
9
+ .description('学習指導要領の検索・参照')
10
+ .addHelpText('after', `
11
+ 例:
12
+ $ shiden curriculum search "プログラミング"
13
+ $ shiden curriculum search "算数 図形"
14
+ $ shiden curriculum subject 国語
15
+ $ shiden curriculum grade "小学校3年"
16
+ $ shiden curriculum stats
17
+ `);
18
+ // search サブコマンド
19
+ program
20
+ .command('search <query>')
21
+ .description('キーワードで学習指導要領を検索')
22
+ .option('-l, --limit <number>', '最大結果数', '10')
23
+ .option('-r, --related', '関連セクションも含める', false)
24
+ .action((query, options) => {
25
+ if (!isCurriculumDbAvailable()) {
26
+ console.error('❌ カリキュラムDBが見つかりません。\n' +
27
+ ' node scripts/build-curriculum.js を実行してください。');
28
+ process.exit(1);
29
+ }
30
+ const service = new CurriculumService();
31
+ const results = service.search(query, {
32
+ limit: parseInt(options.limit, 10),
33
+ includeRelated: options.related,
34
+ });
35
+ console.log(service.formatResults(results));
36
+ });
37
+ // subject サブコマンド
38
+ program
39
+ .command('subject <name>')
40
+ .description('教科別に学習指導要領を検索')
41
+ .action((name) => {
42
+ if (!isCurriculumDbAvailable()) {
43
+ console.error('❌ カリキュラムDBが見つかりません。');
44
+ process.exit(1);
45
+ }
46
+ const service = new CurriculumService();
47
+ const results = service.searchBySubject(name);
48
+ console.log(service.formatResults(results));
49
+ });
50
+ // grade サブコマンド
51
+ program
52
+ .command('grade <grade>')
53
+ .description('学年別に学習指導要領を検索')
54
+ .action((grade) => {
55
+ if (!isCurriculumDbAvailable()) {
56
+ console.error('❌ カリキュラムDBが見つかりません。');
57
+ process.exit(1);
58
+ }
59
+ const service = new CurriculumService();
60
+ const results = service.searchByGrade(grade);
61
+ console.log(service.formatResults(results));
62
+ });
63
+ // stats サブコマンド
64
+ program
65
+ .command('stats')
66
+ .description('学習指導要領DBの統計を表示')
67
+ .action(() => {
68
+ if (!isCurriculumDbAvailable()) {
69
+ console.error('❌ カリキュラムDBが見つかりません。');
70
+ process.exit(1);
71
+ }
72
+ const service = new CurriculumService();
73
+ const stats = service.getStats();
74
+ console.log(service.formatStats(stats));
75
+ });
76
+ return program;
77
+ }
78
+ //# sourceMappingURL=curriculum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curriculum.js","sourceRoot":"","sources":["../../../src/cli/commands/curriculum.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -7,6 +7,7 @@ import * as fs from 'node:fs';
7
7
  import * as path from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { createTheoriesCommand } from './commands/theories.js';
10
+ import { createCurriculumCommand } from './commands/curriculum.js';
10
11
  // ESM でのディレクトリパス取得
11
12
  const __filename = fileURLToPath(import.meta.url);
12
13
  const __dirname = path.dirname(__filename);
@@ -205,6 +206,8 @@ function main() {
205
206
  });
206
207
  // theories サブコマンドを追加
207
208
  program.addCommand(createTheoriesCommand());
209
+ // curriculum サブコマンドを追加
210
+ program.addCommand(createCurriculumCommand());
208
211
  program.parse();
209
212
  }
210
213
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,mBAAmB;AACnB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,gBAAgB;AAChB,SAAS,UAAU;IACjB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,UAAU;AACV,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO;;;;IAIL,SAAS;IACT,SAAS;IACT,SAAS;;;iBAGI,SAAS;;;;;;;;;;CAUzB,CAAC;AACF,CAAC;AAED,kBAAkB;AAClB,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACpD,CAAC;AAED,iBAAiB;AACjB,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,aAAa;AACb,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,YAAY;AACZ,SAAS,WAAW,CAAC,aAAqB,GAAG;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,eAAe,CAAC,CAAC;IAEpE,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,uBAAuB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sBAAsB;AACtB,SAAS,aAAa,CAAC,aAAqB,GAAG;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,qCAAqC,cAAc,QAAQ,CAAC,CAAC;IAEzE,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,WAAW;IACX,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,IAAI,CAAC;QACH,gBAAgB;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,uBAAuB;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,sBAAsB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC;2BACW,cAAc;;gBAEzB,YAAY;;;;;;CAM3B,CAAC,CAAC;IACD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,QAAQ;AACR,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,8CAA8C,CAAC;SAC3D,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAEtD,YAAY;IACZ,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACrB,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACrB,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,+BAA+B;IAC/B,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACrB,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE5C,uBAAuB;IACvB,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE9C,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,202 @@
1
+ import { getCurriculumDb } from './database.js';
2
+ /**
3
+ * カリキュラムデータへのアクセスを提供するリポジトリ
4
+ */
5
+ export class CurriculumRepository {
6
+ /**
7
+ * 全文検索でセクションを検索
8
+ * @param query - 検索クエリ
9
+ * @param limit - 最大結果数
10
+ */
11
+ search(query, limit = 10) {
12
+ const db = getCurriculumDb();
13
+ // まずFTS5検索を試行(trigram対応)
14
+ try {
15
+ const ftsStmt = db.prepare(`
16
+ SELECT
17
+ cs.*,
18
+ bm25(curriculum_fts) as score,
19
+ snippet(curriculum_fts, 2, '【', '】', '...', 30) as highlight
20
+ FROM curriculum_fts
21
+ JOIN curriculum_sections cs ON curriculum_fts.id = cs.id
22
+ WHERE curriculum_fts MATCH ?
23
+ ORDER BY bm25(curriculum_fts)
24
+ LIMIT ?
25
+ `);
26
+ const ftsResults = ftsStmt.all(query, limit);
27
+ if (ftsResults.length > 0) {
28
+ return ftsResults.map((row) => ({
29
+ section: {
30
+ id: row.id,
31
+ document_type: row.document_type,
32
+ chapter: row.chapter,
33
+ section: row.section,
34
+ title: row.title,
35
+ content: row.content,
36
+ level: row.level,
37
+ order_index: row.order_index,
38
+ source_file: row.source_file,
39
+ created_at: row.created_at,
40
+ },
41
+ score: row.score,
42
+ highlight: row.highlight,
43
+ }));
44
+ }
45
+ }
46
+ catch {
47
+ // FTS検索が失敗した場合はLIKE検索にフォールバック
48
+ }
49
+ // LIKE検索(フォールバック)
50
+ const likeStmt = db.prepare(`
51
+ SELECT
52
+ cs.*,
53
+ 0 as score
54
+ FROM curriculum_sections cs
55
+ WHERE cs.title LIKE ? OR cs.content LIKE ? OR cs.chapter LIKE ?
56
+ ORDER BY cs.order_index
57
+ LIMIT ?
58
+ `);
59
+ const pattern = `%${query}%`;
60
+ const likeResults = likeStmt.all(pattern, pattern, pattern, limit);
61
+ return likeResults.map((row) => {
62
+ // ハイライトを生成
63
+ const idx = row.content.indexOf(query);
64
+ let highlight = '';
65
+ if (idx !== -1) {
66
+ const start = Math.max(0, idx - 20);
67
+ const end = Math.min(row.content.length, idx + query.length + 50);
68
+ highlight = '...' + row.content.slice(start, end).replace(query, `【${query}】`) + '...';
69
+ }
70
+ return {
71
+ section: {
72
+ id: row.id,
73
+ document_type: row.document_type,
74
+ chapter: row.chapter,
75
+ section: row.section,
76
+ title: row.title,
77
+ content: row.content,
78
+ level: row.level,
79
+ order_index: row.order_index,
80
+ source_file: row.source_file,
81
+ created_at: row.created_at,
82
+ },
83
+ score: row.score,
84
+ highlight,
85
+ };
86
+ });
87
+ }
88
+ /**
89
+ * IDでセクションを取得
90
+ * @param id - セクションID
91
+ */
92
+ getById(id) {
93
+ const db = getCurriculumDb();
94
+ const stmt = db.prepare('SELECT * FROM curriculum_sections WHERE id = ?');
95
+ return stmt.get(id) || null;
96
+ }
97
+ /**
98
+ * 章でセクションをフィルタ
99
+ * @param chapter - 章名(部分一致)
100
+ */
101
+ getByChapter(chapter) {
102
+ const db = getCurriculumDb();
103
+ const stmt = db.prepare('SELECT * FROM curriculum_sections WHERE chapter LIKE ? ORDER BY order_index');
104
+ return stmt.all(`%${chapter}%`);
105
+ }
106
+ /**
107
+ * ドキュメント種別でセクションをフィルタ
108
+ * @param documentType - ドキュメント種別
109
+ */
110
+ getByDocumentType(documentType) {
111
+ const db = getCurriculumDb();
112
+ const stmt = db.prepare('SELECT * FROM curriculum_sections WHERE document_type = ? ORDER BY order_index');
113
+ return stmt.all(documentType);
114
+ }
115
+ /**
116
+ * 関連セクションを取得(GraphRAG)
117
+ * @param sectionId - 基点セクションID
118
+ * @param relationType - リレーション種別(省略時は全種別)
119
+ * @param limit - 最大結果数
120
+ */
121
+ getRelatedSections(sectionId, relationType, limit = 10) {
122
+ const db = getCurriculumDb();
123
+ let sql = `
124
+ SELECT
125
+ sr.source_id, sr.target_id, sr.relation_type, sr.weight,
126
+ cs.*
127
+ FROM section_relations sr
128
+ JOIN curriculum_sections cs ON sr.target_id = cs.id
129
+ WHERE sr.source_id = ?
130
+ `;
131
+ const params = [sectionId];
132
+ if (relationType) {
133
+ sql += ' AND sr.relation_type = ?';
134
+ params.push(relationType);
135
+ }
136
+ sql += ' ORDER BY sr.weight DESC LIMIT ?';
137
+ params.push(limit);
138
+ const stmt = db.prepare(sql);
139
+ const results = stmt.all(...params);
140
+ return results.map((row) => ({
141
+ relation: {
142
+ source_id: row.source_id,
143
+ target_id: row.target_id,
144
+ relation_type: row.relation_type,
145
+ weight: row.weight,
146
+ },
147
+ section: {
148
+ id: row.id,
149
+ document_type: row.document_type,
150
+ chapter: row.chapter,
151
+ section: row.section,
152
+ title: row.title,
153
+ content: row.content,
154
+ level: row.level,
155
+ order_index: row.order_index,
156
+ source_file: row.source_file,
157
+ created_at: row.created_at,
158
+ },
159
+ }));
160
+ }
161
+ /**
162
+ * 統計情報を取得
163
+ */
164
+ getStats() {
165
+ const db = getCurriculumDb();
166
+ const totalSections = db
167
+ .prepare('SELECT COUNT(*) as count FROM curriculum_sections')
168
+ .get().count;
169
+ const totalRelations = db.prepare('SELECT COUNT(*) as count FROM section_relations').get().count;
170
+ const byDocType = db
171
+ .prepare(`
172
+ SELECT document_type, COUNT(*) as count
173
+ FROM curriculum_sections
174
+ GROUP BY document_type
175
+ `)
176
+ .all();
177
+ const byRelType = db
178
+ .prepare(`
179
+ SELECT relation_type, COUNT(*) as count
180
+ FROM section_relations
181
+ GROUP BY relation_type
182
+ `)
183
+ .all();
184
+ return {
185
+ totalSections,
186
+ totalRelations,
187
+ byDocumentType: Object.fromEntries(byDocType.map((r) => [r.document_type, r.count])),
188
+ byRelationType: Object.fromEntries(byRelType.map((r) => [r.relation_type, r.count])),
189
+ };
190
+ }
191
+ /**
192
+ * すべてのセクションを取得(ページネーション付き)
193
+ * @param offset - オフセット
194
+ * @param limit - 最大結果数
195
+ */
196
+ getAll(offset = 0, limit = 100) {
197
+ const db = getCurriculumDb();
198
+ const stmt = db.prepare('SELECT * FROM curriculum_sections ORDER BY order_index LIMIT ? OFFSET ?');
199
+ return stmt.all(limit, offset);
200
+ }
201
+ }
202
+ //# sourceMappingURL=CurriculumRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurriculumRepository.js","sourceRoot":"","sources":["../../src/curriculum/CurriculumRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { CurriculumRepository } from './CurriculumRepository.js';
2
+ /**
3
+ * カリキュラム検索のビジネスロジックを提供するサービス
4
+ */
5
+ export class CurriculumService {
6
+ repository;
7
+ constructor(repository) {
8
+ this.repository = repository || new CurriculumRepository();
9
+ }
10
+ /**
11
+ * キーワードで学習指導要領を検索
12
+ * @param query - 検索キーワード
13
+ * @param options - 検索オプション
14
+ */
15
+ search(query, options = {}) {
16
+ const { limit = 10, includeRelated = false } = options;
17
+ const results = this.repository.search(query, limit);
18
+ if (includeRelated && results.length > 0) {
19
+ // 最初の結果に関連セクションを追加
20
+ const relatedSections = this.repository.getRelatedSections(results[0].section.id, 'RELATED_SUBJECT', 5);
21
+ // 重複を除いて追加
22
+ const existingIds = new Set(results.map((r) => r.section.id));
23
+ for (const related of relatedSections) {
24
+ if (!existingIds.has(related.section.id)) {
25
+ results.push({
26
+ section: related.section,
27
+ score: -related.relation.weight, // 負のスコアで関連セクションであることを示す
28
+ highlight: `[関連: ${related.relation.relation_type}]`,
29
+ });
30
+ existingIds.add(related.section.id);
31
+ }
32
+ }
33
+ }
34
+ return results;
35
+ }
36
+ /**
37
+ * 教科別に学習指導要領を検索
38
+ * @param subject - 教科名
39
+ */
40
+ searchBySubject(subject) {
41
+ // 教科名でフィルタリングしながら検索
42
+ // 単一キーワードで検索
43
+ return this.search(subject, { limit: 20 });
44
+ }
45
+ /**
46
+ * 学年別に学習指導要領を検索
47
+ * @param grade - 学年(例: "1年", "2年", "小学校1年")
48
+ */
49
+ searchByGrade(grade) {
50
+ // 学年に関連するキーワードで検索
51
+ return this.search(grade, { limit: 20 });
52
+ }
53
+ /**
54
+ * 統計情報を取得
55
+ */
56
+ getStats() {
57
+ return this.repository.getStats();
58
+ }
59
+ /**
60
+ * 検索結果をフォーマット(CLI表示用)
61
+ * @param results - 検索結果
62
+ */
63
+ formatResults(results) {
64
+ if (results.length === 0) {
65
+ return '検索結果が見つかりませんでした。';
66
+ }
67
+ const lines = [];
68
+ lines.push(`\n📚 検索結果: ${results.length}件\n`);
69
+ lines.push('─'.repeat(60));
70
+ for (const result of results) {
71
+ const { section, highlight } = result;
72
+ lines.push(`\n📖 ${section.title}`);
73
+ lines.push(` ID: ${section.id}`);
74
+ lines.push(` 章: ${section.chapter || '(なし)'}`);
75
+ lines.push(` 節: ${section.section || '(なし)'}`);
76
+ if (highlight) {
77
+ lines.push(` 📝 ${highlight}`);
78
+ }
79
+ // コンテンツのプレビュー(最初の150文字)
80
+ const preview = section.content.slice(0, 150).replace(/\n/g, ' ');
81
+ lines.push(` ${preview}...`);
82
+ lines.push('─'.repeat(60));
83
+ }
84
+ return lines.join('\n');
85
+ }
86
+ /**
87
+ * 統計情報をフォーマット(CLI表示用)
88
+ */
89
+ formatStats(stats) {
90
+ const lines = [];
91
+ lines.push('\n📊 学習指導要領データベース統計\n');
92
+ lines.push('─'.repeat(40));
93
+ lines.push(`総セクション数: ${stats.totalSections.toLocaleString()}`);
94
+ lines.push(`総リレーション数: ${stats.totalRelations.toLocaleString()}`);
95
+ lines.push('\n📑 ドキュメント種別:');
96
+ const docTypeNames = {
97
+ elementary_school: '小学校',
98
+ middle_school: '中学校',
99
+ high_school: '高等学校',
100
+ unknown: 'その他',
101
+ };
102
+ for (const [type, count] of Object.entries(stats.byDocumentType)) {
103
+ const name = docTypeNames[type] || type;
104
+ lines.push(` ${name}: ${count.toLocaleString()}件`);
105
+ }
106
+ lines.push('\n🔗 リレーション種別:');
107
+ for (const [type, count] of Object.entries(stats.byRelationType)) {
108
+ lines.push(` ${type}: ${count.toLocaleString()}件`);
109
+ }
110
+ return lines.join('\n');
111
+ }
112
+ }
113
+ //# sourceMappingURL=CurriculumService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurriculumService.js","sourceRoot":"","sources":["../../src/curriculum/CurriculumService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import Database from 'better-sqlite3';
2
+ import { existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname } from 'path';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ /**
9
+ * カリキュラムデータベースへの接続を管理するシングルトン
10
+ */
11
+ let curriculumDbInstance = null;
12
+ /**
13
+ * データベースファイルのパスを検索
14
+ */
15
+ function findCurriculumDbPath() {
16
+ const possiblePaths = [
17
+ // 開発環境
18
+ join(__dirname, '../data/curriculum.db'),
19
+ join(__dirname, '../../src/data/curriculum.db'),
20
+ // npm パッケージとしてインストールされた場合
21
+ join(__dirname, 'data/curriculum.db'),
22
+ // グローバルインストール
23
+ join(process.cwd(), 'node_modules/shiden/dist/data/curriculum.db'),
24
+ join(process.cwd(), 'curriculum.db'),
25
+ ];
26
+ for (const p of possiblePaths) {
27
+ if (existsSync(p)) {
28
+ return p;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * カリキュラムデータベース接続を取得
35
+ */
36
+ export function getCurriculumDb() {
37
+ if (curriculumDbInstance) {
38
+ return curriculumDbInstance;
39
+ }
40
+ const dbPath = findCurriculumDbPath();
41
+ if (!dbPath) {
42
+ throw new Error('カリキュラムデータベースが見つかりません。\n' +
43
+ 'node scripts/build-curriculum.js を実行してください。');
44
+ }
45
+ curriculumDbInstance = new Database(dbPath, { readonly: true });
46
+ return curriculumDbInstance;
47
+ }
48
+ /**
49
+ * データベース接続を閉じる
50
+ */
51
+ export function closeCurriculumDb() {
52
+ if (curriculumDbInstance) {
53
+ curriculumDbInstance.close();
54
+ curriculumDbInstance = null;
55
+ }
56
+ }
57
+ /**
58
+ * データベースが利用可能かチェック
59
+ */
60
+ export function isCurriculumDbAvailable() {
61
+ return findCurriculumDbPath() !== null;
62
+ }
63
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/curriculum/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,IAAI,oBAAoB,GAA6B,IAAI,CAAC;AAE1D;;GAEG;AACH,SAAS,oBAAoB;IAC3B,MAAM,aAAa,GAAG;QACpB,OAAO;QACP,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC;QAC/C,0BAA0B;QAC1B,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC;QACrC,cAAc;QACd,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,6CAA6C,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;KACrC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,yBAAyB;YACvB,6CAA6C,CAChD,CAAC;IACJ,CAAC;IAED,oBAAoB,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,oBAAoB,EAAE,CAAC;QACzB,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAC7B,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,EAAE,KAAK,IAAI,CAAC;AACzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { CurriculumRepository } from './CurriculumRepository.js';
2
+ export { CurriculumService } from './CurriculumService.js';
3
+ export { getCurriculumDb, closeCurriculumDb, isCurriculumDbAvailable, } from './database.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/curriculum/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/curriculum/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * curriculum コマンドを作成
4
+ */
5
+ export declare function createCurriculumCommand(): Command;
6
+ //# sourceMappingURL=curriculum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curriculum.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/curriculum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAuFjD"}
@@ -0,0 +1,48 @@
1
+ import type { CurriculumSection, SectionRelation, CurriculumSearchResult, CurriculumStats } from './types.js';
2
+ /**
3
+ * カリキュラムデータへのアクセスを提供するリポジトリ
4
+ */
5
+ export declare class CurriculumRepository {
6
+ /**
7
+ * 全文検索でセクションを検索
8
+ * @param query - 検索クエリ
9
+ * @param limit - 最大結果数
10
+ */
11
+ search(query: string, limit?: number): CurriculumSearchResult[];
12
+ /**
13
+ * IDでセクションを取得
14
+ * @param id - セクションID
15
+ */
16
+ getById(id: string): CurriculumSection | null;
17
+ /**
18
+ * 章でセクションをフィルタ
19
+ * @param chapter - 章名(部分一致)
20
+ */
21
+ getByChapter(chapter: string): CurriculumSection[];
22
+ /**
23
+ * ドキュメント種別でセクションをフィルタ
24
+ * @param documentType - ドキュメント種別
25
+ */
26
+ getByDocumentType(documentType: string): CurriculumSection[];
27
+ /**
28
+ * 関連セクションを取得(GraphRAG)
29
+ * @param sectionId - 基点セクションID
30
+ * @param relationType - リレーション種別(省略時は全種別)
31
+ * @param limit - 最大結果数
32
+ */
33
+ getRelatedSections(sectionId: string, relationType?: string, limit?: number): Array<{
34
+ relation: SectionRelation;
35
+ section: CurriculumSection;
36
+ }>;
37
+ /**
38
+ * 統計情報を取得
39
+ */
40
+ getStats(): CurriculumStats;
41
+ /**
42
+ * すべてのセクションを取得(ページネーション付き)
43
+ * @param offset - オフセット
44
+ * @param limit - 最大結果数
45
+ */
46
+ getAll(offset?: number, limit?: number): CurriculumSection[];
47
+ }
48
+ //# sourceMappingURL=CurriculumRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurriculumRepository.d.ts","sourceRoot":"","sources":["../../../src/curriculum/CurriculumRepository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,sBAAsB,EAAE;IAwFnE;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAM7C;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQlD;;;OAGG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQ5D;;;;;OAKG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAiDnE;;OAEG;IACH,QAAQ,IAAI,eAAe;IA+C3B;;;;OAIG;IACH,MAAM,CAAC,MAAM,GAAE,MAAU,EAAE,KAAK,GAAE,MAAY,GAAG,iBAAiB,EAAE;CAOrE"}
@@ -0,0 +1,42 @@
1
+ import { CurriculumRepository } from './CurriculumRepository.js';
2
+ import type { CurriculumSearchResult, CurriculumStats } from './types.js';
3
+ /**
4
+ * カリキュラム検索のビジネスロジックを提供するサービス
5
+ */
6
+ export declare class CurriculumService {
7
+ private repository;
8
+ constructor(repository?: CurriculumRepository);
9
+ /**
10
+ * キーワードで学習指導要領を検索
11
+ * @param query - 検索キーワード
12
+ * @param options - 検索オプション
13
+ */
14
+ search(query: string, options?: {
15
+ limit?: number;
16
+ includeRelated?: boolean;
17
+ }): CurriculumSearchResult[];
18
+ /**
19
+ * 教科別に学習指導要領を検索
20
+ * @param subject - 教科名
21
+ */
22
+ searchBySubject(subject: string): CurriculumSearchResult[];
23
+ /**
24
+ * 学年別に学習指導要領を検索
25
+ * @param grade - 学年(例: "1年", "2年", "小学校1年")
26
+ */
27
+ searchByGrade(grade: string): CurriculumSearchResult[];
28
+ /**
29
+ * 統計情報を取得
30
+ */
31
+ getStats(): CurriculumStats;
32
+ /**
33
+ * 検索結果をフォーマット(CLI表示用)
34
+ * @param results - 検索結果
35
+ */
36
+ formatResults(results: CurriculumSearchResult[]): string;
37
+ /**
38
+ * 統計情報をフォーマット(CLI表示用)
39
+ */
40
+ formatStats(stats: CurriculumStats): string;
41
+ }
42
+ //# sourceMappingURL=CurriculumService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurriculumService.d.ts","sourceRoot":"","sources":["../../../src/curriculum/CurriculumService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1E;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAuB;gBAE7B,UAAU,CAAC,EAAE,oBAAoB;IAI7C;;;;OAIG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,OAAO,CAAC;KACrB,GACL,sBAAsB,EAAE;IA8B3B;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAM1D;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAKtD;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,sBAAsB,EAAE,GAAG,MAAM;IA+BxD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;CA2B5C"}
@@ -0,0 +1,14 @@
1
+ import Database from 'better-sqlite3';
2
+ /**
3
+ * カリキュラムデータベース接続を取得
4
+ */
5
+ export declare function getCurriculumDb(): Database.Database;
6
+ /**
7
+ * データベース接続を閉じる
8
+ */
9
+ export declare function closeCurriculumDb(): void;
10
+ /**
11
+ * データベースが利用可能かチェック
12
+ */
13
+ export declare function isCurriculumDbAvailable(): boolean;
14
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/curriculum/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAsCtC;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,QAAQ,CAenD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD"}
@@ -0,0 +1,5 @@
1
+ export { CurriculumRepository } from './CurriculumRepository.js';
2
+ export { CurriculumService } from './CurriculumService.js';
3
+ export { getCurriculumDb, closeCurriculumDb, isCurriculumDbAvailable, } from './database.js';
4
+ export type { CurriculumSection, SectionRelation, CurriculumSearchResult, CurriculumStats, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/curriculum/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * カリキュラムセクションの型定義
3
+ */
4
+ export interface CurriculumSection {
5
+ id: string;
6
+ document_type: string;
7
+ chapter: string;
8
+ section: string;
9
+ title: string;
10
+ content: string;
11
+ level: number;
12
+ order_index: number;
13
+ source_file: string;
14
+ created_at?: string;
15
+ }
16
+ /**
17
+ * セクション間リレーションの型定義
18
+ */
19
+ export interface SectionRelation {
20
+ source_id: string;
21
+ target_id: string;
22
+ relation_type: string;
23
+ weight: number;
24
+ }
25
+ /**
26
+ * 検索結果の型定義
27
+ */
28
+ export interface CurriculumSearchResult {
29
+ section: CurriculumSection;
30
+ score: number;
31
+ highlight?: string;
32
+ }
33
+ /**
34
+ * カリキュラム統計の型定義
35
+ */
36
+ export interface CurriculumStats {
37
+ totalSections: number;
38
+ totalRelations: number;
39
+ byDocumentType: Record<string, number>;
40
+ byRelationType: Record<string, number>;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/curriculum/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shiden",
3
- "version": "0.3.5",
4
- "description": "教育者向けGitHub Copilot Agent Skills - 175件の教育理論を内蔵、FTS5日本語検索対応",
3
+ "version": "0.4.0",
4
+ "description": "教育者向けGitHub Copilot Agent Skills - 175件の教育理論+学習指導要領を内蔵、FTS5日本語検索対応",
5
5
  "keywords": [
6
6
  "github-copilot",
7
7
  "agent-skills",
@@ -39,7 +39,8 @@
39
39
  "dist/",
40
40
  "bin/",
41
41
  "templates/",
42
- "src/data/",
42
+ "src/data/*.db",
43
+ "src/data/*.json",
43
44
  "AGENTS.md",
44
45
  ".github/",
45
46
  "README.md",
Binary file
@@ -147,6 +147,53 @@ npx shiden theories related blooms_taxonomy
147
147
  - **Zone of Proximal Development** - 難易度設定
148
148
  - **ARCS Model** - 動機づけの工夫
149
149
 
150
+ ## 学習指導要領データベースの活用(v0.4.0 NEW!)
151
+
152
+ ### 学習指導要領の参照手順
153
+
154
+ 授業計画作成時は、必ず**学習指導要領**を参照し、目標・内容を準拠させます。
155
+
156
+ ```bash
157
+ # 教科で検索(算数、国語、理科、社会、英語など)
158
+ npx shiden curriculum subject 算数
159
+ npx shiden curriculum subject 国語
160
+
161
+ # キーワードで検索
162
+ npx shiden curriculum search "一次関数"
163
+ npx shiden curriculum search "図形の面積"
164
+
165
+ # 学年で検索
166
+ npx shiden curriculum grade "第3学年"
167
+ npx shiden curriculum grade "中学1年"
168
+
169
+ # 統計を確認
170
+ npx shiden curriculum stats
171
+ ```
172
+
173
+ ### 授業計画への反映方法
174
+
175
+ 1. **学習指導要領から目標を引用**
176
+ - 検索結果の「目標」セクションを確認
177
+ - 本時の目標を学習指導要領の目標に沿って設定
178
+
179
+ 2. **指導内容の確認**
180
+ - 当該学年で扱う内容範囲を確認
181
+ - 前学年・次学年との系統性を把握
182
+
183
+ 3. **評価規準の作成**
184
+ - 学習指導要領の「評価の観点」を参照
185
+ - 知識・技能、思考・判断・表現、主体的に学習に取り組む態度
186
+
187
+ ### 出力への反映
188
+
189
+ ```markdown
190
+ ### 学習指導要領との関連
191
+
192
+ **参照箇所**: 小学校学習指導要領 第2章 第3節 算数 第3学年
193
+ **目標**: 「{学習指導要領の目標を引用}」
194
+ **内容**: 「{当該単元の内容を引用}」
195
+ ```
196
+
150
197
  ## 学年・教科別調整
151
198
 
152
199
  ### 小学校(低学年)
@@ -288,6 +288,38 @@ npx shiden theories list --category "授業設計"
288
288
  | `arcs_model` | ARCS Model | 動機づけを高める教材設計 |
289
289
  | `udl` | Universal Design for Learning | 多様な学習者への対応 |
290
290
 
291
+ ## 学習指導要領データベースの活用(v0.4.0 NEW!)
292
+
293
+ ### 学習指導要領の参照手順
294
+
295
+ 教材作成時は、**学習指導要領**を参照して内容の妥当性を確認します。
296
+
297
+ ```bash
298
+ # 教科で検索
299
+ npx shiden curriculum subject 理科
300
+ npx shiden curriculum subject 算数
301
+
302
+ # キーワードで検索
303
+ npx shiden curriculum search "電気の流れ"
304
+ npx shiden curriculum search "図形の面積"
305
+
306
+ # 学年で検索
307
+ npx shiden curriculum grade "第4学年"
308
+ ```
309
+
310
+ ### 教材への反映
311
+
312
+ 1. **学習内容の範囲確認**
313
+ - 当該学年で扱うべき内容を確認
314
+ - 前学年との系統性を把握
315
+
316
+ 2. **用語の正確性**
317
+ - 学習指導要領で使用されている用語を確認
318
+ - 学年に応じた表現を使用
319
+
320
+ 3. **評価の観点**
321
+ - 知識・技能、思考・判断・表現を意識した問題設計
322
+
291
323
  ## 出力例
292
324
 
293
325
  (ワークシートの例)
@@ -179,6 +179,42 @@ npx shiden theories related <id> # 関連理論
179
179
  - **Growth Mindset** - 成長マインドセット
180
180
  - **Universal Design for Learning** - 学びのユニバーサルデザイン
181
181
 
182
+ ## 学習指導要領データベース(v0.4.0 NEW!)
183
+
184
+ SHIDENは**文部科学省の学習指導要領**をGraphRAG DBとして内蔵しています。
185
+ 授業計画・教材作成時に、学習指導要領に準拠した内容を参照できます。
186
+
187
+ ### CLIコマンド
188
+
189
+ ```bash
190
+ npx shiden curriculum search "キーワード" # 全文検索
191
+ npx shiden curriculum subject <教科名> # 教科別検索(算数、国語、理科等)
192
+ npx shiden curriculum grade <学年> # 学年別検索
193
+ npx shiden curriculum stats # 統計表示
194
+ ```
195
+
196
+ ### 収録コンテンツ(2,469セクション)
197
+
198
+ - **小学校学習指導要領**(平成29年告示)
199
+ - 国語、社会、算数、理科、生活、音楽、図画工作、家庭、体育、外国語
200
+ - 特別の教科 道徳、外国語活動、総合的な学習の時間、特別活動
201
+
202
+ ### ワークフローでの活用方法
203
+
204
+ 授業計画・教材作成時は、以下の手順で学習指導要領を参照します:
205
+
206
+ 1. **対象学年・教科を特定**(1問1答フローで収集)
207
+ 2. **学習指導要領を検索**(`npx shiden curriculum search`)
208
+ 3. **該当する目標・内容を引用**してコンテンツに反映
209
+ 4. **理論的根拠と合わせて**エビデンスベースの教材を作成
210
+
211
+ **例: 算数「一次関数」の授業計画作成時**
212
+ ```bash
213
+ npx shiden curriculum search "関数"
214
+ npx shiden curriculum subject 算数
215
+ ```
216
+ → 学習指導要領の該当箇所を確認し、目標設定に反映
217
+
182
218
  ## 使用例
183
219
 
184
220
  ### 例1: 授業計画作成
Binary file
File without changes