마르코 연사는 JavaScript 생태계의 뛰어난 개발 도구 경험에 비해 Rails에서는 솔라(Solargraph)와 같은 도구들이 제대로 작동하지 않아 아쉬움을 느꼈다고 밝힙니다. 이러한 배경에서 그는 통합 개발 환경(IDE)의 무거움과 비생산성을 극복하고, 언어 인텔리전스를 제공하는 LSP에 주목하게 됩니다. LSP는 단일 서버 구현을 통해 다양한 편집기에서 언어 기능을 활용할 수 있게 하는 프로토콜이며, JSON RPC를 통해 통신합니다.
Stimulus LSP는 Stimulus 컨트롤러의 data
속성(예: data-controllers
, data-targets
, data-actions
)에 대한 자동 완성, 진단, 빠른 수정 기능을 제공하여 개발자 경험을 향상시키는 것을 목표로 합니다. 특히, Stimulus의 명명 규칙에서 발생할 수 있는 오류(예: _
대신 -
사용)를 방지하고, 동적으로 생성되는 속성 값까지 예측하여 제공합니다. 초기 구현은 HTML 언어 서비스를 확장하고, Acorn과 같은 JavaScript 파서를 사용하여 Stimulus 컨트롤러 파일을 분석하여 필요한 정보를 추출하는 방식으로 진행되었습니다. 그러나 이 과정에서 하드코딩된 경로 문제와 다양한 컨트롤러 등록 방식 지원의 어려움 등 여러 난관에 부딪혔고, 결국 파서를 전면 재작성하여 정확성과 신뢰성을 크게 개선했습니다.
Stimulus LSP 1.0 출시 이후, 개발 도구의 미래에 대한 논의가 이어졌습니다. RubyMine과 같은 IDE에서 Stimulus 지원이 추가되는 긍정적인 변화와 함께, LSP에 국한되지 않는 독립적인 진단 도구인 Stimulus Lint의 개발이 진행 중입니다. 이는 CLI 또는 CI 시스템에서 실행되어 코드의 오류나 비권장 사항을 감지하는 역할을 합니다. 또한, HTML 및 ERB 문서에 대한 진단 및 코드 액션 지원, Turbo LSP 개발, Rails 뷰 헬퍼(View Helper)에 대한 이해 증진, 그리고 궁극적으로는 HTML ERB 파서 개발을 통해 Haml, Slim, Liquid와 같은 다른 템플릿 언어까지 지원하는 확장성을 모색하고 있습니다. 뷰 파일 간의 관계를 이해하여 파일 간 진단 기능을 제공하는 것도 중요한 발전 방향으로 제시됩니다.
이와 더불어, Hotwire 생태계를 위한 브라우저 확장 도구인 Hotwire Debugger
도 소개되었습니다. 이 도구는 웹 페이지 상에서 Stimulus 컨트롤러와 Turbo Frames를 시각적으로 강조하여 개발자가 페이지의 상호 작용 구조를 쉽게 파악할 수 있도록 돕습니다. 향후 Turbo Streams 디버거, Turbo Frame 콘텐츠 새로 고침 버튼 등 다양한 디버깅 기능이 추가될 예정입니다.