현재 Rails 7에서 Hotwire, Stimulus, Turbo가 프론트엔드의 기본 스택으로 자리매김하면서, 고급 HTML 툴링의 중요성은 더욱 커졌습니다. Marco의 목표는 Ruby 생태계의 기존 도구에 ERB 지원을 추가하는 것이었습니다. 기존의 파싱 방식(Nokogiri와 Prism을 사용하여 HTML과 Ruby를 분리하여 처리)은 ERB가 삽입된 위치의 문맥 정보를 잃어버리고, 불완전하거나 유효하지 않은 구문 처리에서 한계를 보였습니다. 특히 속성 내 ERB 삽입과 같은 민감한 부분에서는 정확한 문맥 이해가 필수적이었습니다. 이러한 문제들을 해결하기 위해 Marco는 직접 HTML 인지 ERB 파서를 개발하기로 결정했으며, 그 결과물이 바로 ‘Herp’입니다. Herp는 HTML과 ERB를 의미하며, C99로 작성된 순수 핸드메이드 파서로, Ruby 스니펫 파싱을 위한 Prism 외에는 추가 의존성이 없습니다. 이는 휴대성, 오류 허용성, 유지보수성을 중시하는 Prism의 디자인 목표를 따릅니다. Herp는 브라우저가 HTML을 해석하는 방식과는 달리, 도구 개발을 위해 파일에 있는 내용을 정확하게 표현하는 구문 트리를 생성합니다. 현재 Herp는 Ruby, JavaScript, TypeScript 바인딩을 제공하며, Gem 또는 npm 패키지로 쉽게 통합할 수 있습니다. Herp는 빈 문서, 텍스트 콘텐츠, 부분적인 HTML 요소(예: 닫히지 않은 태그), 중첩된 HTML 요소, ERB 출력 태그, 그리고 if
, case
, begin
과 같은 Ruby의 제어 흐름 구조를 성공적으로 파싱하여 계층적이고 문맥을 보존하는 구문 트리를 제공합니다. 이는 코드의 정확한 분석, 변환, 재작성을 가능하게 합니다. Herp의 첫 공개 릴리스와 함께, 개발자들은 Herp Tools 웹사이트에서 제공되는 대화형 브라우저 기반 파서 플레이그라운드를 통해 Herp의 기능을 직접 체험할 수 있습니다. Marco는 Herp의 단기적인 미래 계획으로 자동 포매터와 린터(RuboCop과의 통합 포함)의 출시를 언급했습니다. 또한, 기존 Stimulus LSP, Ruby LSP, Turbo LSP와 같은 도구에 Herp 파서를 통합하여 더 풍부한 진단, 코드 액션, 리팩토링 기능을 제공할 예정입니다. 궁극적으로는 Phoenix LiveView와 유사하게 ERB 뷰의 상태 변화에 따라 템플릿의 특정 부분만 스마트하게 업데이트하고 다시 렌더링하는 ‘Reaction View’라는 새로운 ERB 렌더링 엔진을 구상하고 있습니다. 더 나아가 HAML, Slim과 같은 다른 HTML 템플릿 엔진도 Herp의 통일된 구문 트리 구조로 변환하여, 모든 HTML 템플릿 언어에 걸쳐 도구 개발 노력을 통합하려는 비전을 제시했습니다.
HTMLware ERB 툴링: Ruby on Rails 개발자 경험 개선을 위한 Herp 소개
[EN] Empowering Developers with HTML-Aware ERB Tooling / Marco Roth @marcoroth
작성자
RubyKaigi
발행일
2025년 05월 27일
핵심 요약
- 1 Ruby on Rails 환경에서 HTML 및 ERB 뷰 파일 작업의 생산성을 높이기 위한 고급 개발 도구의 필요성이 대두되었습니다.
- 2 Marco는 이러한 문제를 해결하고자 HTML 인지 ERB 파서인 'Herp'를 개발하여, ERB 파일의 구문 분석 및 이해를 혁신했습니다.
- 3 Herp는 포매터, 린터, 그리고 향후 더 스마트한 ERB 렌더링 엔진 개발을 위한 기반을 제공하며, Ruby 생태계의 뷰 레이어 도구 발전에 기여할 것입니다.
도입
본 발표는 Ruby on Rails 개발 환경에서 HTML 및 ERB 뷰 파일 작업의 생산성을 향상시키기 위한 고급 개발 도구, 특히 'Herp'라는 새로운 HTML 인지 ERB 파서의 도입에 초점을 맞춥니다. 발표자인 Marco는 지난 몇 년간 Stimulus Reflex, CableReady, Stimulus 등의 Hotwire 생태계에서 오픈 소스 활동에 적극적으로 참여하며, 개발자 도구 개선에 깊은 관심을 가져왔습니다. 과거 Ruby 개발 도구는 기본적인 에디터 지원에 그쳤으나, 2008년 RubyMine의 등장과 2016년 Microsoft의 언어 서버 프로토콜(LSP) 도입 이후 Solargraph, Shopify Ruby LSP와 같은 혁신적인 도구들이 등장하며 발전해왔습니다. Marco는 JavaScript 생태계의 우수한 도구 경험을 Ruby 및 Rails로 가져오려는 시도로 Stimulus LSP와 Turbo LSP를 개발했으나, 이들 도구는 HTML 구문만을 지원하고 ERB 태그를 무시하는 한계를 가지고 있었습니다. 이러한 제약은 Rails 앱에서 흔히 사용되는 ERB 헬퍼(예: `tag.div`, 해시 구문 데이터 속성)에 대한 오류 진단이나 자동 완성 기능을 제공할 수 없게 만들었습니다. 따라서, ERB의 복잡성과 유연성을 이해하고 HTML과 ERB를 동시에 처리할 수 있는 새로운 HTML 인지 ERB 툴링의 필요성이 절실해졌습니다.
결론
결론적으로, Prism이 Ruby 툴링 생태계와 Ruby 내부 구조에 큰 영향을 미쳤듯이, Herp는 HTML 템플릿 툴링 분야에 유사한 혁신적인 영향을 가져올 잠재력을 지니고 있습니다. 이는 더욱 발전된 ERB 렌더링 엔진을 구동하여 프론트엔드에서 더 스마트한 업데이트를 가능하게 할 것입니다. 지난 몇 년간 Ruby 커뮤니티는 Ruby 생태계 전반에 걸쳐 훌륭한 도구들을 구축해왔으며, 이제는 뷰 레이어에도 동일한 수준의 정교하고 세심한 도구를 구축할 때입니다. Herp는 이러한 목표를 달성하기 위한 명확한 경로를 제시하며, Ruby를 계속해서 매력적인 언어로 유지하고 새로운 개발자들이 쉽게 접근하고 활용할 수 있도록 돕는 데 기여할 것입니다. Herp는 HTML 인지 ERB 파서로서, Ruby on Rails 개발자들이 ERB 뷰를 보다 효율적이고 안전하게 다룰 수 있도록 지원하며, 향후 뷰 레이어 개발의 패러다임을 변화시킬 중요한 초석이 될 것입니다.