매일 반복되는 개발 환경 셋업을 shell function 하나로

English (N/A)

여러 프로젝트를 동시에 진행하다 보면 매번 똑같은 작업을 반복하게 된다. 터미널을 열고, cd로 프로젝트 디렉토리로 이동하고, cursor .로 에디터를 켜고, claude로 Claude Code를 실행하고... 하루에 몇 번씩 반복하다 보면 이것도 제법 귀찮아진다.

문제: 매번 똑같은 명령어 치기

내 경우 보통 Claude Code로 작업을 시키고, Cursor로 결과를 검토하는 방식으로 일한다. 두 도구를 함께 쓰는 게 워크플로우에 딱 맞는데, 문제는 프로젝트를 열 때마다 이 셋업 과정을 반복해야 한다는 것이다.

cd ~/projects/my-blog
cursor . &
claude

한두 번이면 모르겠는데, 여러 프로젝트를 오가며 작업하다 보면 하루에도 수십 번씩 이런 명령어를 친다. 자동화할 때가 됐다.

해결: shell function으로 한 방에 해결

~/.zshrc에 간단한 function을 추가하면 된다.

# Dev function: Open project with Cursor and Claude Code
function dev() {
  case "$1" in
    blog) cd ~/projects/my-blog ;;
    api) cd ~/projects/api-server ;;
    app) cd ~/projects/mobile-app ;;
    *) echo "Unknown project: $1" && return 1 ;;
  esac
  cursor . &
  claude
}

이제 터미널에서 dev blog만 치면 블로그 프로젝트 디렉토리로 이동하고, Cursor와 Claude Code가 동시에 실행된다.

어떻게 작동하는가

case 문으로 프로젝트 구분

프로젝트 이름을 인자로 받아서 해당하는 디렉토리로 이동한다. 새 프로젝트를 추가하고 싶다면 case 문에 한 줄만 추가하면 된다.

newproject) cd ~/projects/newproject ;;

백그라운드 실행 (&)

cursor . &에서 &는 Cursor를 백그라운드로 실행한다는 의미다. 이게 없으면 Cursor가 실행되는 동안 터미널이 멈춰서 Claude Code를 실행할 수 없다.

에러 처리

등록되지 않은 프로젝트 이름을 입력하면 에러 메시지를 출력하고 종료한다.

$ dev unknown-project
Unknown project: unknown-project

적용 방법

  1. ~/.zshrc 파일을 열어서 위 function을 추가한다.
  2. 터미널에서 source ~/.zshrc를 실행하거나, 새 터미널 탭을 연다.
  3. 이제 dev [프로젝트명]으로 프로젝트를 열 수 있다.

왜 이렇게 쓰는가

alias로도 비슷하게 만들 수 있지만, function을 쓰는 이유는 유연성 때문이다. case 문으로 여러 프로젝트를 관리하기 쉽고, 나중에 추가 로직(예: Git 상태 확인, 환경변수 설정 등)을 넣기도 편하다.

Cursor와 Claude Code를 함께 쓰는 이유는 간단하다. Claude Code가 코드를 작성하면 Cursor에서 바로 확인하고 수정할 수 있다. 두 도구가 같은 프로젝트 디렉토리를 보고 있으니 워크플로우가 자연스럽게 이어진다.

마치며

개발자가 하루에 반복하는 작업 중 상당수는 자동화할 수 있다. 이런 작은 개선들이 쌓이면 실제로 코딩에 집중할 수 있는 시간이 늘어난다.

dev blog 한 번으로 모든 게 준비되는 환경, 꽤 괜찮지 않은가.