한눈에 보기
- 무엇: 메이크코드 튜토리얼 제작 도구로 나만의 코드작성기 튜토리얼을 만들어 월드에 넣기
- 누구: 코딩 수업용 월드를 직접 설계하는 교사(고급)
- 몇 분: 교사 연수 60분 안팎 (제안)
- 결과물: 월드를 열거나 NPC·커맨드 블록을 실행하면 코드작성기에 내 튜토리얼이 뜨는 월드
- 덤: education.json으로 학생이 쓸 수 있는 명령어 막기

코딩 대결 월드와 코드작성기 튜토리얼
- 코딩 대결 월드: 구역을 나눠 코드로 건축 결과를 겨루기
- 코드작성기 튜토리얼: 안내를 따라 진행, 언어 선택 가능(번역 안 된 것도 있음)
- 활동 가이드: 언제 쓰면 좋을까?: 본격적인 코딩 과제 전에 개념 익히기용 / 교사 개입 없이 스스로 할 수 있어 개인 과제로 좋음 / 수준·분량이 제각각 → 교사가 먼저 해 보고 골라 주기 / 수업 계획(Guiding Ideas)도 함께 확인
- 템플릿 월드 중에는 C를 누르면 일반 코드작성기 대신 튜토리얼 형태가 뜨는 것이 있음 → 이것을 직접 만들 수 있음


월드 속 튜토리얼: 칠판 안내문을 한글로
- The Agent Trials(에이전트 튜토리얼 맵): 칠판 안내문을 읽고 단계마다 에이전트를 발판에 올리는 월드
- 원래 쉬운 영어 → 어린 학생도 할 수 있게 선생님이 칠판 글을 직접 한글로 번역·의역한 맵(2017)
- 단계 구성: ① 앞으로 가기 → ② 여러 발판(돌기 조합) → ③ 위아래로 이동 → ④ 이동의 모든 것(흰색판 4개에 서면 타워에 불, 마지막은 황금판)
- 안내문에 쓸 명령 이름을 그대로 적어 줌(예: 'Teleport to the player'), 에이전트 방향에 주의하라는 힌트도 칠판에
- 코드작성기 튜토리얼(아래)과 함께 쓰면: 월드에는 칠판으로 과제, 코드작성기에는 단계별 힌트



튜토리얼 제작 도구 열기
- makecode.com/tutorial-tool 접속(MakeCode Tutorial Editor)
- 왼쪽 위 '편집기' 목록에서 Minecraft released 선택(기본값은 micro:bit, 목록에 Minecraft nether·Minecraft beta도 있음)
- 왼쪽에 마크다운으로 쓰고 Run → 오른쪽에 코드작성기에서 보일 모습 미리 보기
- 공유하기 →
https://minecraft.makecode.com/#tutorial:xxxxx-xxxxx-xxxxx-xxxxx형식 링크가 생김 → 복사해 월드에서 씀
- 다른 문법은 오른쪽 위 Tutorial Docs에서 확인


나만의 코드작성기 튜토리얼 만들기
- tutorial-tool에서 마크다운으로 작성
- 공유 버튼 → 튜토리얼 링크 복사
- NPC · education.json 으로 월드에서 열기
### @explicitHints 1
```template
player.onChat("시작", function () {})
에이전트 탐사 미션
단계 1
||Player:채팅명령어|| 블록에 설치 적기
~ tutorialhint
player.onChat("설치", function () {})
- 왼쪽 마크다운 → 오른쪽 코드작성기 화면(전구를 누르면 힌트)
- **# · ##**: 튜토리얼 제목 · 단계(페이지) / **template · blocks**: 미리 넣을 코드 · 쓸 블록과 힌트 / **@explicitHints**: 전구 버튼을 누를 때만 힌트 표시
<figure class="tp-fig"><img src="/topics/img/튜토리얼-만들기/v07_S201_1.webp" alt="마크다운 → 코드작성기 튜토리얼 화면" loading="lazy"><figcaption>마크다운 → 코드작성기 튜토리얼 화면</figcaption></figure>
예시 문서로 보는 template·blocks·힌트
```template
player.onChat("run", function () {
for (let index = 0; index < 4; index++) {
blocks.place(GRASS, pos(0, 0, 0))
}
})
player.say(":)")
player.onTravelled(WALK, function () {})
player.onChat("run", function () {})
agent.teleportToPlayer()
agent.move(FORWARD, 1)
agent.turn(LEFT_TURN)
mobs.spawn()
My Tutorial
Step 1
Step 1 instructions
추가
추가 설명입니다.
Step 2
Step 2 instructions
Step 3
You accomplished your project, good job!
player.onChat("탐사", function () {
agent.setAssist(DESTROY_OBSTACLES, true)
agent.move(DOWN, 5)
agent.move(FORWARD, 5)
agent.move(DOWN, 2)
agent.move(BACK, 3)
})
- **template**: 튜토리얼을 시작할 때 작업 영역에 미리 놓일 블록
- **맨 앞 blocks**: 도구 상자에 보일 블록 목록. `mobs.spawn()` 한 줄을 넣으면 '몹' 카테고리가 생김
- **#·##·###**: 제목 · 스텝 · 스텝 안 소제목과 설명(한국어 가능)
- **스텝 아래 blocks**: 그 스텝에서 전구를 누르면 나오는 힌트 코드(어느 스텝에나 넣을 수 있음)
<figure class="tp-fig"><img src="/topics/img/튜토리얼-만들기/yt_Jh4qSCy8kMg_00-03-44.webp" alt="예시 문서(왼쪽)와 미리보기(오른쪽) (03:44)" loading="lazy"><figcaption>예시 문서(왼쪽)와 미리보기(오른쪽) (03:44)</figcaption></figure>
교사용 메모 · 튜토리얼 제작 메모
- 튜토리얼 편집기의 블록 코드는 JavaScript 문법입니다. 코드작성기에서 블록으로 만든 뒤 JavaScript로 바꿔 복사하면 쉽습니다.
blocks코드 블록을 단계 위에 쓰면 그 단계에서 쓸 블록 목록, 단계 아래에 쓰면 힌트로 인식됩니다.||Player:텍스트||는 블록 색으로 글자를 강조합니다.- 영상(2022)의 예시 문서에는 블록 목록 칸에 아래 줄들이 더 있습니다(위 슬라이드에는 일부만 옮김):
agent.place(FORWARD),agent.destroy(FORWARD),agent.collectAll(),if(agent.inspect(AgentInspection.Block, FORWARD) == 0),if(agent.getPosition() == 0),if(agent.detect(AgentDetection.Block, FORWARD) == 0),agent.drop(FORWARD, 1, 1),while (false) {},if(true) {} else {},for (let index = 0; index < 4; index++) {},if(0 == 0),if(randint(0, 10) == 0),if(variable),if(blocks.blockByName("stone") == 0),if(blocks.blockById(0) == 0),blocks.place(GRASS, pos(0, 0, 0)),if(GRASS == 0). - 예시 문서의 각 칸 위에는
<!-- 코드작성기에 템플릿 코드를 작성할 수 있습니다. -->처럼 HTML 주석으로 설명이 달려 있습니다. 주석은 화면에 나오지 않습니다. - 몹 스폰 블록은 메이크코드 웹 편집기(minecraft.makecode.com)에서 블록을 JavaScript로 바꾼 뒤 필요한 부분(
mobs.spawn())만 남겨 붙여 넣었습니다.
월드를 열면 내 튜토리얼이 뜨게: defaulturi
- 튜토리얼이 뜨던 템플릿 월드의 폴더에서 education.json을 메모장 등으로 열기(가장 위 폴더가 가장 최근에 플레이한 월드)
"codebuilder"의"defaulturi"값을 지우고 내 튜토리얼 링크 넣기"commands"의"hiddenFromPlayer" : ["*"]에서*지우기(있으면 명령어가 하나도 안 먹음) → 저장- 고친 education.json을 내 월드 폴더에 복사 → 월드를 열고 C
- 튜토리얼에서 완료를 누르면 보통 코드작성기로 돌아가고, 다시 열어도 안 뜸 → 월드를 나갔다 들어오면 다시 뜸(게임 중에는 아래 NPC·커맨드 블록으로)
{
"codebuilder" : {
"canResize": true,
"defaulturi" : "https://minecraft.makecode.com/#tutorial:70606-52922-64928-99576"
},
"commands" : {
"hiddenFromPlayer" : ["*"]
}
}


게임 중에 불러오기: NPC 버튼·커맨드 블록
- NPC: 월드 빌더 권한을 얻고 NPC 대화 편집 → 고급 설정 → 명령 추가 → 버튼 모드, 버튼 이름 '튜토리얼 시작'
- NPC 명령:
execute as @initiator run codebuilder navigate @s false <튜토리얼 링크> - 끝 값: true = 코드작성기가 바로 열림 / false = C를 눌러야 열림
- 커맨드 블록: NPC가 아니므로 대상을 @p로 바꿔 레드스톤 블록으로 실행
- 버튼·커맨드 블록마다 다른 링크를 넣으면 튜토리얼 여러 개를 바꿔 가며 불러올 수 있음
- 예전 버전(영상 2022):
execute @initiator ~~~ codebuilder navigate @s false <링크>


교사용 메모 · 튜토리얼 불러오기 메모
- NPC 대신 커맨드 블록을 쓸 때는 대상을 @p로:
execute as @p run codebuilder navigate @s false <링크> - 노션 원문과 영상(2022)은 옛 문법
execute @initiator ~~~ codebuilder navigate @s false <링크>이고, 영상에서 커맨드 블록은 @initiator를 @p로 바꿔 썼습니다. 새 문법도 됩니다: 공식 명령 문서에서/execute … run의 뒤 명령 칸 형식이 codebuilderargs이고(2026-10 공식 문서 기준), 공식 Hour of AI(2025) 월드 함수도execute if score … run codebuilder navigate @s true <링크>처럼 새 문법으로 튜토리얼을 엽니다. - 영상의 순서: 튜토리얼 제목을 '불러온 튜토리얼입니다'로 바꿔 Run → 새 링크 복사 → NPC(이름 a) 소환 → 월드 빌더 권한을 얻어 대화 편집 → 명령 넣기 → 월드 빌더 권한을 없애고 NPC와 대화해 '튜토리얼 시작' → C를 누르면 불러온 튜토리얼이 보임. 버튼을 눌렀을 때는 아무 일도 없는 것 같지만 코드작성기 안에는 이미 불러와져 있습니다(false라서).
- 커맨드 블록에는 처음의 'My Tutorial' 링크를 넣어, 두 튜토리얼이 따로따로 불러와지는 것을 보여 줍니다.
education.json으로 월드에 튜토리얼·명령 제한 넣기
{
"commands": {
"hiddenFromPlayer": ["*", "!give"],
"hiddenFromAutomation": ["!setblock"]
},
"codebuilder": {
"defaulturi": "<튜토리얼 링크>",
"capabilities": { "agent": {
"permissions": {
"canModifyBlocks": true } } }
}
}
| 설정 | 하는 일 |
| codebuilder.defaulturi | 코드작성기를 열면 이 튜토리얼이 바로 뜸 |
| commands.hiddenFromPlayer | 학생이 못 쓰게 막을 명령(* 전부, ! 해제) |
| hiddenFromAutomation | 커맨드 블록·함수(.mcfunction)에서 막을 명령 |
| agent.permissions.canModifyBlocks | 모험 모드에서 에이전트가 블록 변경 |

특정 명령만 막기: give·gamemode
- 증상: 치트·명령 허용이 켜져 있는데 명령어가 하나도 안 되고 월드 빌더도 안 됨(클래스룸 모드 연결과 코드작성기만 됨)
- 원인: 월드 폴더 education.json의
"hiddenFromPlayer" : ["*"]—*는 모든 명령 - 고치기: 메모장으로 열어
["give","gamemode"]로 바꾸고 저장 → 월드를 나갔다 다시 들어와야 적용 - 결과: /tp·월드 빌더는 되고 /give·/gamemode는 '알 수 없는 명령어'
- 다른 월드에: education.json을 복사해 넣으면 같은 설정이 적용.
"codebuilder"부분은 지워야 코드작성기를 그대로 씀 - 교육용 에디션에서만 작동(베드락 에디션은 해당 없음)
{
"commands" : {
"hiddenFromPlayer" : ["give","gamemode"]
}
}



교사용 메모 · education.json 메모
- “*”는 모든 명령 금지, 명령 앞의 “!”는 금지 해제. defaulturi는 게임 안에서 다른 튜토리얼을 불러오면 그것으로 바뀝니다.
- canModifyBlocks는 모험 모드에서 에이전트가 블록을 바꿀 수 있게 하는 설정(거부 블록 등으로 보호된 곳은 해당 없음). disableLegacyTitleBar로 코드작성기 모양도 바꿀 수 있습니다.
- 영상(02:55)에 나온 다른 교육용 월드의 실제 education.json:
"hiddenFromPlayer" : ["*"],"hiddenFromAutomation": ["!setblock","!agent","!replaceitem","!give","!execute","!function"],"defaulturi":"https://minecraft.makecode.com/hoc2021?ingame=1&ipc=1&norunonx=1#tutorial:/hour-of-code/2021/no-code","disableLegacyTitleBar": true,"capabilities": {"agent":{"permissions":{"canModifyBlocks": true}}}. 영상은 hiddenFromAutomation이 커맨드 블록·MC 펑션 파일로 실행되는 명령을 막는다고만 설명합니다. - 튜토리얼이 뜨던 템플릿 월드의 처음 education.json:
"canResize": true,"defaulturi" : "https://minecraft.makecode.com/?ingame=1&ipc=1&noRunOnX=1#tutorial:/hour-of-code/no-coding","hiddenFromPlayer" : ["*"]. - GitHub 배포: 저장소 루트에 .md 파일을 두고 주소에서 .md를 뺍니다. 하위 폴더는 안 되고, 수정 반영까지 15~30분 걸릴 수 있습니다.
- 노션 원문은 2022년 10월 기준입니다. defaulturi로 튜토리얼 띄우기는 2025-12·2026-04 영상에서도 그대로 동작(영상 확인: KOX5f6nCUZY 1:03, YOV0R2O5KDg 1:02). hiddenFromPlayer의 “*”(모든 명령 금지)와 특정 명령(give·gamemode) 금지, hiddenFromAutomation(커맨드 블록·함수 대상)도 영상 확인(UpczQ675Da8 1:33) — 이 기능은 교육용 에디션 전용. “!”를 붙인 값과 canModifyBlocks·disableLegacyTitleBar는 영상(02:55)의 실제 파일에 들어 있지만 영상에서 뜻을 설명하지는 않습니다. “!” 해제와 canModifyBlocks의 뜻은 노션 원문의 설명이고 공식 문서에는 education.json 설명이 없습니다(2026-10 검색) → 학생 월드에 쓰기 전에 교사 월드에서 한 번 시험해 보세요.
- education.json 템플릿 파일은 노션 「Makecode Tutorial 과제 제작법」 페이지에 첨부되어 있습니다.
수업 팁
- 학생 월드에 넣기 전에 월드 폴더를 백업하고, 교사가 먼저 튜토리얼을 끝까지 해 보기
- 차시마다 다른 튜토리얼 링크를 NPC 버튼에 연결 → NPC와 대화하며 단계별 코딩 미션 (제안)
- 활동 규칙을 깨는 명령(/give, /gamemode)만 막고 필요한 명령은 열어 두기
- 심화반: 학생이 직접 튜토리얼을 만들어 친구에게 링크로 공유 (제안)
- 어린 학생에게는 칠판 안내문을 한글로 옮겨 주기