# ripgrep 15.0

> Clean Markdown view of GeekNews topic #23746. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23746](https://news.hada.io/topic?id=23746)
- GeekNews Markdown: [https://news.hada.io/topic/23746.md](https://news.hada.io/topic/23746.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-10-19T09:38:48+09:00
- Updated: 2025-10-19T09:38:48+09:00
- Original source: [github.com/BurntSushi](https://github.com/BurntSushi/ripgrep/releases/tag/15.0.0)
- Points: 2
- Comments: 1

## Topic Body

- **ripgrep 15.0**은 버그 수정, 성능 개선, 새로운 기능 추가 등 다양한 업데이트를 포함하는 주요 릴리스임
- **gitignore 규칙 적용**에 관한 버그가 다수 수정되었고, 대용량 파일 처리 시 **메모리 최적화**가 이루어짐
- 윈도우 **aarch64** 플랫폼 지원이 추가되고, **powerpc64** 지원 중단이 이루어짐
- 일부 새로운 기능으로는 **--json과 대체 플래그 동시 지원, globs의 중첩 중괄호 지원** 등이 있음
- 전반적인 **성능 개선**과 오류 수정, 사용성 향상으로 개발자 생산성이 높아짐

---

### ripgrep 15.0 개요

ripgrep 15.0은 ripgrep의 최신 주요 버전 릴리스로, 주로 **버그 수정**, 마이너 **성능 향상** 및 소규모 **신규 기능** 추가를 포함함

> ripgrep은 라인 단위로 현재 디렉토리에서 정규 표현식 패턴을 재귀적으로 검색하는 도구임  
> 기본적으로 gitignore 규칙을 따르며, 숨김 파일/디렉토리 및 바이너리 파일을 자동으로 건너뜀

### 주요 변경사항

- 여러 **gitignore 매칭 관련 버그**가 수정됨
  - 상위 디렉토리의 gitignore 규칙 적용과 관련된 자주 보고된 버그 해결
- 아주 큰 gitignore 파일 처리 시 발생한 **메모리 사용량 증가 버그**가 해결됨
- `rg -vf file`에서 file이 비어있을 때 모두 매치하게 변경됨
- `-r/--replace` 플래그가 이제 `--json`과 함께 정상 동작함
- 일부 **Jujutsu(jj) 저장소**도 git 저장소처럼 인식하여, ripgrep에서 jj의 gitignore를 따름
- Globs가 **중첩 중괄호**를 지원함

### 플랫폼 지원

- **Windows용 aarch64**에 대한 릴리스 바이너리가 새로 제공됨
- **powerpc64**에 대한 릴리스 바이너리는 더 이상 제공되지 않음
  - CI 릴리스 워크플로 문제로 인한 중단, 테스트와 지원을 원하면 요청 가능
- ripgrep 바이너리가 **LTO(전체 링크 타임 최적화)** 로 컴파일되어, 소폭의 성능 향상과 크기 감소 효과가 있음

### 성능 향상

- **Windows**에서 `-z/--search-zip` 옵션 미사용 시, **helper 바이너리 탐색 비활성화**로 성능 개선
- Windows에서 **하이퍼링크 출력 시 경로 정규화 생략**으로 속도 향상
- `-A/--after-context` 사용 시 **대용량 값** 처리 성능 향상

### 버그 수정

- **상위 디렉토리 gitignore 적용 누락** 등 여러 gitignore 관련 이슈 다수 수정
- 비어있는 파일을 대상으로 한 `rg -vf file` 명령이 모두 매치하도록 수정
- `.gitignore` 등에서 **UTF-8 BOM 마커 무시**하는 처리 추가
- 대용량 gitignore 파일 처리 시 **메모리 사용 최적화**
- `--stats` 사용 시 **검색된 바이트 수 출력 오류** 수정
- `.`으로 끝나는 glob 처리 오류 수정
- `-m/--max-count`, `-U/--multiline` 조합 사용 시 **매치 수 초과 표시** 문제 해결
- `-r/--replace` 플래그 사용 시 **라인 종결자 보존**하도록 변경
- `-q --files-without-match` 조합 사용 시 **종료 코드 반전** 오류 해결
- `-c/--count`와 `--files-with-matches`의 문서 불일치 해결
- 대형 정규표현식 및 입력 시 드물게 발생한 panic 문제 수정
- man page의 옵션 플래그명 하이픈 이스케이프 처리
- **macOS aarch64** 릴리스에서 PCRE2 정적 컴파일 처리
- 화이트리스트 숨김 파일 검색 시 **상위 디렉토리 무시 필터** 버그 수정
- `--json` 플래그 사용 시 **잘못된 요약 통계** 문제 해결
- 절대 경로 및 전역 gitignore 검색 시 gitignore 처리 오류 수정
- `-U/--multiline`와 `-r/--replace` 조합 사용 시 발생하던 panic 문제 수정

### 기능 개선

- 기본 파일 타입 집합이 대폭 **확장** 및 **개선**
- `-r/--replace`가 `--json`과 호환되게 개선
- fish shell의 완성 기능이 ripgrep **설정 파일**을 반영하도록 개선
- `--color`에 사용할 수 있는 스타일 속성에 **italic** 추가
- `.jj` 디렉토리를 git 저장소로 취급
- 멀티스레딩 사용 시, **CLI에서 지정한 파일 순서대로** 검색을 예약하는 기능 추가
- Windows용 `aarch64` 릴리스 아티팩트 추가
- **highlight 컬러 타입**이 추가되어, 매칭된 줄의 비매칭 텍스트 스타일링 가능
- globs 및 globset crate에 **중첩 alternates** 기능 추가
- `--hyperlink-format` 자동완성 기능이 bash, fish, zsh에서 개선됨

## Comments



### Comment 45123

- Author: neo
- Created: 2025-10-19T09:38:48+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45627324) 
- ripgrep은 지난 수년간 정말 많은 시간을 절약해준 툴임, 새 시스템을 시작할 때마다 가장 먼저 설치하는 필수 도구임, 특히 오래된 코드베이스를 탐색할 때 없어서는 안 될 존재임, 한 가지 아쉬운 점은 -F(리터럴 취급) 옵션을 쓸 때도 몇몇 문자가 여전히 이스케이프가 필요한 특수문자로 처리되는 경우가 있다는 점임, 정확히 어떤 문자인지는 기억이 안 남, 그래도 ripgrep이 계속 업데이트되는 걸 볼 때마다 기쁨
  - 만약 어떤 문자에서 문제가 있었는지 예시를 알려주면 구체적으로 설명해줄 수 있음, `-F/--fixed-strings`는 패턴에서 100% 정규 표현식 기능을 끄고 리터럴로만 처리함, 이스케이프가 필요하다면 그건 아마 쉘에서 요구하는 것이 원인일 수 있음

- rg는 마치 마법처럼 느껴지는 툴임, 실제로는 탁월한 엔지니어링과 꾸준한 개선, 그리고 우리 모두가 매일 사용하는 놀라운 하드웨어 성능을 십분 활용한 결과임, 또한 lsp 같은 표준을 따로 만들 필요 없이 개발자들이 더 빠르게 코드 탐색과 이해를 할 수 있도록 가능성을 열어준 혁신임
  - smithing이 이 맥락에서 무슨 뜻인지 정말 궁금함

- ripgrep 코드베이스는 "음료를 준비하고 가장 편한 의자에 앉아 고품질 소프트웨어를 탐독하는" 최고의 예시임, 이리저리 코드 구석구석을 클릭하며 감탄하게 됨
  - [이 블로그 글](https://burntsushi.net/ripgrep/)도 정말 멋진 읽을거리임

- fd처럼 rg도 진짜 사용이 즐거운 커맨드라인 툴임, 이런 새로운 명령어 기반 툴들을 좋아함
  - ripgrep과 fd의 저자들이 Astral에서 근무한다는 사실을 최근에 알게 됨, 그래서 Astral 소프트웨어가 이렇게 좋구나 싶음
  - 두 툴 모두 별다른 옵션 없이도 기본값이 99% 내가 원하는 대로 동작함, 엄청난 시간 절약임, 예를 들어 rg &lt;string&gt; 또는 fd &lt;string&gt; 하나만 입력해도 충분함

- 개인적으로 추가됐으면 하는 기능은 "확장자" 플래그임, -g처럼 동작하지만 입력 인자를 확장자로 처리하는 기능임 (예시: `rg -e c,h`처럼), 대부분 glob 패턴을 쓸 때 확장자 매칭이 목적이기 때문임
  - `-t/--type` 플래그를 본 적 있는지 묻고 싶음, 예시처럼 `-tc`로 쓸 수 있음, ripgrep에 없는 확장자라면 직접 type을 정의할 수도 있음

- ripgrep은 내가 rust에 관심을 갖기 시작한 주요 계기임, 너무 완성도 높게 동작해서 rust로 작성됐다는 사실에 더 궁금증이 생겼음, 몇 년이 지난 지금도 매일 `rg`를 사용하고 있음
  - nibbles가 내가 qbasic에 흥미를 갖게 된 주요 이유였음, 완성도 높아서 qbasic으로 작성된 점에 흥미를 느꼈고, 덕분에 nibbles를 매일 사용하게 되었음

- 최근에는 `--replace` 옵션을 발견했고 꽤 인상적이었음, `--type`과 함께 사용하면서 이전에 이런 멋진 기능들이 있다는 것을 모르고 있었다는 점이 아쉬웠음, 앞으로는 릴리즈 노트를 꼼꼼히 읽으면서 새로운 기능에 더 민감하게 대응할 생각임, jj와의 연동 기능 향상도 반가움

- 훌륭한 툴이면서도 사용성이 매우 쉬움, 처음에는 Linux에서 쓰기 시작했는데 지금은 Windows에서도 쓰고 있음, 이 도구 덕분에 이제는 wildcard 대신 정규 표현식을 바로 검색에 활용하게 됨
  - 기본 grep보다 더 좋고, `rg --files`명령도 유용함

- 이번 주에 bash 함수로 git이 추적하는 파일에서만 ripgrep을 실행하는 함수를 만들었음
  ```
    rgg() {
      readarray -d '' -t FILES < <(git ls-files -z)
      rg "${@}" "${FILES[@]}"
    }
  ```
  바이너리 파일이나 dot 파일이 많은 디렉토리에서 훨씬 빠르게 검색할 수 있음, dot 파일을 검색하려면 -uu 옵션이 필요하지만, 이 옵션은 바이너리 파일까지 검색하게 됨, 파일 수가 수백 개일 때는 git ls-files 자체가 느려짐
  - 혹시 그렇게 했을 때 속도가 더 빨라진 구체적인 예시가 있을지 궁금함, 일반적으로 ripgrep은 이미 gitignore 규칙을 존중해서 git ls-files와 비슷하게 동작함, 참고로 -uu 옵션은 ripgrep이 gitignore와 hidden 파일을 무시하라는 뜻인데, 그래도 바이너리 파일은 건너뜀, 바이너리 파일까지 포함하려면 -uuu가 필요함, 함수에서 제일 큰 문제는 리눅스 커널 리포에 썼을 때 argument list가 너무 길다는 에러가 뜬다는 점임, 그래서 xargs로 바꿔봄
    ```
      $ git ls-files -z | time xargs -0 rg APM_RESUME
      ...

      real  0.638
      user  0.741
      sys   1.441
      maxmem 29 MB
      faults 0
      $ time rg APM_RESUME
      ...

      real  0.097
      user  0.399
      sys   0.588
      maxmem 29 MB
      faults 0
    ```
    이런 상황에서 `git ls-files -z | xargs -0 rg ...`가 그냥 `rg ...`보다 더 빠른 예시가 있으면 공유를 부탁함
  - 이 글을 쓰고 나서 매뉴얼을 다시 읽어보니 -uu 대신 -. 플래그(숨김 파일 검색 전용)를 쓸 수 있다는 걸 알게 됨, git이 추적하는 숨김 파일을 검색할 수 있으면 좋겠지만, 파일 목록을 쿼리할 때 생기는 오버헤드가 러스트로 짜도 무시 못할 정도임
  - 내가 뭔가 놓친 건지 모르겠지만, ripgrep은 원래 git에서 추적되지 않는 파일을 기본적으로 무시하는 것 아님?
  - 이 방식이 `git grep`보다 빠른지 궁금함

- 매일 업무에서 ripgrep을 사용함, 커맨드라인에서도 vscode에서 검색할 때도 항상 씀, burntsushi에게 고마움을 전함
