Skip to content

wdwb/tree-generator

Tree Generator (tg)

CLI 환경에서 폴더/파일 구조 템플릿을 쉽게 생성하고 적용할 수 있는 도구입니다. 변수를 사용하여 동적인 구조 생성을 지원합니다.

주요 기능

  • 템플릿 생성 (TUI): TUI 환경에서 폴더/파일 구조를 입력하고 변수를 사용하여 템플릿 저장
  • 템플릿 복제 (Clone): 기존 디렉토리 구조를 스캔하여 템플릿으로 저장
  • 템플릿 적용: 저장된 템플릿을 원하는 경로에 적용 (변수 값 입력 지원)
  • 템플릿 목록 보기 / 구조 보기: TUI를 통해 템플릿을 선택하거나 특정 템플릿의 구조를 트리 형태로 확인
  • 템플릿 삭제: 저장된 템플릿 삭제 (TUI 또는 인자 사용)
  • 기본 템플릿 설정/사용: 자주 사용하는 템플릿을 기본값으로 설정하고 간편하게 적용

설치

Homebrew (macOS 및 Linux)

brew tap wdwb/tree-generator
brew install tg

Go 설치

# 프로젝트 루트 디렉토리에서 빌드
go build -o tg cmd/tg/main.go

# (선택사항) PATH에 포함된 디렉토리로 바이너리 이동 (예: /usr/local/bin)
# sudo mv tg /usr/local/bin/

사용법

1. 템플릿 생성 (create)

tg create
  • TUI가 실행되며, 순서대로 템플릿 이름, 설명을 입력합니다.
  • 폴더/파일 경로를 한 줄씩 입력합니다.
    • 폴더는 이름 끝에 /를 붙입니다 (예: src/).
    • 파일은 일반 파일명으로 입력합니다 (예: README.md).
    • 변수를 사용하려면 경로 내에 {변수명} 형식으로 포함합니다 (예: src/{componentName}/index.js).
  • 경로 입력을 마치려면 빈 줄에서 Enter 키를 누릅니다.
  • 템플릿은 ~/.tree-generator/templates/<이름>.json 파일로 저장됩니다. 이때 사용된 변수(예: componentName)는 자동으로 추출되어 템플릿 파일에 저장됩니다.

2. 디렉토리 구조 복제 (clone)

# 사용법: tg clone <스캔할_경로> <저장할_템플릿_이름> "<템플릿_설명>"

# 현재 디렉토리 구조를 'my-project' 템플릿으로 저장
tg clone . my-project "My awesome project structure"

# 특정 경로의 구조를 템플릿으로 저장
tg clone ../other-dir lib-template "Standard library structure"

# 최대 깊이 2까지만 스캔하여 템플릿 저장
tg clone . shallow-clone "Shallow clone example" -d 2
  • 지정한 <스캔할_경로> 아래의 모든 폴더와 파일을 스캔하여 <저장할_템플릿_이름>으로 템플릿을 저장합니다. (.git, .DS_Store 등은 제외)
  • --depth 또는 -d 플래그를 사용하여 스캔할 최대 디렉토리 깊이를 지정할 수 있습니다 (예: -d 1은 최상위 파일/폴더만 스캔). 기본값 0은 깊이 제한 없음을 의미합니다.
  • 템플릿 설명은 마지막 인자로 전달합니다. 공백이 포함된 경우 따옴표로 감싸야 합니다.
  • 이 방식으로 생성된 템플릿에는 변수가 포함되지 않습니다.

3. 템플릿 목록 보기 / 구조 보기 (list)

# TUI를 통해 템플릿을 선택하고 구조 보기
tg list

# 특정 템플릿의 구조 보기
tg list <템플릿_이름>
  • 인자 없이 실행하면 TUI가 실행되어 보여줄 템플릿을 선택할 수 있습니다. (기본값 표시, 목록 순환)
  • 템플릿 이름을 인자로 전달하면 해당 템플릿의 구조를 즉시 트리 형태로 출력합니다.

4. 기본 템플릿 설정/선택 (use)

# TUI를 통해 기본 템플릿 선택 및 설정
tg use

# 특정 템플릿을 기본으로 바로 설정
tg use <템플릿_이름>
  • 인자 없이 실행하면 TUI가 실행되어 저장된 템플릿 목록을 보여줍니다.
    • 현재 설정된 기본 템플릿은 (default)로 표시됩니다.
    • 키보드(위/아래 화살표, k/j)로 원하는 템플릿을 선택하고 Enter를 누르면 해당 템플릿이 새로운 기본 템플릿으로 설정됩니다 (~/.tree-generator/config.json에 저장됨). 목록은 순환됩니다.
  • 템플릿 이름을 인자로 전달하면 해당 템플릿이 즉시 기본 템플릿으로 설정됩니다.

5. 템플릿 적용 (apply)

# 사용법: tg apply [템플릿_이름] [-p 적용_경로]

# 기본 템플릿 적용 (현재 디렉토리에)
tg apply

# 특정 템플릿을 현재 디렉토리에 적용
tg apply <템플릿_이름>

# 특정 템플릿을 지정된 경로에 적용
tg apply <템플릿_이름> -p <적용_경로>

# 기본 템플릿을 지정된 경로에 적용
tg apply -p <적용_경로>
  • 템플릿 이름을 인자로 전달하면 해당 템플릿을 사용합니다.
  • 템플릿 이름 없이 실행하면 tg use로 설정된 기본 템플릿을 사용합니다. 기본 템플릿이 없으면 오류가 발생합니다.
  • -p 플래그로 적용할 경로를 지정할 수 있습니다 (기본값: 현재 디렉토리 .).
  • 적용할 템플릿에 변수가 정의되어 있는 경우, 각 변수의 값을 입력하라는 프롬프트가 표시됩니다. 입력된 값은 경로 생성 시 해당 변수 위치에 치환됩니다.

6. 템플릿 삭제 (remove)

# TUI를 통해 삭제할 템플릿 선택
tg remove

# 특정 템플릿(들) 삭제
tg remove <템플릿1_이름> [템플릿2_이름 ...]
  • 인자 없이 실행하면 TUI가 실행됩니다.
    • 키보드(위/아래 화살표, k/j)로 이동하고 Space 키로 삭제할 템플릿을 선택/해제합니다. (선택 시 빨간색 취소선 표시)
    • Enter 키로 확정하고, yes를 입력하면 선택된 템플릿들이 삭제됩니다.
  • 삭제할 템플릿 이름을 인자로 하나 이상 전달하여 즉시 삭제할 수도 있습니다. (확인 절차 있음)

저장 위치

  • 템플릿 파일: ~/.tree-generator/templates/<템플릿_이름>.json
  • 설정 파일 (기본 템플릿): ~/.tree-generator/config.json

Homebrew 배포 업데이트

새 버전을 Homebrew를 통해 배포하려면 다음 단계를 따릅니다:

  1. GitHub 릴리스 생성: tree-generator 저장소에서 새 버전 태그(예: v0.2.0)를 생성하고 GitHub Releases 페이지에서 해당 태그로 릴리스를 생성합니다. 릴리스 노트 등을 작성합니다.
  2. 아카이브 정보 확인: 생성된 릴리스에서 소스 코드 .tar.gz 파일의 URL과 SHA256 체크섬을 확인합니다.
    # 예시: 터미널에서 체크섬 계산
    curl -L <릴리스_tar.gz_URL> | shasum -a 256
  3. Homebrew Tap 저장소 업데이트: homebrew-tree-generator 저장소(Tap 저장소)를 클론하거나 업데이트합니다.
  4. Formula 파일 수정: Formula/tg.rb 파일을 열어 다음 부분을 새 릴리스 정보로 수정합니다.
    • url: 새 릴리스의 .tar.gz URL로 변경
    • sha256: 새 아카이브의 SHA256 체크섬으로 변경
    • version: 새 버전 번호(예: "0.2.0")로 변경
  5. 커밋 및 푸시: 수정된 tg.rb 파일을 Tap 저장소에 커밋하고 푸시합니다.
    git add Formula/tg.rb
    git commit -m "Update tg formula to v0.2.0"
    git push origin main
  6. 사용자 업데이트: 이제 사용자들은 brew update && brew upgrade tg 명령어를 통해 새 버전을 설치할 수 있습니다.

라이선스

MIT

About

99% of this repository is written by cursor

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages