Add VSCode, Claude Code CLI auto-install and fix bugs

- Add VSCode (brew cask), Node.js, Claude Code CLI (npm) installation
- Add VSCode Claude extension auto-install with code CLI fallback
- Fix save_configs.sh missing RECTANGLE_SETTINGS_DIR variable
- Fix Rectangle config: support both plist and JSON (RectangleConfig.json)
- Fix ZSH plugin paths for Intel Mac using $(brew --prefix)
- Fix iTerm2 Dynamic Profile JSON assembly (safe wrapping)
- Fix GUID extraction regex for flexible whitespace
- Fix set -e compatibility for plutil failure handling
- Add mkdir -p for Stats settings dir in save_configs.sh
- Add vim swap file patterns to .gitignore
- Update README.md with Claude Code docs, checklist, troubleshooting
- Simplify iTerm2 launch logic

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
csbae-macbook
2026-03-04 13:55:55 +09:00
co-authored by Claude Opus 4.6
parent 443d65d912
commit 51cde642d9
4 changed files with 168 additions and 74 deletions
+3
View File
@@ -14,6 +14,9 @@
# Editor
.vscode/
.idea/
*.swp
*.swo
*~
# Personal configs (if needed)
# personal-settings/
+50 -15
View File
@@ -4,19 +4,21 @@ Mac 개발 환경을 자동으로 설정하는 스크립트입니다.
## 📦 설치 항목
### 개발 도구
- Homebrew
- Node.js
- iTerm2
- Oh My Zsh (agnoster 멀티라인 테마)
- zsh-syntax-highlighting / zsh-autosuggestions
- **VSCode** + Claude 확장
- **Claude Code CLI**
- Cursor (에디터)
### 유틸리티
- **Stats**: 시스템 모니터 (CPU, Memory, Network 등)
- **Rectangle**: 윈도우 관리 (무료 Magnet 대안)
- **AppCleaner**: 앱 완전 삭제 도구
### 개발 도구
- Homebrew
- iTerm2
- Oh My Zsh
- zsh-syntax-highlighting
- zsh-autosuggestions
- Cursor (에디터)
### 폰트
- D2Coding
- D2Coding Nerd Font
@@ -62,13 +64,14 @@ chmod +x setup_mac.sh
setup_mac/
├── setup_mac.sh # 메인 설치 스크립트
├── save_configs.sh # 설정 저장 스크립트
├── .gitignore
├── iterm2-settings/
│ └── profile.json # iTerm2 프로파일
├── stats-settings/
│ └── Stats.plist # Stats 설정
├── rectangle-settings/
│ └── com.knollsoft.Rectangle.plist
└── README.md # 이 파일
│ └── RectangleConfig.json # Rectangle 설정
└── README.md
```
## ⚙️ 설정 내용
@@ -84,6 +87,11 @@ setup_mac/
- **테마**: agnoster (멀티라인)
- **플러그인**: syntax-highlighting, autosuggestions
### Claude Code
- **CLI**: `npm install -g @anthropic-ai/claude-code` 로 자동 설치
- **VSCode 확장**: `code --install-extension` 으로 자동 설치
- 최초 실행 시 Anthropic API 키 설정 필요
### Stats 설정
- 자동으로 사용자 정의 설정 적용
- 메뉴바 위젯 자동 구성
@@ -154,6 +162,11 @@ git push
- [ ] Syntax highlighting 작동 확인
- [ ] Autosuggestions 작동 확인
### Claude Code 확인
- [ ] `claude --version` → 버전 출력 확인
- [ ] `claude` → 최초 실행 시 API 키 설정
- [ ] VSCode Extensions (⌘⇧X) → Claude 확장 설치 확인
## 🛠️ 문제 해결
### iTerm2 프로파일이 적용되지 않는 경우
@@ -186,6 +199,27 @@ cp ~/.zshrc.backup_YYYYMMDD_HHMMSS ~/.zshrc
exec zsh
```
### Claude Code CLI가 동작하지 않는 경우
```bash
# Node.js 확인
node --version
# Claude Code 재설치
npm install -g @anthropic-ai/claude-code
# API 키 재설정
claude config
```
### VSCode Claude 확장이 설치되지 않는 경우
```bash
# code 명령 설치 (VSCode 실행 후)
# ⌘⇧P → 'Shell Command: Install code command in PATH'
# 확장 수동 설치
code --install-extension anthropic.claude-code
```
### 폰트가 표시되지 않는 경우
```bash
# 폰트 재설치
@@ -220,7 +254,10 @@ git pull
- [Homebrew](https://brew.sh/)
- [iTerm2](https://iterm2.com/)
- [Oh My Zsh](https://ohmyz.sh/)
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
- [VSCode](https://code.visualstudio.com/)
- [Stats](https://github.com/exelban/stats)
- [Rectangle](https://rectangleapp.com/)
- [D2Coding Font](https://github.com/naver/d2codingfont)
## 💡 팁
@@ -239,11 +276,9 @@ chmod +x setup_mac.sh
### 정기적인 설정 백업
```bash
# crontab으로 자동 백업 (선택사항)
crontab -e
# 매주 일요일 오후 6시에 설정 백업
0 18 * * 0 cd ~/workspace/nad4/setup_mac && cp ~/Library/Preferences/eu.exelban.Stats.plist stats-settings/Stats.plist && git add . && git commit -m "Auto backup: $(date)" && git push
# 매주 일요일 오후 6시에 설정 백업 (선택사항)
# crontab -e 후 아래 줄 추가:
0 18 * * 0 cd ~/workspace/nad4/setup_mac && ./save_configs.sh --auto
```
## 📝 라이선스
+2
View File
@@ -7,6 +7,7 @@
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ITERM_SETTINGS_DIR="$SCRIPT_DIR/iterm2-settings"
STATS_SETTINGS_DIR="$SCRIPT_DIR/stats-settings"
RECTANGLE_SETTINGS_DIR="$SCRIPT_DIR/rectangle-settings"
echo "📦 현재 설정을 저장합니다..."
echo ""
@@ -34,6 +35,7 @@ echo ""
# Stats 설정 저장
if [ -f "$HOME/Library/Preferences/eu.exelban.Stats.plist" ]; then
echo "📊 Stats 설정 저장 중..."
mkdir -p "$STATS_SETTINGS_DIR"
cp "$HOME/Library/Preferences/eu.exelban.Stats.plist" \
"$STATS_SETTINGS_DIR/Stats.plist"
echo "✅ Stats 설정 저장 완료"
+113 -59
View File
@@ -3,7 +3,7 @@
# =============================================================================
# Mac 초기 개발 환경 설정 스크립트
# 작성자: NAD4
# 설명: Homebrew, iTerm2, Oh My Zsh, 필수 앱 자동 설치 및 설정
# 설명: Homebrew, iTerm2, Oh My Zsh, Claude Code, VSCode, 필수 앱 자동 설치 및 설정
# =============================================================================
set -e # 에러 발생 시 스크립트 중단
@@ -16,6 +16,7 @@ RECTANGLE_SETTINGS_DIR="$SCRIPT_DIR/rectangle-settings"
ITERM_PROFILE_FILE="$ITERM_SETTINGS_DIR/profile.json"
STATS_PLIST_FILE="$STATS_SETTINGS_DIR/Stats.plist"
RECTANGLE_PLIST_FILE="$RECTANGLE_SETTINGS_DIR/com.knollsoft.Rectangle.plist"
RECTANGLE_JSON_FILE="$RECTANGLE_SETTINGS_DIR/RectangleConfig.json"
echo "🚀 Mac 초기 개발 환경 설정을 시작합니다..."
echo "📂 스크립트 위치: $SCRIPT_DIR"
@@ -122,6 +123,7 @@ echo "🖥️ GUI 애플리케이션 설치 중..."
# 설치할 앱 목록
APPS=(
"tunnelblick"
"visual-studio-code"
"cursor"
"notion"
"discord"
@@ -146,7 +148,59 @@ done
echo ""
# =============================================================================
# 7. .zshrc
# 7. Node.js & Claude Code CLI
# =============================================================================
echo "🤖 Node.js & Claude Code 설치 중..."
# Node.js
if brew list node &> /dev/null; then
echo "✅ Node.js 이미 설치됨"
else
brew install node
echo "✅ Node.js 설치 완료"
fi
# Claude Code CLI
if command -v claude &> /dev/null; then
echo "✅ Claude Code CLI 이미 설치됨"
else
npm install -g @anthropic-ai/claude-code
echo "✅ Claude Code CLI 설치 완료"
fi
echo ""
# =============================================================================
# 8. VSCode 확장 설치
# =============================================================================
echo "🔌 VSCode 확장 설치 중..."
# VSCode code CLI 경로 확인
CODE_CMD=""
if command -v code &> /dev/null; then
CODE_CMD="code"
elif [ -f "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code" ]; then
CODE_CMD="/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"
fi
if [ -n "$CODE_CMD" ]; then
# Claude for VSCode 확장 설치
if "$CODE_CMD" --install-extension anthropic.claude-code 2>/dev/null; then
echo "✅ Claude for VSCode 확장 설치 완료"
else
echo "⚠️ Claude 확장 자동 설치 실패"
echo " VSCode에서 수동 설치: Extensions (⌘⇧X) → 'Claude' 검색"
fi
else
echo "⚠️ VSCode code 명령을 찾을 수 없습니다."
echo " VSCode 실행 후: ⌘⇧P → 'Shell Command: Install code command in PATH'"
echo " 이후 Extensions에서 'Claude' 확장을 수동 설치해주세요."
fi
echo ""
# =============================================================================
# 9. .zshrc 설정
# =============================================================================
echo "🎨 ZSH 설정 파일 구성 중..."
@@ -231,14 +285,16 @@ build_prompt() {
EOF
# ZSH 플러그인 source 추가 (중복 체크)
SYNTAX_LINE='source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh'
if ! grep -qxF "$SYNTAX_LINE" ~/.zshrc; then
# ZSH 플러그인 source 추가 (중복 체크, Apple Silicon/Intel 자동 감지)
BREW_PREFIX="$(brew --prefix)"
SYNTAX_LINE="source $BREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
if ! grep -q "zsh-syntax-highlighting.zsh" ~/.zshrc; then
echo "$SYNTAX_LINE" >> ~/.zshrc
fi
SUGGEST_LINE='source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh'
if ! grep -qxF "$SUGGEST_LINE" ~/.zshrc; then
SUGGEST_LINE="source $BREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
if ! grep -q "zsh-autosuggestions.zsh" ~/.zshrc; then
echo "$SUGGEST_LINE" >> ~/.zshrc
fi
@@ -246,7 +302,7 @@ echo "✅ .zshrc 설정 완료"
echo ""
# =============================================================================
# 8. iTerm2 프로파일 설정
# 10. iTerm2 프로파일 설정
# =============================================================================
echo "⚙️ iTerm2 프로파일 설정 중..."
@@ -265,27 +321,18 @@ mkdir -p "$ITERM_DYNAMIC_DIR"
if [ -f "$ITERM_PROFILE_FILE" ]; then
echo "✅ profile.json 발견"
# DynamicProfile 형식으로 변환하여 복사
cat > "$ITERM_DYNAMIC_DIR/NAD4Profile.json" << 'DYNAMIC_WRAPPER'
{
"Profiles": [
DYNAMIC_WRAPPER
# 기존 프로파일 내용 추가 (마지막 } 제거)
cat "$ITERM_PROFILE_FILE" | sed '$ d' >> "$ITERM_DYNAMIC_DIR/NAD4Profile.json"
# 래퍼 종료
cat >> "$ITERM_DYNAMIC_DIR/NAD4Profile.json" << 'DYNAMIC_WRAPPER'
}
]
}
DYNAMIC_WRAPPER
# DynamicProfile 형식으로 변환하여 복사 (profile.json을 Profiles 배열로 래핑)
{
echo '{"Profiles": ['
cat "$ITERM_PROFILE_FILE"
echo ']}'
} > "$ITERM_DYNAMIC_DIR/NAD4Profile.json"
echo "✅ iTerm2 Dynamic Profile 생성 완료"
echo " 위치: $ITERM_DYNAMIC_DIR/NAD4Profile.json"
# profile.json에서 GUID 추출
PROFILE_GUID=$(grep -o '"Guid" : "[^"]*"' "$ITERM_PROFILE_FILE" | sed 's/"Guid" : "\(.*\)"/\1/')
# profile.json에서 GUID 추출 (공백 유무 무관)
PROFILE_GUID=$(grep -o '"Guid"[[:space:]]*:[[:space:]]*"[^"]*"' "$ITERM_PROFILE_FILE" | head -1 | sed 's/.*:.*"\([^"]*\)"/\1/')
if [ -n "$PROFILE_GUID" ]; then
echo "✅ 프로파일 GUID: $PROFILE_GUID"
@@ -302,18 +349,11 @@ else
echo "⚠️ $ITERM_PROFILE_FILE 파일을 찾을 수 없습니다."
fi
# iTerm2 재시작 (번들 ID 사용)
# iTerm2 재시작
echo "🔄 iTerm2 시작 중..."
sleep 1
# iTerm2 실행 (여러 방법 시도)
if [ -d "/Applications/iTerm.app" ]; then
open -a /Applications/iTerm.app
if open -a iTerm 2>/dev/null; then
echo "✅ iTerm2 시작 완료"
elif command -v open &> /dev/null; then
open -b com.googlecode.iterm2 2>/dev/null || \
open /Applications/iTerm.app 2>/dev/null || \
echo "⚠️ iTerm2를 수동으로 실행해주세요"
else
echo "⚠️ iTerm2를 수동으로 실행해주세요"
fi
@@ -321,7 +361,7 @@ fi
echo ""
# =============================================================================
# 9. Stats 앱 설정
# 11. Stats 앱 설정
# =============================================================================
echo "📊 Stats 앱 설정 중..."
@@ -373,7 +413,7 @@ fi
echo ""
# =============================================================================
# 10. Rectangle 앱 설정
# 12. Rectangle 앱 설정
# =============================================================================
echo "📐 Rectangle 앱 설정 중..."
@@ -388,43 +428,47 @@ if [ -d "/Applications/Rectangle.app" ]; then
sleep 2
fi
# Rectangle 설정 파일 확인
if [ -f "$RECTANGLE_PLIST_FILE" ]; then
echo "✅ Rectangle.plist 발견"
# Rectangle 설정 파일 백업
RECTANGLE_PREF_FILE="$HOME/Library/Preferences/com.knollsoft.Rectangle.plist"
# Rectangle 설정 파일 확인 (plist 우선, JSON 폴백)
RECTANGLE_PREF_FILE="$HOME/Library/Preferences/com.knollsoft.Rectangle.plist"
if [ -f "$RECTANGLE_PLIST_FILE" ] || [ -f "$RECTANGLE_JSON_FILE" ]; then
# 기존 설정 백업
if [ -f "$RECTANGLE_PREF_FILE" ]; then
RECTANGLE_BACKUP="$RECTANGLE_PREF_FILE.backup_$(date +%Y%m%d_%H%M%S)"
cp "$RECTANGLE_PREF_FILE" "$RECTANGLE_BACKUP"
echo "✅ 기존 Rectangle 설정 백업: $RECTANGLE_BACKUP"
fi
# 새 설정 적용
cp "$RECTANGLE_PLIST_FILE" "$RECTANGLE_PREF_FILE"
echo "✅ Rectangle 설정 적용 완료"
# 설정 파일 권한 설정
chmod 644 "$RECTANGLE_PREF_FILE"
if [ -f "$RECTANGLE_PLIST_FILE" ]; then
# plist 파일이 있으면 직접 복사
echo "✅ Rectangle.plist 발견"
cp "$RECTANGLE_PLIST_FILE" "$RECTANGLE_PREF_FILE"
chmod 644 "$RECTANGLE_PREF_FILE"
echo "✅ Rectangle 설정 적용 완료 (plist)"
elif [ -f "$RECTANGLE_JSON_FILE" ]; then
# JSON 파일만 있으면 plutil로 변환 후 적용
echo "✅ RectangleConfig.json 발견"
if plutil -convert binary1 -o "$RECTANGLE_PREF_FILE" "$RECTANGLE_JSON_FILE" 2>/dev/null; then
chmod 644 "$RECTANGLE_PREF_FILE"
echo "✅ Rectangle 설정 적용 완료 (JSON → plist 변환)"
else
echo "⚠️ JSON 변환 실패. Rectangle을 실행 후 수동으로 설정을 import 해주세요."
echo " Rectangle > Preferences > Import (${RECTANGLE_JSON_FILE})"
fi
fi
# Rectangle 재시작
echo "🔄 Rectangle 재시작 중..."
sleep 1
open -a Rectangle
echo "✅ Rectangle 시작 완료"
else
echo "⚠️ $RECTANGLE_PLIST_FILE 파일을 찾을 수 없습니다."
echo "⚠️ Rectangle 설정 파일을 찾을 수 없습니다."
echo " Rectangle을 실행하고 설정을 구성해주세요."
echo ""
echo " Rectangle 기본 설정 생성 중..."
# Rectangle 실행 (초기 설정 생성)
open -a Rectangle
sleep 3
echo "✅ Rectangle 초기 실행 완료"
echo " Preferences에서 키보드 단축키를 설정하세요."
fi
else
@@ -477,13 +521,23 @@ echo " ⌃⌥→ : 오른쪽 절반 ⌃⌥← : 왼쪽 절반"
echo " ⌃⌥↑ : 최대화 ⌃⌥↓ : 하단 정렬"
echo " ⌃⌥F : 전체 화면 ⌃⌥C : 가운데"
echo ""
echo " 7️⃣ AppCleaner 사용법:"
echo " 7️⃣ Claude Code 확인:"
echo " claude --version # → 버전 확인"
echo " claude # → Claude Code 실행"
echo " ※ 최초 실행 시 API 키 설정 필요"
echo ""
echo " 8️⃣ VSCode Claude 확장 확인:"
echo " VSCode 실행 → Extensions (⌘⇧X) → 'Claude' 설치 확인"
echo ""
echo " 9️⃣ AppCleaner 사용법:"
echo " - Applications 폴더에서 AppCleaner 실행"
echo " - 앱 삭제 시 관련 파일까지 자동 정리"
echo " - 추천: Dock에 추가하여 사용"
echo ""
echo "💡 설치된 앱 목록:"
echo " ✅ iTerm2 (터미널)"
echo " ✅ VSCode + Claude 확장"
echo " ✅ Claude Code CLI"
echo " ✅ Stats (시스템 모니터)"
echo " ✅ Rectangle (윈도우 관리)"
echo " ✅ AppCleaner (앱 제거 도구)"