스티브코딩

튜토리얼 만들기

코드작성기 튜토리얼을 만들어 education.json·NPC로 월드에 넣고 명령 제한하기

도구·명령어2026-10-20 갱신

한눈에 보기

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

코딩 대결 월드와 코드작성기 튜토리얼

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

월드 속 튜토리얼: 칠판 안내문을 한글로

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

튜토리얼 제작 도구 열기

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

나만의 코드작성기 튜토리얼 만들기

  1. tutorial-tool에서 마크다운으로 작성
  2. 공유 버튼 → 튜토리얼 링크 복사
  3. 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

  1. 튜토리얼이 뜨던 템플릿 월드의 폴더에서 education.json을 메모장 등으로 열기(가장 위 폴더가 가장 최근에 플레이한 월드)
  2. "codebuilder"의 "defaulturi" 값을 지우고 내 튜토리얼 링크 넣기
  3. "commands"의 "hiddenFromPlayer" : ["*"]에서 * 지우기(있으면 명령어가 하나도 안 먹음) → 저장
  4. 고친 education.json을 내 월드 폴더에 복사 → 월드를 열고 C
  • 튜토리얼에서 완료를 누르면 보통 코드작성기로 돌아가고, 다시 열어도 안 뜸 → 월드를 나갔다 들어오면 다시 뜸(게임 중에는 아래 NPC·커맨드 블록으로)
{
    "codebuilder" : {
        "canResize": true,
        "defaulturi" : "https://minecraft.makecode.com/#tutorial:70606-52922-64928-99576"
    },
    "commands" : {
        "hiddenFromPlayer" : ["*"]
    }
}
① defaulturi를 내 튜토리얼 링크로 바꾸고 * 지우기 (05:48)
① defaulturi를 내 튜토리얼 링크로 바꾸고 * 지우기 (05:48)
② 내 월드에서 C를 누르면 My Tutorial이 뜸 (06:19)
② 내 월드에서 C를 누르면 My Tutorial이 뜸 (06:19)

게임 중에 불러오기: 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 고급 설정에 명령과 '튜토리얼 시작' 버튼 (07:39)
① NPC 고급 설정에 명령과 '튜토리얼 시작' 버튼 (07:39)
② 커맨드 블록에 명령 붙여 넣기(이후 @p로 바꿈) (08:33)
② 커맨드 블록에 명령 붙여 넣기(이후 @p로 바꿈) (08:33)
교사용 메모 · 튜토리얼 불러오기 메모
  • 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 모험 모드에서 에이전트가 블록 변경
- **GitHub로 배포하면**: 주소 형식 `…makecode.com/#tutorial:github:사용자/저장소/파일명`
다른 교육용 월드의 education.json(bridge.로 연 화면) (02:55)
다른 교육용 월드의 education.json(bridge.로 연 화면) (02:55)

특정 명령만 막기: give·gamemode

  • 증상: 치트·명령 허용이 켜져 있는데 명령어가 하나도 안 되고 월드 빌더도 안 됨(클래스룸 모드 연결과 코드작성기만 됨)
  • 원인: 월드 폴더 education.json의 "hiddenFromPlayer" : ["*"] — *는 모든 명령
  • 고치기: 메모장으로 열어 ["give","gamemode"]로 바꾸고 저장 → 월드를 나갔다 다시 들어와야 적용
  • 결과: /tp·월드 빌더는 되고 /give·/gamemode는 '알 수 없는 명령어'
  • 다른 월드에: education.json을 복사해 넣으면 같은 설정이 적용. "codebuilder" 부분은 지워야 코드작성기를 그대로 씀
  • 교육용 에디션에서만 작동(베드락 에디션은 해당 없음)
{
    "commands" : {
        "hiddenFromPlayer" : ["give","gamemode"]
    }
}
① 치트·명령 허용이 켜져 있어도 명령이 안 됨 (00:29)
① 치트·명령 허용이 켜져 있어도 명령이 안 됨 (00:29)
② hiddenFromPlayer를 give·gamemode로 바꿈 (01:56)
② hiddenFromPlayer를 give·gamemode로 바꿈 (01:56)
③ 다시 들어가 /g를 치면 give가 목록에 없음 (02:25)
③ 다시 들어가 /g를 치면 give가 목록에 없음 (02:25)
교사용 메모 · 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)만 막고 필요한 명령은 열어 두기
  • 심화반: 학생이 직접 튜토리얼을 만들어 친구에게 링크로 공유 (제안)
  • 어린 학생에게는 칠판 안내문을 한글로 옮겨 주기

관련 영상

관련 공식 자료

함께 보기

출처

  • 유튜브 「메이크코드 튜토리얼 프로젝트 만들어 마인크래프트로 불러오기」(2022-10-17)
  • 유튜브 「명령어 실행 금지! 교육용 에디션 월드의 비밀
  • 유튜브 「마크 에듀케이션 에디션 코드빌더 #12 튜토리얼 플레이