Takafumi Horiuchi

Practice Log n Share

개요

연습할 때는 한 번 탭해 기록하고, 레슨에서는 그 화면을 그대로 선생님께 보여 준다. 색소폰을 배우는 나 자신을 위해 iPhone 앱을 기획·디자인하고 AI와 협업해 구현했다.

기록 화면. 위에는 연습 기록 격자, 아래에는 오늘의 막대(총 54분)와 카테고리 카드가 있다. ‘곡 연습’은 27분을 넘겨 측정 중이며 밝은 색과 흰 테두리로 표시된다. 공유 화면. 9월 17일 레슨일부터 24일까지 총 4시간 38분을 집계하고, 카테고리별 막대그래프와 가로 스크롤 없이 모든 카테고리를 볼 수 있는 일별 표를 표시한다.
왼쪽은 기록, 오른쪽은 공유. 카테고리를 탭해 시간을 측정하고, 레슨에서는 그동안의 연습을 모아 보여 준다. 화면은 설명을 위한 가상 데이터다. 스크린샷은 원본 앱의 일본어 화면이다.
역할
기획, UX/UI 디자인, 구현(Claude Code·Codex와 협업)
기간
2026년 9월
기술
React · TypeScript; Swift (WKWebView, Live Activity, StoreKit, iCloud)

계기 — “연습은 어때요?”라는 질문에, 답할 수 없었다

격주 레슨에서 “스케일을 많이 했어요”라고 답해도 무엇을 얼마나 연습했는지는 전해지지 않는다. 악기를 목에 건 채 종이 일지를 쓰기는 어려웠고, 사용해 본 시간 기록 앱은 혼자 돌아보기 위한 도구였다.

두 레슨일 사이에 연습한 날의 막대와 쉰 날이 나란히 놓여 있다. 일별 카테고리 시간을 아래의 막대 하나로 합치면 총 10시간 06분이 된다.
위쪽 막대는 매일의 연습, 빨간 테두리는 레슨일이다. 레슨에서는 그사이의 연습을 모아 보여 준다. 날짜와 시간은 설명용 가상 데이터이며 위아래 막대의 총시간은 같다.

기록 — 악기를 든 채, 한 번의 탭으로

연습 중에는 카테고리 카드만 만진다. 탭하면 측정이 시작되고, 다른 카드를 누르면 전환되며, 같은 카드를 다시 누르면 멈춘다.

기록 화면. 위에는 연습 기록 격자, 아래에는 오늘의 막대(총 54분)와 카테고리 카드가 있다. ‘곡 연습’은 27분을 넘겨 측정 중이며 밝은 색과 흰 테두리로 표시된다.
1 누적 기록
지금까지의 연습. 앱을 열면 가장 먼저 보인다.
2 오늘
연습 순서와 시간 배분. 한 시간이면 가득 찬다.
3 측정 중
이 카드만 밝게 하고 흰 테두리로 표시한다.
4 카드
탭으로 전환. 오늘의 시간은 크게 표시한다.

하루 — 한 번 채운 막대는, 채워진 채로

오늘의 막대는 한 시간이면 가득 찬다. 한 시간을 넘기면 그 시점의 합계를 오른쪽 끝으로 삼아, 이미 채운 막대에 빈 공간이 다시 생기지 않도록 했다.

오늘의 연습 — 1시간 05분

채택

미채택

65분 연습했을 때의 비교. 위는 합계를 오른쪽 끝으로 삼는 채택안(최소 한 시간), 아래는 눈금을 60→90→120분으로 늘리는 미채택안이다. 한 시간을 넘기는 순간, 아래 막대에만 빈 공간이 다시 나타난다.

쌓임 — 시작한 날부터, 모두 보이도록

연습한 날은 녹색의 진하기로, 레슨일은 빨간 테두리로 표시하며, 가로로 이동해 기록을 시작한 날까지 돌아갈 수 있다. 가벼운 렌더링보다 여러 해의 연습을 모두 살펴볼 수 있는 것을 우선했다.

연습 기록 격자. 6월부터 9월까지의 연습량을 녹색의 진하기로 나타내고 격주 레슨일에 빨간 테두리를 표시한다.
0분, 30분 미만, 60분 미만, 90분 미만, 90분 이상의 다섯 단계. 앱을 열면 이 누적 기록이 가장 먼저 보인다.

공유 — 레슨을 시작하며, 한눈에 전해지는 한 화면

지난 레슨일부터 오늘까지를 카테고리별 합계와 일별 내역으로 정리해 그대로 선생님께 보여 준다. 일별 표는 글자를 줄이더라도 모든 카테고리를 한 화면에 넣어 가로 스크롤을 없앴다.

변화 — 카드를, 연습의 조작판으로

AI와 대화하며 정리한 명세서로 화면을 만들고, 직접 써 보며 고치기를 반복했다. 초기 웹 버전에서 기록과 공유의 형태를 탐색한 뒤 iPhone에서 쓸 앱으로 구현했다.

9월 9일의 초기 버전. 작은 카테고리 카드 여섯 개와 오늘의 합계 40분이 서로 다른 영역에 놓인 기록 화면.

9월 9일
초기 버전

9월 21일의 웹 버전. 카테고리와 오늘의 시간을 큰 카드 하나로 묶고, 측정 중인 악보 읽기 10분을 밝게 표시한 기록 화면.

9월 21일
웹 버전

기록 화면. 위에는 연습 기록 격자, 아래에는 오늘의 막대(총 54분)와 카테고리 카드가 있다. ‘곡 연습’은 27분을 넘겨 측정 중이며 밝은 색과 흰 테두리로 표시된다.

9월 24일
iOS 1.0

초기 버전과 웹 버전은 같은 가상 데이터(카테고리 여섯 개, 오늘 총 40분)를 쓴다. iOS 1.0은 별도의 가상 데이터다.
이름과 시간을 함께
카드에 오늘의 시간을 크게 표시해 무엇을 얼마나 연습했는지 연결했다.
현재 상태를 한눈에
측정 중인 카드만 밝게 하고 나머지는 어둡게 했다.
조작 범위를 화면 안에
카드 한 줄이 화면 안에 들어오는 위치에서 스크롤이 멈추도록 했다.

마지막 단계에서는 Claude Code가 잠재적 문제를 제시하고, Codex가 검증·수정하며, 내가 채택 여부를 결정하는 과정을 약 15회 반복했다.

손맛 — 멈추는 방식은, 직접 써 보고 고른다

“부드럽게 움직이다 딱 멈추는” 느낌은 말로 요청하는 것만으로는 만들 수 없었다. 방식과 값을 즉시 바꾸는 조정 도구를 AI와 만들고, 실제 기기에서 다섯 방식을 비교해 브라우저 기본 스냅을 골랐다.

험프형

험프형의 실제 기기 조작 다섯 건. 가로축은 손가락을 뗀 뒤 0–1200밀리초, 세로축은 스냅 위치로부터의 거리다. 점선 0은 스냅 위치이고, 각 선 끝의 점은 마지막 측정 위치다.

착지점 예측형

착지점 예측형의 실제 기기 조작 다섯 건. 가로축은 손가락을 뗀 뒤 0–1200밀리초, 세로축은 스냅 위치로부터의 거리다. 점선 0은 스냅 위치이고, 각 선 끝의 점은 마지막 측정 위치다.

브라우저 기본 proximity
채택

브라우저 기본 proximity의 실제 기기 조작 다섯 건. 가로축은 손가락을 뗀 뒤 0–1200밀리초, 세로축은 스냅 위치로부터의 거리다. 점선 0은 스냅 위치이고, 각 선 끝의 점은 마지막 측정 위치다.

브라우저 기본 mandatory

브라우저 기본 mandatory의 실제 기기 조작 다섯 건. 가로축은 손가락을 뗀 뒤 0–1200밀리초, 세로축은 스냅 위치로부터의 거리다. 점선 0은 스냅 위치이고, 각 선 끝의 점은 마지막 측정 위치다.

스냅 없음

스냅 없음의 실제 기기 조작 다섯 건. 가로축은 손가락을 뗀 뒤 0–1200밀리초, 세로축은 스냅 위치로부터의 거리다. 점선 0은 스냅 위치이고, 각 선 끝의 점은 마지막 측정 위치다.
손가락을 뗀 뒤의 위치를 같은 축척으로 비교했다. 점선 0이 스냅 위치다. 실제 기기 로그에서 직전 60 ms의 위치로 계산한 속도가 0.6–1.8 px/ms인 조작 중 1.2 px/ms에 가까운 순서로 각 방식마다 다섯 건씩 골랐다. 각 조작의 설정·시작 위치·방향은 서로 다르다.
스크롤 조정 도구. 다섯 스냅 방식의 전환 항목과 매개변수 옆에 조작감을 시험하는 스마트폰 화면이 놓여 있다.
스크롤 거리와 속도를 기록하며 실제 기기에서 멈추는 방식을 비교했다. 이미지를 열면 확대할 수 있다.

제품으로서 — 연습 너머까지

외관은 기기 설정에 맞춰 바뀐다. 연습 기록은 기기 안에 저장하고 iCloud에 자동으로 백업한다.

라이트 모드. 기록 화면. 위에는 연습 기록 격자, 아래에는 오늘의 막대(총 54분)와 카테고리 카드가 있다. ‘곡 연습’은 27분을 넘겨 측정 중이며 밝은 색과 흰 테두리로 표시된다.다크 모드. 기록 화면. 위에는 연습 기록 격자, 아래에는 오늘의 막대(총 54분)와 카테고리 카드가 있다. ‘곡 연습’은 27분을 넘겨 측정 중이며 밝은 색과 흰 테두리로 표시된다.
같은 기록 화면의 라이트 모드와 다크 모드.
연습 대상에 맞춰 고를 수 있는 테마 아이콘 109개. 악기, 운동, 학습, 그림, 수공예, 표현 활동 순으로 배열되어 있다.
연습 대상에 맞춰 앱 헤더의 아이콘을 고를 수 있다. 음악 47개, 운동 15개, 언어·학습 15개, 미술 11개, 만들기·생활 14개, 표현 7개. 색소폰은 Qlementine Icons(MIT License)를 바탕으로 했다.

사용해 보니 — 다음 질문은, 얼마나 자세히 남길 것인가

매일 아침 연습에 쓰고 레슨에서 선생님께 화면을 보여 드렸다. 연습 내용이 한눈에 보인다는 반응과, 스케일 종류까지 기록하면 더 유용하겠다는 의견을 받았다(요지). 간편함을 유지하면서 자세히 남길 수 있도록 카테고리 아래에 한 단계를 더 두는 것을 검토하고 있다.

자료

웹 데모에서 기록과 공유를 직접 사용해 볼 수 있다. 2026년 9월 20일 기준 나의 실제 연습 기록이 수록되어 있으며, 조작 결과는 현재 사용하는 브라우저에만 저장된다.

  1. 1쪽. 표지: 레슨 선생님께 연습 상황을 공유하기 위한 기록 앱 개발. 호리우치 다카후미.
  2. 2쪽. 개요: 연습을 기록하는 Log와 선생님께 상황을 공유하는 Share. 담당 범위, 제작 기간, 사용 도구.
  3. 3쪽. 배경: 색소폰 연습 상황을 선생님께 정확히 전하고 싶은 마음. 종이 연습 일지와 기존 앱의 문제.
  4. 4쪽. 접근: 한 번의 탭으로 기록하고 즉시 전달하는 시각화. 하루와 월·년이라는 두 시간 축으로 연습의 축적을 보여 준다.
  5. 5쪽. AI를 활용한 네 장면: 조사, 기본 구현, 조작감 조정 보조 도구 개발, 구현 최적화.
  6. 6쪽. AI와의 협업: 기존 앱 조사와 대화를 통한 콘셉트 구체화.
  7. 7쪽. 기본 구현: AI가 생성한 초판 V0와 레이아웃·색상 피드백을 반복한 수정판 V1의 비교.
  8. 8쪽. 조작감 조정: 스크롤 속도와 멈추는 방식을 직접 비교하려고 AI와 보조 도구를 개발.
  9. 9쪽. 구현 최적화: Claude Code의 잠재적 문제 제시와 Codex의 검증·수정을 반복하고 사람이 판단하는 과정.
  10. 10쪽. 성과와 향후: 자신의 연습에서 사용, 선생님의 피드백, 자세한 기록을 위한 하위 카테고리 검토.
가로로 스크롤해 넘기고 클릭하거나 탭해 확대할 수 있다. 원본 슬라이드는 일본어다.

제작 자료 PDF 열기(일본어, 4.4 MB)