Herb 소개: 더 스마트한 개발자 도구를 위한 새로운 HTML-Aware ERB 파서

Introducing Herb: A new HTML-Aware ERB Parser for smarter developer tooling | Marco Roth

3줄 요약

  • Herb는 RubyKaigi 2025에서 발표된 새로운 HTML-aware ERB 파서로, Ruby/Rails 뷰 파일 개발 도구 개선을 목표로 합니다.
  • 기존 도구의 한계를 극복하고 HTML 구조와 ERB를 정확히 이해하여 LSP, 포매터, 린터 등에 정밀한 AST를 제공합니다.
  • C로 작성되어 빠르고 오류 허용적이며, Ruby 및 JavaScript 바인딩을 지원하여 다양한 개발 환경에 통합 가능합니다.

2025년 4월 16일 RubyKaigi에서 Marco Roth는 HTML-aware ERB 파서인 'Herb'를 공식적으로 발표했습니다. Ruby on Rails 생태계, 특히 Hotwire 및 HTML-over-the-wire 패턴의 부상과 함께 ERB 템플릿의 중요성이 더욱 커지고 있습니다. 하지만 기존의 Ruby 개발 도구들은 Ruby 코드 자체(Prism, Ruby LSP 등)의 분석 능력은 향상되었으나, `.html.erb` 파일 내부에 깊숙이 포함된 HTML 구조와 ERB 코드를 함께 이해하고 분석하는 데에는 한계를 보여왔습니다. 예를 들어, 뷰 헬퍼에 대한 제한적인 정의 점프 기능, HTML 의미론 이해 부족, 구문 인식 포맷팅/린팅 부재, ActionView 헬퍼 출력 예측 불가, HTML-aware ERB 분석 및 변환 에디터 지원 미비 등이 대표적인 문제점입니다. 2024년 Rails 개발자 설문에서 Stimulus가 가장 많이 사용되는 JavaScript 프레임워크로 부상한 것은 서버 측에서 풍부한 HTML을 작성하는 추세가 강화되고 있음을 시사하며, 이는 곧 HTML+ERB에 대한 더 나은 도구 지원의 필요성을 강조합니다. 바로 이러한 배경에서 Herb가 탄생하게 되었습니다. Herb는 현대적인 Rails 애플리케이션 개발 환경에 필수적인, HTML과 ERB를 정확하게 이해하는 새로운 파서로서 기존 도구들이 채우지 못했던 공백을 메우는 것을 목표로 합니다.

Herb의 핵심은 HTML과 ERB가 혼합된 구조를 깊이 이해하도록 설계된 새로운 파서라는 점입니다. C 언어로 작성되어 뛰어난 성능을 자랑하며, HTML-aware 렉서와 파서, 그리고 Ruby의 공식 파서인 Prism과의 통합을 통해 두 언어의 상호작용을 효과적으로 처리합니다. 특히 개발자 도구를 위해 설계된 Herb는 실제 코드의 복잡성과 오류를 처리할 수 있도록 오류 허용적(error-tolerant)이며, 원본 코드의 공백과 구조를 그대로 보존합니다. 이는 포매터나 린터와 같은 도구가 소스 코드를 정확히 분석하고 수정하는 데 매우 중요합니다. 기존의 HTML 파서인 Nokogiri와 달리, Herb는 HTML5 표준에 맞춰 오류를 자동으로 수정하거나 노드를 재배열하지 않습니다. 대신, 개발자가 작성한 그대로의 원시적인 구조를 담은 추상 구문 트리(AST)를 생성합니다. 이 AST는 HTML 태그 불일치나 잘못된 중첩과 같은 문제를 정확하게 식별하고, ERB 코드와 HTML 구조 간의 관계를 파악하는 데 활용될 수 있습니다. 결과적으로, Herb는 ERB-aware 포매터 및 린터 구축, 지능형 LSP 기능(예: ERB 내부 자동 완성), 서버 렌더링 마크업에 대한 정적 분석, 뷰 파일 대규모 리팩토링 및 변환, 구문/의미 오류 진단 등 다양한 개발 도구 기능을 가능하게 합니다. 현재 Herb 파서의 출시를 시작으로, 향후 Stimulus LSP, Turbo LSP, Ruby LSP, Phlexing, Herb Auto-Formatter, Herb Linter 등 기존 및 새로운 도구들의 개선에 Herb가 활용될 예정입니다. Herb는 RubyGem 및 NPM 패키지로 제공되어 Ruby 및 JavaScript 환경에서 쉽게 통합할 수 있으며, 웹 기반 Playground를 통해 파서의 작동 방식을 직접 탐색해 볼 수도 있습니다. 요약하자면, Herb는 기존 도구들이 제공하지 못했던 .html.erb 파일에 대한 정밀하고 신뢰할 수 있는 분석 능력을 제공하며, 이는 더 스마트하고 효율적인 개발 워크플로우를 위한 필수적인 기반이 됩니다.

결론적으로, Herb는 단순한 파서를 넘어 더 나은 HTML 템플릿 개발 도구를 위한 강력한 기반입니다. 이 파서는 HTML+ERB 구문 트리를 개선하고, 에디터 지원을 강화하며, 전반적인 개발자 경험을 향상시키는 데 중점을 둡니다. 현대적인 Rails 애플리케이션을 구축하든 레거시 템플릿을 유지보수하든 관계없이, Herb는 HTML+ERB 뷰에 명확성, 구조, 그리고 현대적인 사용 편의성을 제공할 것입니다. 문서, Playground, GitHub 저장소를 통해 Herb를 직접 확인하고 활용해 보시기를 권장합니다. Herb의 출시는 Ruby 커뮤니티에 중요한 기여이며, 이를 통해 현대 Rails 뷰 레이어가 마땅히 받아야 할 수준 높은 도구들이 개발될 것으로 기대됩니다. 앞으로 Herb의 기술적 세부 사항, 아키텍처, 설계 결정 등에 대한 글이 추가로 공개될 예정이며, 커뮤니티의 기여와 활용을 통해 Herb 기반의 개발 도구 생태계가 더욱 풍성해지기를 바랍니다.