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.
- package/README.md +38 -0
- package/dist/cli/commands/curriculum.js +78 -0
- package/dist/cli/commands/curriculum.js.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/curriculum/CurriculumRepository.js +202 -0
- package/dist/curriculum/CurriculumRepository.js.map +1 -0
- package/dist/curriculum/CurriculumService.js +113 -0
- package/dist/curriculum/CurriculumService.js.map +1 -0
- package/dist/curriculum/database.js +63 -0
- package/dist/curriculum/database.js.map +1 -0
- package/dist/curriculum/index.js +4 -0
- package/dist/curriculum/index.js.map +1 -0
- package/dist/curriculum/types.js +2 -0
- package/dist/curriculum/types.js.map +1 -0
- package/dist/types/cli/commands/curriculum.d.ts +6 -0
- package/dist/types/cli/commands/curriculum.d.ts.map +1 -0
- package/dist/types/curriculum/CurriculumRepository.d.ts +48 -0
- package/dist/types/curriculum/CurriculumRepository.d.ts.map +1 -0
- package/dist/types/curriculum/CurriculumService.d.ts +42 -0
- package/dist/types/curriculum/CurriculumService.d.ts.map +1 -0
- package/dist/types/curriculum/database.d.ts +14 -0
- package/dist/types/curriculum/database.d.ts.map +1 -0
- package/dist/types/curriculum/index.d.ts +5 -0
- package/dist/types/curriculum/index.d.ts.map +1 -0
- package/dist/types/curriculum/types.d.ts +42 -0
- package/dist/types/curriculum/types.d.ts.map +1 -0
- package/package.json +4 -3
- package/src/data/curriculum.db +0 -0
- package/templates/.github/prompts/lesson-plan.md +47 -0
- package/templates/.github/prompts/materials.md +32 -0
- package/templates/AGENTS.md +36 -0
- package/src/data/theories.db-shm +0 -0
- 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();
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/curriculum/types.ts"],"names":[],"mappings":""}
|
|
@@ -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.
|
|
4
|
-
"description": "教育者向けGitHub Copilot Agent Skills - 175
|
|
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
|
(ワークシートの例)
|
package/templates/AGENTS.md
CHANGED
|
@@ -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: 授業計画作成
|
package/src/data/theories.db-shm
DELETED
|
Binary file
|
package/src/data/theories.db-wal
DELETED
|
File without changes
|