매일 반복되는 개발 환경 셋업을 shell function 하나로
여러 프로젝트를 동시에 진행하다 보면 매번 똑같은 작업을 반복하게 된다. 터미널을 열고, 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
적용 방법
~/.zshrc파일을 열어서 위 function을 추가한다.- 터미널에서
source ~/.zshrc를 실행하거나, 새 터미널 탭을 연다. - 이제
dev [프로젝트명]으로 프로젝트를 열 수 있다.
왜 이렇게 쓰는가
alias로도 비슷하게 만들 수 있지만, function을 쓰는 이유는 유연성 때문이다. case 문으로 여러 프로젝트를 관리하기 쉽고, 나중에 추가 로직(예: Git 상태 확인, 환경변수 설정 등)을 넣기도 편하다.
Cursor와 Claude Code를 함께 쓰는 이유는 간단하다. Claude Code가 코드를 작성하면 Cursor에서 바로 확인하고 수정할 수 있다. 두 도구가 같은 프로젝트 디렉토리를 보고 있으니 워크플로우가 자연스럽게 이어진다.
마치며
개발자가 하루에 반복하는 작업 중 상당수는 자동화할 수 있다. 이런 작은 개선들이 쌓이면 실제로 코딩에 집중할 수 있는 시간이 늘어난다.
dev blog 한 번으로 모든 게 준비되는 환경, 꽤 괜찮지 않은가.