terminal-quest 1.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/LICENSE +21 -0
- package/bin/terminal-quest.js +2 -0
- package/dist/App.d.ts +2 -0
- package/dist/App.js +33 -0
- package/dist/components/HintBar.d.ts +9 -0
- package/dist/components/HintBar.js +11 -0
- package/dist/components/MenuItem.d.ts +9 -0
- package/dist/components/MenuItem.js +9 -0
- package/dist/components/ObjectivePanel.d.ts +8 -0
- package/dist/components/ObjectivePanel.js +10 -0
- package/dist/components/ProgressBar.d.ts +8 -0
- package/dist/components/ProgressBar.js +10 -0
- package/dist/components/TerminalOutput.d.ts +11 -0
- package/dist/components/TerminalOutput.js +25 -0
- package/dist/components/TerminalPrompt.d.ts +10 -0
- package/dist/components/TerminalPrompt.js +46 -0
- package/dist/data/commands-meta.d.ts +17 -0
- package/dist/data/commands-meta.js +256 -0
- package/dist/data/stories/00-beginner-pc.d.ts +3 -0
- package/dist/data/stories/00-beginner-pc.js +841 -0
- package/dist/data/stories/01-first-server.d.ts +3 -0
- package/dist/data/stories/01-first-server.js +364 -0
- package/dist/data/stories/02-messy-project.d.ts +3 -0
- package/dist/data/stories/02-messy-project.js +433 -0
- package/dist/data/stories/03-log-detective.d.ts +3 -0
- package/dist/data/stories/03-log-detective.js +291 -0
- package/dist/data/stories/04-deploy-day.d.ts +3 -0
- package/dist/data/stories/04-deploy-day.js +337 -0
- package/dist/data/stories/05-git-incident.d.ts +3 -0
- package/dist/data/stories/05-git-incident.js +534 -0
- package/dist/data/stories/06-pipe-master.d.ts +3 -0
- package/dist/data/stories/06-pipe-master.js +377 -0
- package/dist/data/stories/07-dangerous-commands.d.ts +3 -0
- package/dist/data/stories/07-dangerous-commands.js +411 -0
- package/dist/data/stories/index.d.ts +4 -0
- package/dist/data/stories/index.js +14 -0
- package/dist/data/stories/k1-treasure-hunt.d.ts +3 -0
- package/dist/data/stories/k1-treasure-hunt.js +815 -0
- package/dist/data/types.d.ts +97 -0
- package/dist/data/types.js +2 -0
- package/dist/engine/Achievements.d.ts +5 -0
- package/dist/engine/Achievements.js +93 -0
- package/dist/engine/CommandHandler.d.ts +17 -0
- package/dist/engine/CommandHandler.js +177 -0
- package/dist/engine/HintEngine.d.ts +10 -0
- package/dist/engine/HintEngine.js +26 -0
- package/dist/engine/MissionEngine.d.ts +17 -0
- package/dist/engine/MissionEngine.js +84 -0
- package/dist/engine/TabCompletion.d.ts +14 -0
- package/dist/engine/TabCompletion.js +93 -0
- package/dist/engine/VirtualFS.d.ts +33 -0
- package/dist/engine/VirtualFS.js +276 -0
- package/dist/engine/commands/cat.d.ts +4 -0
- package/dist/engine/commands/cat.js +18 -0
- package/dist/engine/commands/cd.d.ts +4 -0
- package/dist/engine/commands/cd.js +12 -0
- package/dist/engine/commands/chmod.d.ts +4 -0
- package/dist/engine/commands/chmod.js +98 -0
- package/dist/engine/commands/clear.d.ts +4 -0
- package/dist/engine/commands/clear.js +4 -0
- package/dist/engine/commands/cp.d.ts +4 -0
- package/dist/engine/commands/cp.js +26 -0
- package/dist/engine/commands/cut.d.ts +4 -0
- package/dist/engine/commands/cut.js +76 -0
- package/dist/engine/commands/echo.d.ts +4 -0
- package/dist/engine/commands/echo.js +4 -0
- package/dist/engine/commands/find.d.ts +4 -0
- package/dist/engine/commands/find.js +60 -0
- package/dist/engine/commands/git.d.ts +4 -0
- package/dist/engine/commands/git.js +510 -0
- package/dist/engine/commands/grep.d.ts +4 -0
- package/dist/engine/commands/grep.js +127 -0
- package/dist/engine/commands/head.d.ts +4 -0
- package/dist/engine/commands/head.js +59 -0
- package/dist/engine/commands/help.d.ts +4 -0
- package/dist/engine/commands/help.js +32 -0
- package/dist/engine/commands/hint.d.ts +4 -0
- package/dist/engine/commands/hint.js +4 -0
- package/dist/engine/commands/index.d.ts +8 -0
- package/dist/engine/commands/index.js +51 -0
- package/dist/engine/commands/ls.d.ts +4 -0
- package/dist/engine/commands/ls.js +50 -0
- package/dist/engine/commands/man.d.ts +4 -0
- package/dist/engine/commands/man.js +51 -0
- package/dist/engine/commands/mkdir.d.ts +4 -0
- package/dist/engine/commands/mkdir.js +31 -0
- package/dist/engine/commands/mv.d.ts +4 -0
- package/dist/engine/commands/mv.js +15 -0
- package/dist/engine/commands/pwd.d.ts +4 -0
- package/dist/engine/commands/pwd.js +4 -0
- package/dist/engine/commands/rm.d.ts +4 -0
- package/dist/engine/commands/rm.js +49 -0
- package/dist/engine/commands/sort.d.ts +4 -0
- package/dist/engine/commands/sort.js +100 -0
- package/dist/engine/commands/tail.d.ts +4 -0
- package/dist/engine/commands/tail.js +59 -0
- package/dist/engine/commands/touch.d.ts +4 -0
- package/dist/engine/commands/touch.js +18 -0
- package/dist/engine/commands/uniq.d.ts +4 -0
- package/dist/engine/commands/uniq.js +61 -0
- package/dist/engine/commands/wc.d.ts +4 -0
- package/dist/engine/commands/wc.js +67 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6 -0
- package/dist/screens/MissionBriefScreen.d.ts +9 -0
- package/dist/screens/MissionBriefScreen.js +27 -0
- package/dist/screens/MissionCompleteScreen.d.ts +9 -0
- package/dist/screens/MissionCompleteScreen.js +30 -0
- package/dist/screens/ProgressScreen.d.ts +8 -0
- package/dist/screens/ProgressScreen.js +24 -0
- package/dist/screens/SettingsScreen.d.ts +8 -0
- package/dist/screens/SettingsScreen.js +45 -0
- package/dist/screens/StorySelectScreen.d.ts +8 -0
- package/dist/screens/StorySelectScreen.js +81 -0
- package/dist/screens/TerminalScreen.d.ts +12 -0
- package/dist/screens/TerminalScreen.js +150 -0
- package/dist/screens/TitleScreen.d.ts +7 -0
- package/dist/screens/TitleScreen.js +27 -0
- package/dist/state/GameState.d.ts +8 -0
- package/dist/state/GameState.js +12 -0
- package/dist/state/ProgressStore.d.ts +9 -0
- package/dist/state/ProgressStore.js +45 -0
- package/dist/state/useGameState.d.ts +11 -0
- package/dist/state/useGameState.js +92 -0
- package/dist/utils/ascii-art.d.ts +4 -0
- package/dist/utils/ascii-art.js +22 -0
- package/dist/utils/colors.d.ts +17 -0
- package/dist/utils/colors.js +17 -0
- package/dist/utils/text.d.ts +4 -0
- package/dist/utils/text.js +28 -0
- package/package.json +58 -0
|
@@ -0,0 +1,815 @@
|
|
|
1
|
+
// ミッション1: 冒険のはじまり
|
|
2
|
+
const mission1FS = {
|
|
3
|
+
type: 'directory',
|
|
4
|
+
children: {
|
|
5
|
+
冒険の世界: {
|
|
6
|
+
type: 'directory',
|
|
7
|
+
children: {
|
|
8
|
+
スタート地点: {
|
|
9
|
+
type: 'directory',
|
|
10
|
+
children: {
|
|
11
|
+
'案内板.txt': {
|
|
12
|
+
type: 'file',
|
|
13
|
+
content: 'ようこそ、冒険の世界へ!\nここからきみの冒険がはじまるよ。\nまずは、いまいる場所をたしかめてみよう!\n',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
魔法の森: {
|
|
18
|
+
type: 'directory',
|
|
19
|
+
children: {},
|
|
20
|
+
},
|
|
21
|
+
古いお城: {
|
|
22
|
+
type: 'directory',
|
|
23
|
+
children: {},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
// ミッション2: 森を冒険しよう
|
|
30
|
+
const mission2FS = {
|
|
31
|
+
type: 'directory',
|
|
32
|
+
children: {
|
|
33
|
+
冒険の世界: {
|
|
34
|
+
type: 'directory',
|
|
35
|
+
children: {
|
|
36
|
+
スタート地点: {
|
|
37
|
+
type: 'directory',
|
|
38
|
+
children: {
|
|
39
|
+
'案内板.txt': {
|
|
40
|
+
type: 'file',
|
|
41
|
+
content: 'ようこそ、冒険の世界へ!\nここからきみの冒険がはじまるよ。\nまずは、いまいる場所をたしかめてみよう!\n',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
魔法の森: {
|
|
46
|
+
type: 'directory',
|
|
47
|
+
children: {
|
|
48
|
+
'光る花.txt': {
|
|
49
|
+
type: 'file',
|
|
50
|
+
content: 'きれいに光る花だ。さわるとあたたかい。\n',
|
|
51
|
+
},
|
|
52
|
+
'古い巻物.txt': {
|
|
53
|
+
type: 'file',
|
|
54
|
+
content: 'この巻物には古い言い伝えが書いてある。\n『北の洞窟に宝が眠る』\n',
|
|
55
|
+
},
|
|
56
|
+
'ヒント.txt': {
|
|
57
|
+
type: 'file',
|
|
58
|
+
content: '森を抜けたら、スタート地点に戻ってこよう。\n',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
// ミッション3: 秘密基地を作ろう
|
|
67
|
+
const mission3FS = {
|
|
68
|
+
type: 'directory',
|
|
69
|
+
children: {
|
|
70
|
+
冒険の世界: {
|
|
71
|
+
type: 'directory',
|
|
72
|
+
children: {
|
|
73
|
+
スタート地点: {
|
|
74
|
+
type: 'directory',
|
|
75
|
+
children: {},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
// ミッション4: 宝物を集めよう
|
|
82
|
+
const mission4FS = {
|
|
83
|
+
type: 'directory',
|
|
84
|
+
children: {
|
|
85
|
+
冒険の世界: {
|
|
86
|
+
type: 'directory',
|
|
87
|
+
children: {
|
|
88
|
+
魔法の森: {
|
|
89
|
+
type: 'directory',
|
|
90
|
+
children: {
|
|
91
|
+
'光る宝石.txt': {
|
|
92
|
+
type: 'file',
|
|
93
|
+
content: 'キラキラ光る美しい宝石だ。\n',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
古いお城: {
|
|
98
|
+
type: 'directory',
|
|
99
|
+
children: {
|
|
100
|
+
宝物庫: {
|
|
101
|
+
type: 'directory',
|
|
102
|
+
children: {
|
|
103
|
+
'伝説の剣.txt': {
|
|
104
|
+
type: 'file',
|
|
105
|
+
content: '古代の勇者が使っていた伝説の剣だ。\n',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
秘密基地: {
|
|
112
|
+
type: 'directory',
|
|
113
|
+
children: {
|
|
114
|
+
宝物庫: {
|
|
115
|
+
type: 'directory',
|
|
116
|
+
children: {},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
// ミッション5: トラップを片付けよう
|
|
125
|
+
const mission5FS = {
|
|
126
|
+
type: 'directory',
|
|
127
|
+
children: {
|
|
128
|
+
冒険の世界: {
|
|
129
|
+
type: 'directory',
|
|
130
|
+
children: {
|
|
131
|
+
ひみつの洞窟: {
|
|
132
|
+
type: 'directory',
|
|
133
|
+
children: {
|
|
134
|
+
'トラップ1.txt': {
|
|
135
|
+
type: 'file',
|
|
136
|
+
content: '⚠ これはトラップだ!さわると大変!\n',
|
|
137
|
+
},
|
|
138
|
+
'トラップ2.txt': {
|
|
139
|
+
type: 'file',
|
|
140
|
+
content: '⚠ これはトラップだ!さわると大変!\n',
|
|
141
|
+
},
|
|
142
|
+
'たからの地図.txt': {
|
|
143
|
+
type: 'file',
|
|
144
|
+
content: '宝はこの洞窟の奥にあるらしい。\n',
|
|
145
|
+
},
|
|
146
|
+
奥の部屋: {
|
|
147
|
+
type: 'directory',
|
|
148
|
+
children: {
|
|
149
|
+
'トラップ3.txt': {
|
|
150
|
+
type: 'file',
|
|
151
|
+
content: '⚠ これはトラップだ!さわると大変!\n',
|
|
152
|
+
},
|
|
153
|
+
'宝箱.txt': {
|
|
154
|
+
type: 'file',
|
|
155
|
+
content: 'おめでとう!宝箱を見つけた!\n中には金貨がたくさん入っている。\n',
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
// ミッション6: 暗号を解読しよう
|
|
166
|
+
const mission6FS = {
|
|
167
|
+
type: 'directory',
|
|
168
|
+
children: {
|
|
169
|
+
冒険の世界: {
|
|
170
|
+
type: 'directory',
|
|
171
|
+
children: {
|
|
172
|
+
ひみつの洞窟: {
|
|
173
|
+
type: 'directory',
|
|
174
|
+
children: {
|
|
175
|
+
'暗号文.txt': {
|
|
176
|
+
type: 'file',
|
|
177
|
+
content: [
|
|
178
|
+
'むかしむかし、ある国に王様がいました。',
|
|
179
|
+
'王様はとても優しい人でした。',
|
|
180
|
+
'ある日、魔法使いがやってきました。',
|
|
181
|
+
'魔法使いは王様に宝の地図をわたしました。',
|
|
182
|
+
'そして二人は旅に出ました。',
|
|
183
|
+
'冒険の終わりに、大きな宝物を見つけました。',
|
|
184
|
+
].join('\n') + '\n',
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
// ミッション7: 古い書物を読もう
|
|
193
|
+
const magicBookContent = [
|
|
194
|
+
'=== 魔法の書 ===',
|
|
195
|
+
'',
|
|
196
|
+
'第一章 火の魔法',
|
|
197
|
+
'ファイアボール:火の玉をとばす',
|
|
198
|
+
'フレイムウォール:火のかべをつくる',
|
|
199
|
+
'',
|
|
200
|
+
'第二章 水の魔法',
|
|
201
|
+
'アクアストリーム:水の流れをおこす',
|
|
202
|
+
'アイスシールド:氷のたてをつくる',
|
|
203
|
+
'',
|
|
204
|
+
'第三章 風の魔法',
|
|
205
|
+
'ウィンドカッター:風の刃をとばす',
|
|
206
|
+
'エアシールド:風のバリアをはる',
|
|
207
|
+
'',
|
|
208
|
+
'第四章 土の魔法',
|
|
209
|
+
'ロックスロー:岩を投げる',
|
|
210
|
+
'アースウォール:土のかべをつくる',
|
|
211
|
+
'',
|
|
212
|
+
'第五章 光の魔法',
|
|
213
|
+
'ホーリーライト:聖なる光でてらす',
|
|
214
|
+
'ヒーリング:きずをなおす',
|
|
215
|
+
].join('\n') + '\n';
|
|
216
|
+
const mission7FS = {
|
|
217
|
+
type: 'directory',
|
|
218
|
+
children: {
|
|
219
|
+
冒険の世界: {
|
|
220
|
+
type: 'directory',
|
|
221
|
+
children: {
|
|
222
|
+
古いお城: {
|
|
223
|
+
type: 'directory',
|
|
224
|
+
children: {
|
|
225
|
+
図書室: {
|
|
226
|
+
type: 'directory',
|
|
227
|
+
children: {
|
|
228
|
+
'魔法の書.txt': {
|
|
229
|
+
type: 'file',
|
|
230
|
+
content: magicBookContent,
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
// ミッション8: 仲間リストを整理しよう
|
|
241
|
+
const mission8FS = {
|
|
242
|
+
type: 'directory',
|
|
243
|
+
children: {
|
|
244
|
+
冒険の世界: {
|
|
245
|
+
type: 'directory',
|
|
246
|
+
children: {
|
|
247
|
+
古いお城: {
|
|
248
|
+
type: 'directory',
|
|
249
|
+
children: {
|
|
250
|
+
'冒険者名簿.csv': {
|
|
251
|
+
type: 'file',
|
|
252
|
+
content: [
|
|
253
|
+
'名前,職業,レベル',
|
|
254
|
+
'たけし,戦士,15',
|
|
255
|
+
'さくら,魔法使い,20',
|
|
256
|
+
'たけし,戦士,15',
|
|
257
|
+
'ゆうき,勇者,25',
|
|
258
|
+
'さくら,魔法使い,20',
|
|
259
|
+
'ひなた,僧侶,18',
|
|
260
|
+
'ゆうき,勇者,25',
|
|
261
|
+
'たけし,戦士,15',
|
|
262
|
+
].join('\n') + '\n',
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
// ミッション9: 封印を解こう
|
|
271
|
+
const mission9FS = {
|
|
272
|
+
type: 'directory',
|
|
273
|
+
children: {
|
|
274
|
+
冒険の世界: {
|
|
275
|
+
type: 'directory',
|
|
276
|
+
children: {
|
|
277
|
+
古いお城: {
|
|
278
|
+
type: 'directory',
|
|
279
|
+
children: {
|
|
280
|
+
'封印の呪文.sh': {
|
|
281
|
+
type: 'file',
|
|
282
|
+
content: '#!/bin/bash\necho "封印が解けた!大きな扉が開く!"\n',
|
|
283
|
+
permissions: '-rw-r--r--',
|
|
284
|
+
},
|
|
285
|
+
'魔法の石.txt': {
|
|
286
|
+
type: 'file',
|
|
287
|
+
content: '火の魔法\n水の魔法\n風の魔法\n土の魔法\n光の魔法\n闇の魔法\n',
|
|
288
|
+
},
|
|
289
|
+
'魔法の杖.txt': {
|
|
290
|
+
type: 'file',
|
|
291
|
+
content: '古代の杖 - すべての魔法を増幅する\n',
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
// ミッション10: 冒険の記録をつけよう
|
|
300
|
+
const gitLogContent = [
|
|
301
|
+
'commit f1a2b3c (HEAD -> main)',
|
|
302
|
+
'Author: 冒険者 <adventurer@example.com>',
|
|
303
|
+
'Date: Mon Jan 15 10:00:00 2024',
|
|
304
|
+
'',
|
|
305
|
+
' 秘密基地をつくった',
|
|
306
|
+
'',
|
|
307
|
+
'commit d4e5f6g',
|
|
308
|
+
'Author: 冒険者 <adventurer@example.com>',
|
|
309
|
+
'Date: Mon Jan 15 09:00:00 2024',
|
|
310
|
+
'',
|
|
311
|
+
' 宝物を集めた',
|
|
312
|
+
'',
|
|
313
|
+
'commit h7i8j9k',
|
|
314
|
+
'Author: 冒険者 <adventurer@example.com>',
|
|
315
|
+
'Date: Mon Jan 15 08:00:00 2024',
|
|
316
|
+
'',
|
|
317
|
+
' 冒険をはじめた',
|
|
318
|
+
].join('\n');
|
|
319
|
+
const gitStatusOutput = [
|
|
320
|
+
'On branch main',
|
|
321
|
+
'Changes not staged for commit:',
|
|
322
|
+
' (use "git add <file>..." to update what will be committed)',
|
|
323
|
+
' (use "git restore <file>..." to discard changes in working directory)',
|
|
324
|
+
'',
|
|
325
|
+
'\tmodified: 冒険日記.txt',
|
|
326
|
+
'',
|
|
327
|
+
'no changes added to commit (use "git add" to track)',
|
|
328
|
+
].join('\n');
|
|
329
|
+
const mission10FS = {
|
|
330
|
+
type: 'directory',
|
|
331
|
+
children: {
|
|
332
|
+
冒険の世界: {
|
|
333
|
+
type: 'directory',
|
|
334
|
+
children: {
|
|
335
|
+
秘密基地: {
|
|
336
|
+
type: 'directory',
|
|
337
|
+
children: {
|
|
338
|
+
'.git': {
|
|
339
|
+
type: 'directory',
|
|
340
|
+
children: {
|
|
341
|
+
HEAD: {
|
|
342
|
+
type: 'file',
|
|
343
|
+
content: 'ref: refs/heads/main',
|
|
344
|
+
},
|
|
345
|
+
branches: {
|
|
346
|
+
type: 'file',
|
|
347
|
+
content: '* main',
|
|
348
|
+
},
|
|
349
|
+
log: {
|
|
350
|
+
type: 'file',
|
|
351
|
+
content: gitLogContent,
|
|
352
|
+
},
|
|
353
|
+
'status-output': {
|
|
354
|
+
type: 'file',
|
|
355
|
+
content: gitStatusOutput,
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
'冒険日記.txt': {
|
|
360
|
+
type: 'file',
|
|
361
|
+
content: '今日は秘密基地で冒険の記録をまとめた。\n新しい仲間もできた。\n明日はもっと遠くへ冒険しよう。\n',
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
export const storyK1 = {
|
|
370
|
+
id: 'story-k1',
|
|
371
|
+
title: 'たからさがし大冒険',
|
|
372
|
+
description: 'きみは冒険者!ふしぎな世界をたんけんして、たからものを見つけよう。ターミナルのコマンドをつかって、冒険をすすめていくよ。',
|
|
373
|
+
emoji: '✨',
|
|
374
|
+
course: 'kids',
|
|
375
|
+
missions: [
|
|
376
|
+
// ミッション1: 冒険のはじまり
|
|
377
|
+
{
|
|
378
|
+
id: 'mission-k1-01',
|
|
379
|
+
title: '冒険のはじまり',
|
|
380
|
+
description: 'いまいる場所をたしかめて、まわりを見てみよう!',
|
|
381
|
+
narrative: 'きみは冒険の世界にやってきた!スタート地点にいるみたいだけど、ここはどこだろう?まずは「いまいる場所」をたしかめて、まわりに何があるか見てみよう。',
|
|
382
|
+
initialCwd: '/冒険の世界/スタート地点',
|
|
383
|
+
initialFS: mission1FS,
|
|
384
|
+
newCommands: ['pwd', 'ls'],
|
|
385
|
+
objectives: [
|
|
386
|
+
{
|
|
387
|
+
id: 'obj-k1-01-01',
|
|
388
|
+
description: 'いまいる場所をたしかめよう(pwd コマンド)',
|
|
389
|
+
checks: [{ type: 'command_executed', command: 'pwd' }],
|
|
390
|
+
hints: [
|
|
391
|
+
{ level: 1, text: 'いまいる場所を知るコマンドがあるよ。' },
|
|
392
|
+
{ level: 2, text: '「pwd」っていう3文字のコマンドだよ。' },
|
|
393
|
+
{ level: 3, text: '「pwd」とにゅうりょくして Enter をおしてね。' },
|
|
394
|
+
],
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: 'obj-k1-01-02',
|
|
398
|
+
description: 'まわりに何があるか見てみよう(ls コマンド)',
|
|
399
|
+
checks: [{ type: 'command_executed', command: 'ls' }],
|
|
400
|
+
hints: [
|
|
401
|
+
{ level: 1, text: 'まわりにあるものを見るコマンドがあるよ。' },
|
|
402
|
+
{ level: 2, text: '「ls」っていう2文字のコマンドだよ。' },
|
|
403
|
+
{ level: 3, text: '「ls」とにゅうりょくして Enter をおしてね。' },
|
|
404
|
+
],
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
},
|
|
408
|
+
// ミッション2: 森を冒険しよう
|
|
409
|
+
{
|
|
410
|
+
id: 'mission-k1-02',
|
|
411
|
+
title: '森を冒険しよう',
|
|
412
|
+
description: '魔法の森にいって、古い巻物を読んでみよう!',
|
|
413
|
+
narrative: '案内板に「魔法の森には何かひみつがある」と書いてあった。森にいって、手がかりをさがそう!巻物を読んだら、スタート地点にもどってこよう。',
|
|
414
|
+
initialCwd: '/冒険の世界/スタート地点',
|
|
415
|
+
initialFS: mission2FS,
|
|
416
|
+
newCommands: ['cd', 'cat'],
|
|
417
|
+
objectives: [
|
|
418
|
+
{
|
|
419
|
+
id: 'obj-k1-02-01',
|
|
420
|
+
description: '魔法の森にいどうしよう',
|
|
421
|
+
checks: [{ type: 'cwd_equals', path: '/冒険の世界/魔法の森' }],
|
|
422
|
+
hints: [
|
|
423
|
+
{ level: 1, text: 'べつの場所にいどうするコマンドがあるよ。' },
|
|
424
|
+
{ level: 2, text: '「cd」のあとに、いきたい場所の名前を書くよ。' },
|
|
425
|
+
{ level: 3, text: '「cd /冒険の世界/魔法の森」とにゅうりょくしてね。' },
|
|
426
|
+
],
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
id: 'obj-k1-02-02',
|
|
430
|
+
description: '古い巻物を読んでみよう',
|
|
431
|
+
checks: [{ type: 'output_contains', pattern: '宝' }],
|
|
432
|
+
hints: [
|
|
433
|
+
{ level: 1, text: 'ファイルの中身を読むコマンドがあるよ。' },
|
|
434
|
+
{ level: 2, text: '「cat」のあとにファイル名を書くと、中身が読めるよ。' },
|
|
435
|
+
{ level: 3, text: '「cat 古い巻物.txt」とにゅうりょくしてね。' },
|
|
436
|
+
],
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
id: 'obj-k1-02-03',
|
|
440
|
+
description: 'スタート地点にもどろう',
|
|
441
|
+
checks: [{ type: 'cwd_equals', path: '/冒険の世界/スタート地点' }],
|
|
442
|
+
hints: [
|
|
443
|
+
{ level: 1, text: 'さっきつかった「cd」コマンドでもどれるよ。' },
|
|
444
|
+
{ level: 2, text: 'スタート地点のフルパスを指定しよう。' },
|
|
445
|
+
{ level: 3, text: '「cd /冒険の世界/スタート地点」とにゅうりょくしてね。' },
|
|
446
|
+
],
|
|
447
|
+
},
|
|
448
|
+
],
|
|
449
|
+
},
|
|
450
|
+
// ミッション3: 秘密基地を作ろう
|
|
451
|
+
{
|
|
452
|
+
id: 'mission-k1-03',
|
|
453
|
+
title: '秘密基地を作ろう',
|
|
454
|
+
description: 'じぶんだけの秘密基地をつくろう!部屋もつくって、ノートもおこう。',
|
|
455
|
+
narrative: '冒険には秘密基地がひつようだ!まずは基地をつくって、たからものをしまう部屋と、冒険のきろくをつけるノートを用意しよう。',
|
|
456
|
+
initialCwd: '/冒険の世界',
|
|
457
|
+
initialFS: mission3FS,
|
|
458
|
+
newCommands: ['mkdir', 'touch'],
|
|
459
|
+
objectives: [
|
|
460
|
+
{
|
|
461
|
+
id: 'obj-k1-03-01',
|
|
462
|
+
description: '秘密基地をつくろう',
|
|
463
|
+
checks: [{ type: 'file_exists', path: '/冒険の世界/秘密基地' }],
|
|
464
|
+
hints: [
|
|
465
|
+
{ level: 1, text: 'あたらしいフォルダをつくるコマンドがあるよ。' },
|
|
466
|
+
{ level: 2, text: '「mkdir」のあとにフォルダの名前を書くよ。' },
|
|
467
|
+
{ level: 3, text: '「mkdir 秘密基地」とにゅうりょくしてね。' },
|
|
468
|
+
],
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
id: 'obj-k1-03-02',
|
|
472
|
+
description: '秘密基地の中に宝物庫をつくろう',
|
|
473
|
+
checks: [{ type: 'file_exists', path: '/冒険の世界/秘密基地/宝物庫' }],
|
|
474
|
+
hints: [
|
|
475
|
+
{ level: 1, text: '秘密基地の中にもうひとつフォルダをつくろう。' },
|
|
476
|
+
{ level: 2, text: '「mkdir」でパスを指定して、中にフォルダがつくれるよ。' },
|
|
477
|
+
{ level: 3, text: '「mkdir 秘密基地/宝物庫」とにゅうりょくしてね。' },
|
|
478
|
+
],
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
id: 'obj-k1-03-03',
|
|
482
|
+
description: '冒険ノートをつくろう',
|
|
483
|
+
checks: [
|
|
484
|
+
{ type: 'file_exists', path: '/冒険の世界/秘密基地/冒険ノート.txt' },
|
|
485
|
+
],
|
|
486
|
+
hints: [
|
|
487
|
+
{ level: 1, text: 'からっぽのファイルをつくるコマンドがあるよ。' },
|
|
488
|
+
{ level: 2, text: '「touch」のあとにファイル名を書くと、ファイルがつくれるよ。' },
|
|
489
|
+
{ level: 3, text: '「touch 秘密基地/冒険ノート.txt」とにゅうりょくしてね。' },
|
|
490
|
+
],
|
|
491
|
+
},
|
|
492
|
+
],
|
|
493
|
+
},
|
|
494
|
+
// ミッション4: 宝物を集めよう
|
|
495
|
+
{
|
|
496
|
+
id: 'mission-k1-04',
|
|
497
|
+
title: '宝物を集めよう',
|
|
498
|
+
description: 'いろんな場所にある宝物を秘密基地にあつめよう!',
|
|
499
|
+
narrative: '冒険の世界にはたからものがいっぱい!魔法の森にある宝石をコピーして、古いお城にある伝説の剣を秘密基地にうつそう。',
|
|
500
|
+
initialCwd: '/冒険の世界',
|
|
501
|
+
initialFS: mission4FS,
|
|
502
|
+
newCommands: ['cp', 'mv'],
|
|
503
|
+
objectives: [
|
|
504
|
+
{
|
|
505
|
+
id: 'obj-k1-04-01',
|
|
506
|
+
description: '光る宝石を秘密基地にコピーしよう',
|
|
507
|
+
checks: [
|
|
508
|
+
{
|
|
509
|
+
type: 'file_exists',
|
|
510
|
+
path: '/冒険の世界/秘密基地/宝物庫/光る宝石.txt',
|
|
511
|
+
},
|
|
512
|
+
],
|
|
513
|
+
hints: [
|
|
514
|
+
{ level: 1, text: 'ファイルをコピーするコマンドがあるよ。' },
|
|
515
|
+
{ level: 2, text: '「cp」のあとに「もとのファイル」「コピーさき」を書くよ。' },
|
|
516
|
+
{
|
|
517
|
+
level: 3,
|
|
518
|
+
text: '「cp 魔法の森/光る宝石.txt 秘密基地/宝物庫/光る宝石.txt」とにゅうりょくしてね。',
|
|
519
|
+
},
|
|
520
|
+
],
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
id: 'obj-k1-04-02',
|
|
524
|
+
description: '伝説の剣を秘密基地にうつそう',
|
|
525
|
+
checks: [
|
|
526
|
+
{
|
|
527
|
+
type: 'file_exists',
|
|
528
|
+
path: '/冒険の世界/秘密基地/宝物庫/伝説の剣.txt',
|
|
529
|
+
},
|
|
530
|
+
],
|
|
531
|
+
hints: [
|
|
532
|
+
{ level: 1, text: 'ファイルをべつの場所にうつすコマンドがあるよ。' },
|
|
533
|
+
{ level: 2, text: '「mv」のあとに「もとのファイル」「うつしさき」を書くよ。コピーとちがって、もとのファイルはなくなるよ。' },
|
|
534
|
+
{
|
|
535
|
+
level: 3,
|
|
536
|
+
text: '「mv 古いお城/宝物庫/伝説の剣.txt 秘密基地/宝物庫/伝説の剣.txt」とにゅうりょくしてね。',
|
|
537
|
+
},
|
|
538
|
+
],
|
|
539
|
+
},
|
|
540
|
+
],
|
|
541
|
+
},
|
|
542
|
+
// ミッション5: トラップを片付けよう
|
|
543
|
+
{
|
|
544
|
+
id: 'mission-k1-05',
|
|
545
|
+
title: 'トラップを片付けよう',
|
|
546
|
+
description: 'ひみつの洞窟にしかけられたトラップを見つけて、かたづけよう!',
|
|
547
|
+
narrative: 'ひみつの洞窟にはトラップがしかけてある!まずはトラップがどこにあるか見つけて、ぜんぶかたづけよう。そうすれば安全にたからものがとれるよ。',
|
|
548
|
+
initialCwd: '/冒険の世界/ひみつの洞窟',
|
|
549
|
+
initialFS: mission5FS,
|
|
550
|
+
newCommands: ['rm', 'find'],
|
|
551
|
+
objectives: [
|
|
552
|
+
{
|
|
553
|
+
id: 'obj-k1-05-01',
|
|
554
|
+
description: 'トラップをさがそう',
|
|
555
|
+
checks: [{ type: 'output_contains', pattern: 'トラップ' }],
|
|
556
|
+
hints: [
|
|
557
|
+
{ level: 1, text: 'ファイルをさがすコマンドがあるよ。' },
|
|
558
|
+
{ level: 2, text: '「find」コマンドで名前をしていしてさがせるよ。' },
|
|
559
|
+
{
|
|
560
|
+
level: 3,
|
|
561
|
+
text: '「find . -name トラップ*」とにゅうりょくしてね。',
|
|
562
|
+
},
|
|
563
|
+
],
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
id: 'obj-k1-05-02',
|
|
567
|
+
description: 'トラップ1をけそう',
|
|
568
|
+
checks: [
|
|
569
|
+
{
|
|
570
|
+
type: 'file_not_exists',
|
|
571
|
+
path: '/冒険の世界/ひみつの洞窟/トラップ1.txt',
|
|
572
|
+
},
|
|
573
|
+
],
|
|
574
|
+
hints: [
|
|
575
|
+
{ level: 1, text: 'ファイルをけすコマンドがあるよ。' },
|
|
576
|
+
{ level: 2, text: '「rm」のあとにけしたいファイル名を書くよ。' },
|
|
577
|
+
{ level: 3, text: '「rm トラップ1.txt」とにゅうりょくしてね。' },
|
|
578
|
+
],
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
id: 'obj-k1-05-03',
|
|
582
|
+
description: 'トラップ2をけそう',
|
|
583
|
+
checks: [
|
|
584
|
+
{
|
|
585
|
+
type: 'file_not_exists',
|
|
586
|
+
path: '/冒険の世界/ひみつの洞窟/トラップ2.txt',
|
|
587
|
+
},
|
|
588
|
+
],
|
|
589
|
+
hints: [
|
|
590
|
+
{ level: 1, text: 'さっきとおなじようにけしてみよう。' },
|
|
591
|
+
{ level: 2, text: '「rm」コマンドをつかおう。' },
|
|
592
|
+
{ level: 3, text: '「rm トラップ2.txt」とにゅうりょくしてね。' },
|
|
593
|
+
],
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
id: 'obj-k1-05-04',
|
|
597
|
+
description: '奥の部屋のトラップ3もけそう',
|
|
598
|
+
checks: [
|
|
599
|
+
{
|
|
600
|
+
type: 'file_not_exists',
|
|
601
|
+
path: '/冒険の世界/ひみつの洞窟/奥の部屋/トラップ3.txt',
|
|
602
|
+
},
|
|
603
|
+
],
|
|
604
|
+
hints: [
|
|
605
|
+
{ level: 1, text: '奥の部屋の中にあるファイルもけせるよ。' },
|
|
606
|
+
{ level: 2, text: 'パスを指定すればべつのフォルダの中のファイルもけせるよ。' },
|
|
607
|
+
{ level: 3, text: '「rm 奥の部屋/トラップ3.txt」とにゅうりょくしてね。' },
|
|
608
|
+
],
|
|
609
|
+
},
|
|
610
|
+
],
|
|
611
|
+
},
|
|
612
|
+
// ミッション6: 暗号を解読しよう
|
|
613
|
+
{
|
|
614
|
+
id: 'mission-k1-06',
|
|
615
|
+
title: '暗号を解読しよう',
|
|
616
|
+
description: '暗号文から手がかりをさがして、けっかを書きのこそう!',
|
|
617
|
+
narrative: '洞窟のおくで暗号文を見つけた!この中に「魔法」というキーワードがかくれているらしい。さがしだして、わかったことを書きのこそう。',
|
|
618
|
+
initialCwd: '/冒険の世界/ひみつの洞窟',
|
|
619
|
+
initialFS: mission6FS,
|
|
620
|
+
newCommands: ['grep', 'echo'],
|
|
621
|
+
objectives: [
|
|
622
|
+
{
|
|
623
|
+
id: 'obj-k1-06-01',
|
|
624
|
+
description: '暗号文から「魔法」という言葉をさがそう',
|
|
625
|
+
checks: [{ type: 'output_contains', pattern: '魔法' }],
|
|
626
|
+
hints: [
|
|
627
|
+
{ level: 1, text: 'ファイルの中からことばをさがすコマンドがあるよ。' },
|
|
628
|
+
{ level: 2, text: '「grep」のあとにさがしたいことばとファイル名を書くよ。' },
|
|
629
|
+
{ level: 3, text: '「grep 魔法 暗号文.txt」とにゅうりょくしてね。' },
|
|
630
|
+
],
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
id: 'obj-k1-06-02',
|
|
634
|
+
description: 'かいどくけっかをファイルに書こう',
|
|
635
|
+
checks: [
|
|
636
|
+
{
|
|
637
|
+
type: 'file_exists',
|
|
638
|
+
path: '/冒険の世界/ひみつの洞窟/解読結果.txt',
|
|
639
|
+
},
|
|
640
|
+
],
|
|
641
|
+
hints: [
|
|
642
|
+
{ level: 1, text: 'もじをファイルに書きこむコマンドがあるよ。' },
|
|
643
|
+
{ level: 2, text: '「echo」と「>」をつかうと、もじをファイルに書けるよ。' },
|
|
644
|
+
{
|
|
645
|
+
level: 3,
|
|
646
|
+
text: '「echo "魔法使いが宝の地図をくれた" > 解読結果.txt」とにゅうりょくしてね。',
|
|
647
|
+
},
|
|
648
|
+
],
|
|
649
|
+
},
|
|
650
|
+
],
|
|
651
|
+
},
|
|
652
|
+
// ミッション7: 古い書物を読もう
|
|
653
|
+
{
|
|
654
|
+
id: 'mission-k1-07',
|
|
655
|
+
title: '古い書物を読もう',
|
|
656
|
+
description: 'ながい魔法の書の最初と最後をかくにんして、何ページあるかかぞえよう!',
|
|
657
|
+
narrative: '古いお城の図書室で、ぶあつい魔法の書を見つけた!ぜんぶ読むのは大変だから、最初と最後だけ読んで、ページ数もかくにんしよう。',
|
|
658
|
+
initialCwd: '/冒険の世界/古いお城/図書室',
|
|
659
|
+
initialFS: mission7FS,
|
|
660
|
+
newCommands: ['head', 'tail', 'wc'],
|
|
661
|
+
objectives: [
|
|
662
|
+
{
|
|
663
|
+
id: 'obj-k1-07-01',
|
|
664
|
+
description: '魔法の書のさいしょの部分を読もう',
|
|
665
|
+
checks: [{ type: 'command_executed', command: 'head' }],
|
|
666
|
+
hints: [
|
|
667
|
+
{ level: 1, text: 'ファイルのさいしょだけ読むコマンドがあるよ。' },
|
|
668
|
+
{ level: 2, text: '「head」コマンドをつかうと、ファイルのさいしょの方だけ見られるよ。' },
|
|
669
|
+
{ level: 3, text: '「head 魔法の書.txt」とにゅうりょくしてね。' },
|
|
670
|
+
],
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
id: 'obj-k1-07-02',
|
|
674
|
+
description: '魔法の書のさいごの部分を読もう',
|
|
675
|
+
checks: [{ type: 'command_executed', command: 'tail' }],
|
|
676
|
+
hints: [
|
|
677
|
+
{ level: 1, text: 'ファイルのさいごだけ読むコマンドがあるよ。' },
|
|
678
|
+
{ level: 2, text: '「tail」コマンドをつかうと、ファイルのさいごの方だけ見られるよ。' },
|
|
679
|
+
{ level: 3, text: '「tail 魔法の書.txt」とにゅうりょくしてね。' },
|
|
680
|
+
],
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
id: 'obj-k1-07-03',
|
|
684
|
+
description: '魔法の書が何行あるかかぞえよう',
|
|
685
|
+
checks: [
|
|
686
|
+
{ type: 'command_executed', command: 'wc' },
|
|
687
|
+
{ type: 'output_contains', pattern: '20' },
|
|
688
|
+
],
|
|
689
|
+
hints: [
|
|
690
|
+
{ level: 1, text: 'ファイルの行数をかぞえるコマンドがあるよ。' },
|
|
691
|
+
{ level: 2, text: '「wc」コマンドをつかうと、行の数がわかるよ。' },
|
|
692
|
+
{ level: 3, text: '「wc 魔法の書.txt」とにゅうりょくしてね。' },
|
|
693
|
+
],
|
|
694
|
+
},
|
|
695
|
+
],
|
|
696
|
+
},
|
|
697
|
+
// ミッション8: 仲間リストを整理しよう
|
|
698
|
+
{
|
|
699
|
+
id: 'mission-k1-08',
|
|
700
|
+
title: '仲間リストを整理しよう',
|
|
701
|
+
description: '冒険者の名簿をきれいに整理しよう!',
|
|
702
|
+
narrative: '古いお城で冒険者の名簿を見つけた。でも同じ名前が何回も書いてある。きれいに整理して、どんな職業の仲間がいるか調べよう。',
|
|
703
|
+
initialCwd: '/冒険の世界/古いお城',
|
|
704
|
+
initialFS: mission8FS,
|
|
705
|
+
newCommands: ['sort', 'uniq', 'cut'],
|
|
706
|
+
objectives: [
|
|
707
|
+
{
|
|
708
|
+
id: 'obj-k1-08-01',
|
|
709
|
+
description: '名簿をじゅんばんにならべよう',
|
|
710
|
+
checks: [{ type: 'command_executed', command: 'sort' }],
|
|
711
|
+
hints: [
|
|
712
|
+
{ level: 1, text: 'ならびかえるコマンドがあるよ。' },
|
|
713
|
+
{ level: 2, text: '「sort」コマンドで行をじゅんばんにできるよ。' },
|
|
714
|
+
{ level: 3, text: '「sort 冒険者名簿.csv」とにゅうりょくしてね。' },
|
|
715
|
+
],
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
id: 'obj-k1-08-02',
|
|
719
|
+
description: 'おなじ行をまとめよう',
|
|
720
|
+
checks: [{ type: 'command_executed', command: 'uniq' }],
|
|
721
|
+
hints: [
|
|
722
|
+
{ level: 1, text: 'おなじものをまとめるコマンドがあるよ。パイプ「|」もつかってみよう。' },
|
|
723
|
+
{ level: 2, text: '「sort」したあとに「|」で「uniq」につなげると、おなじ行をまとめられるよ。' },
|
|
724
|
+
{ level: 3, text: '「sort 冒険者名簿.csv | uniq」とにゅうりょくしてね。' },
|
|
725
|
+
],
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
id: 'obj-k1-08-03',
|
|
729
|
+
description: '職業だけをとりだそう',
|
|
730
|
+
checks: [{ type: 'output_contains', pattern: '職業' }],
|
|
731
|
+
hints: [
|
|
732
|
+
{ level: 1, text: 'とくていの部分だけきりだすコマンドがあるよ。' },
|
|
733
|
+
{ level: 2, text: '「cut」コマンドで「,」でくぎって2ばんめの部分をとりだせるよ。' },
|
|
734
|
+
{
|
|
735
|
+
level: 3,
|
|
736
|
+
text: '「cut -d, -f2 冒険者名簿.csv」とにゅうりょくしてね。',
|
|
737
|
+
},
|
|
738
|
+
],
|
|
739
|
+
},
|
|
740
|
+
],
|
|
741
|
+
},
|
|
742
|
+
// ミッション9: 封印を解こう
|
|
743
|
+
{
|
|
744
|
+
id: 'mission-k1-09',
|
|
745
|
+
title: '封印を解こう',
|
|
746
|
+
description: 'ふういんされた呪文をとけるようにして、魔法をつかおう!',
|
|
747
|
+
narrative: '古いお城のおくで、ふういんされた呪文を見つけた!ふういんを解いて実行できるようにしよう。そして魔法の石から、つかいたい魔法をえらびだそう。',
|
|
748
|
+
initialCwd: '/冒険の世界/古いお城',
|
|
749
|
+
initialFS: mission9FS,
|
|
750
|
+
newCommands: ['chmod'],
|
|
751
|
+
objectives: [
|
|
752
|
+
{
|
|
753
|
+
id: 'obj-k1-09-01',
|
|
754
|
+
description: '封印の呪文のふういんを解こう',
|
|
755
|
+
checks: [{ type: 'command_executed', command: 'chmod' }],
|
|
756
|
+
hints: [
|
|
757
|
+
{ level: 1, text: 'ファイルのけんげん(つかえるかどうか)をかえるコマンドがあるよ。' },
|
|
758
|
+
{ level: 2, text: '「chmod」コマンドで「+x」をつけると、実行できるようになるよ。' },
|
|
759
|
+
{ level: 3, text: '「chmod +x 封印の呪文.sh」とにゅうりょくしてね。' },
|
|
760
|
+
],
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
id: 'obj-k1-09-02',
|
|
764
|
+
description: '魔法の石から「光」の魔法をさがそう',
|
|
765
|
+
checks: [{ type: 'output_contains', pattern: '光の魔法' }],
|
|
766
|
+
hints: [
|
|
767
|
+
{ level: 1, text: 'パイプ「|」をつかって、コマンドをつなげてみよう。' },
|
|
768
|
+
{ level: 2, text: '「cat」でファイルを読んで、「|」で「grep」につなげると、ほしい行だけとりだせるよ。' },
|
|
769
|
+
{ level: 3, text: '「cat 魔法の石.txt | grep 光」とにゅうりょくしてね。' },
|
|
770
|
+
],
|
|
771
|
+
},
|
|
772
|
+
],
|
|
773
|
+
},
|
|
774
|
+
// ミッション10: 冒険の記録をつけよう
|
|
775
|
+
{
|
|
776
|
+
id: 'mission-k1-10',
|
|
777
|
+
title: '冒険の記録をつけよう',
|
|
778
|
+
description: 'gitをつかって、冒険のきろくをかくにんしよう!',
|
|
779
|
+
narrative: '秘密基地にもどってきた。冒険のきろくがgitでのこしてある。いままでの冒険をふりかえってみよう!',
|
|
780
|
+
initialCwd: '/冒険の世界/秘密基地',
|
|
781
|
+
initialFS: mission10FS,
|
|
782
|
+
newCommands: ['git'],
|
|
783
|
+
objectives: [
|
|
784
|
+
{
|
|
785
|
+
id: 'obj-k1-10-01',
|
|
786
|
+
description: 'いまのじょうたいをかくにんしよう',
|
|
787
|
+
checks: [
|
|
788
|
+
{ type: 'command_executed', command: 'git' },
|
|
789
|
+
{ type: 'output_contains', pattern: 'modified' },
|
|
790
|
+
],
|
|
791
|
+
hints: [
|
|
792
|
+
{ level: 1, text: 'gitのじょうたいをかくにんするコマンドがあるよ。' },
|
|
793
|
+
{ level: 2, text: '「git status」でいまのじょうたいがわかるよ。' },
|
|
794
|
+
{ level: 3, text: '「git status」とにゅうりょくしてね。' },
|
|
795
|
+
],
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
id: 'obj-k1-10-02',
|
|
799
|
+
description: 'いままでの冒険のきろくを見よう',
|
|
800
|
+
checks: [
|
|
801
|
+
{ type: 'command_executed', command: 'git' },
|
|
802
|
+
{ type: 'output_contains', pattern: 'commit' },
|
|
803
|
+
],
|
|
804
|
+
hints: [
|
|
805
|
+
{ level: 1, text: 'きろく(ログ)を見るgitコマンドがあるよ。' },
|
|
806
|
+
{ level: 2, text: '「git log」でいままでのきろくが見られるよ。' },
|
|
807
|
+
{ level: 3, text: '「git log」とにゅうりょくしてね。' },
|
|
808
|
+
],
|
|
809
|
+
},
|
|
810
|
+
],
|
|
811
|
+
},
|
|
812
|
+
],
|
|
813
|
+
unlockRequires: [],
|
|
814
|
+
};
|
|
815
|
+
//# sourceMappingURL=k1-treasure-hunt.js.map
|