02회차 시작: 변수 복구
1회차와 다른 날이면 터미널을 새로 열었으므로 변수가 비어 있다. 작업 폴더로 이동해 변수 파일을 불러온다.
cd ~/gh-pm-lab source pm-lab/env.sh echo "$PM_REPO / Project $PM_PROJECT / $PM_POLICY_URL" gh auth status
gildong/launchpad-pm-lab / Project 3 / https://github.com/gildong/launchpad-pm-lab/issues/1
값 중 하나라도 비어 있으면 실습 1의 변수 복구 도구로 pm-lab/env.sh를 다시 만들고, PM_POLICY_URL은 awk -F'\t' '$1=="LP-01"{print $3}' pm-lab/backlog-map.tsv로 찾는다.
1Project 값 바꾸기
LP-01의 담당자가 작업을 시작했다고 가정한다. 이 과정의 규칙에서 Status를 In Progress로 바꾸는 사람은 실행 담당자다.
gh project item-edit "$PM_PROJECT" --owner "$PM_OWNER" \ --url "$PM_POLICY_URL" --field Status --value "In Progress" gh project item-edit "$PM_PROJECT" --owner "$PM_OWNER" \ --url "$PM_POLICY_URL" --field "Target date" --date 2026-10-14
Edited item "[LP-01] 사전신청 정책을 확정한다" Edited item "[LP-01] 사전신청 정책을 확정한다"
| 옵션 | 뜻 |
|---|---|
"$PM_PROJECT" --owner "$PM_OWNER" | 어느 Project인가. 번호와 소유자를 함께 쓴다. |
--url | 어느 업무인가. Project 주소가 아니라 이슈 주소를 쓴다. |
--field | 어느 필드인가. 대소문자는 구분하지 않지만 공백은 정확히 같아야 한다. |
--value | 선택지 필드(Status, Priority)와 텍스트·숫자·날짜 필드의 새 값. |
--date | 날짜 필드 전용 옵션. YYYY-MM-DD 형식이다. |
한 번의 명령은 필드 하나만 바꾼다. Status와 Priority를 함께 바꾸려면 명령을 두 번 실행한다. Iteration은 이 방식으로 바꿀 수 없으며, 웹 화면에서 바꾼다.
진행 댓글
상태 값만 바꾸면 무엇이 진행 중인지는 남지 않는다. 댓글에 지금 하는 일과 다음 확인일을 적는다.
gh issue comment "$PM_POLICY_URL" \ --body "중복 신청 처리 정책을 검토 중이다. 다음 확인일은 10월 14일이다."
Target date는 이 Project에서 정한 개별 업무의 목표일이며, 마일스톤의 출시 마감일과는 별개의 값이다.
2회의 전 세 질문
# 질문 1. 이번 스프린트에서 아직 열린 일 gh project item-list "$PM_PROJECT" --owner "$PM_OWNER" --limit 100 \ --query 'iteration:"Sprint 1" is:issue is:open' \ --field Status --field Priority # 질문 2. 담당자가 없는 열린 일 gh project item-list "$PM_PROJECT" --owner "$PM_OWNER" --limit 100 \ --query 'is:issue is:open no:assignee' # 질문 3. 막힌 일 gh issue list -R "$PM_REPO" --state open --label blocked --limit 100 # 참고. 출시 목표에 남은 일 gh issue list -R "$PM_REPO" --state open --milestone "$PM_MILESTONE" --limit 100
TYPE TITLE NUMBER ... STATUS PRIORITY Issue [LP-01] 사전신청 정책을 확정한다 1 ... In Progress P0 Issue [LP-02] 랜딩 페이지에서 서비스 안내와... 2 ... Todo P1 Issue [LP-03] 방문자가 이메일로 사전신청을... 3 ... Todo P0 Project 3 for owner gildong has no items no issues match your search in gildong/launchpad-pm-lab
질문 2는 모든 업무에 담당자가 있으므로 “has no items”가 나온다. 질문 3도 아직 막힌 일이 없으므로 “no issues match your search”가 나온다. 결과가 없다는 것도 회의 전에 확인한 사실이다.
두 가지 검색 문법
item-list --query는 Project 필터 문법을, gh issue list --search는 이슈 검색 문법을 쓴다. 겹치는 부분이 있지만 같은 문자열을 서로 바꾸어 쓸 수 있다고 가정하지 않는다.
| 알고 싶은 것 | Project 필터 --query | 이슈 검색 --search |
|---|---|---|
| 스프린트 | iteration:"Sprint 1" | 없음 |
| Status, Priority | status:"In Progress", priority:P0 | 없음 |
| 완료 제외 | -status:Done | 없음 (--state open으로 열린 이슈만) |
| 담당자 없음 | no:assignee | no:assignee |
| 라벨 | label:blocked | label:blocked 또는 --label blocked |
| 오래 갱신되지 않음 | 없음 | updated:<2026-10-10 |
조회 기본 개수는 30개다. 전체 업무가 30개를 넘으면 결과가 잘리므로 이 교안은 항상 --limit 100을 붙인다. 100개를 넘는 Project에서는 결과 줄 수와 웹 화면의 항목 수를 대조한다.
3조회 명령을 파일로 저장
매주 같은 명령을 입력하지 않도록 세 질문을 파일 하나에 저장한다. 파일 첫 줄에서 변수 파일을 불러오므로 새 터미널에서도 바로 실행된다.
cat > pm-lab/precheck.sh <<'EOF'
# 회의 전 세 질문. 작업 폴더에서 실행한다: bash pm-lab/precheck.sh "Sprint 1"
source pm-lab/env.sh
SPRINT=${1:-Sprint 1}
echo "## 1. $SPRINT 에서 열린 일"
gh project item-list "$PM_PROJECT" --owner "$PM_OWNER" --limit 100 \
--query "iteration:\"$SPRINT\" is:issue is:open" --field Status --field Priority
echo "## 2. 담당자가 없는 열린 일"
gh project item-list "$PM_PROJECT" --owner "$PM_OWNER" --limit 100 \
--query 'is:issue is:open no:assignee'
echo "## 3. 막힌 일"
gh issue list -R "$PM_REPO" --state open --label blocked --limit 100
EOF
bash pm-lab/precheck.sh "Sprint 1"
결과가 없는 질문에서는 gh가 오류 상태로 끝나지만, 다음 질문은 이어서 실행된다.
- Sprint 1 보드에서 LP-01이 In Progress 열에 있다.
- LP-01에 진행 댓글이 있다.
- 질문 1의 결과에 STATUS와 PRIORITY 열이 보인다.
bash pm-lab/precheck.sh "Sprint 1"이 세 절을 모두 출력한다.--query와--search중 스프린트로 거를 수 있는 쪽을 말할 수 있다.
막히면
| 증상 | 확인과 해결 |
|---|---|
unknown flag: --field | gh가 2.97.0보다 낮다. 수업 전 준비의 업그레이드 명령을 실행한다. |
field "Satus" not found in project; available fields: ... | 필드 이름이 틀렸다. 오류 메시지 끝의 목록에서 실제 이름을 확인한다. |
option "InProgress" not found on field "Status"; available options: ... | 선택지 이름이 틀렸다. 공백까지 같게 "In Progress"로 쓴다. |
error: no changes to make | --value나 --date가 빠졌다. |
Project 3 for owner gildong has no items | --query 조건에 맞는 항목이 없다. 따옴표, 스프린트 이름을 확인한다. |
마치며...
LP-01의 Status와 목표일을 명령으로 바꾸고 진행 댓글을 남겼으며, 회의 전 세 질문을 한 번에 조회하는 pm-lab/precheck.sh를 만들었다. 실습 8에서는 세 번째 질문인 막힌 일을 원인과 함께 기록한다.