지난 글들

1164개의 글이 있습니다

루비 문법에서의 개행이란 무엇인가?

[JA] Ruby's Line Breaks / Yuichiro Kaneko @spikeolaf

  • 루비에서 개행은 문법적으로 문(statement)이 종료될 수 있는 곳에서 문을 종료시키는 역할을 하지만, 렉서(Lexer)의 상태(lex_state)에 따라 무시되거나 강제로 토큰화되는 복잡한 예외가 존재합니다.
  • `lex_state`는 루비 렉서의 핵심적인 부분이면서도 개발자들에게 '혼돈의 문'으로 불릴 만큼 관리 및 이해가 어렵지만, 이를 문법에 통합하여 오토마톤으로 모델링함으로써 동작 원리를 체계적으로 분석할 수 있었습니다.
  • 엔드리스 레인지, 익명 인자, 전역 변수 별칭, BEGIN/END 블록 등 특정 구문에서 개행 처리의 예외 사례가 발견되었으며, 향후 파서가 렉서에게 개행 처리 방식을 명시적으로 전달하도록 문법을 확장하는 방향을 제안합니다.
RubyKaigi 2025년 05월 27일

Steep의 타입 가드: 유형 좁히기와 사용자 정의 타입 가드

[JA] Introducing Type Guard to Steep / Takeshi KOMIYA @tk0miya

  • Steep 1.10에 TYPE for Union Types가 병합되어 `ActiveSupport`의 `present?`와 같은 메서드 호출을 타입 가드로 활용하여 유형 좁히기가 가능해졌습니다.
  • 사용자 정의 타입 가드(User-Defined Type Guards)는 RBS 어노테이션을 통해 개발자가 직접 메서드를 타입 가드로 지정하여 유형을 좁힐 수 있도록 하는 기능으로 현재 개발 중입니다.
  • 타입 가드는 코드의 안정성을 높이고 더 정확한 타입 체크를 가능하게 하여 개발 생산성 향상에 기여하며, 조건부 타입 표현 등 고급 활용 사례도 제시되었습니다.
RubyKaigi 2025년 05월 27일

Ruby에서 Linux PFD(Process File Descriptor)를 활용한 고급 프로세스 관리

[EN] Bringing Linux pidfd to Ruby / Maciej Mensfeld @maciejmensfeld

  • PID 재사용 및 시그널 경합 등 기존 Ruby 프로세스 관리 방식의 한계를 극복하기 위해 Linux PFD(Process File Descriptor) API의 필요성을 강조합니다.
  • FFI를 사용하여 Ruby 애플리케이션에서 Linux PFD API(pidfd_open, pidfd_send_signal, waitid)를 직접 호출하여 안정적인 프로세스 참조, 경합 없는 시그널 전달, 그리고 고급 모니터링 기능을 구현하는 방법을 제시합니다.
  • PFD는 특정 엣지 케이스(잦은 프로세스 생성 및 종료, 비직계 자식 프로세스 모니터링)에 유용하지만, 대부분의 장기 실행 프로세스 관리에는 오버킬이며, 향후 실시간 시그널 지원 및 페이로드 처리 기능에 대한 Ruby 개선을 제안합니다.
RubyKaigi 2025년 05월 27일

5만 레코드/초 처리: Ruby와 JRuby 이야기

[EN] 50.000 processed records per second: a CRuby & JRuby story / Cristian Planas @cristian_planas

  • Zendesk는 Ruby와 JRuby를 활용하여 초당 5만 건의 레코드를 처리하는 ETL 마이크로서비스를 15년간 성공적으로 운영하며 Ruby의 확장 가능성을 입증했습니다.
  • JRuby는 실제 스레드와 Java 라이브러리 접근을 제공하여 과거 Ruby의 GVL 및 메모리 관리 한계를 극복하고 고성능 시스템 구축을 가능하게 했습니다.
  • 최신 C Ruby는 YJIT, Ractors, Concurrent Ruby 등 지속적인 성능 및 동시성 개선을 통해 과거의 단점을 해소하고 있으며, 대다수의 기업에게 Ruby는 여전히 생산성 높은 선택지입니다.
RubyKaigi 2025년 05월 27일

Robocop의 진화: 플러그인, LSP 통합, AST 변화를 통한 미래 지향적 개발

[JA] RuboCop: Modularity and AST Insights / Koichi ITO @koic

  • Robocop은 비공식적인 몽키 패치 방식의 플러그인 시스템을 공식적인 LintRoller 기반의 방식으로 전환하여 유지보수성과 확장성을 개선했습니다.
  • Ruby LSP와 Robocop 내장 LSP 런타임이 어댑터를 통해 통합되어 코드 재사용성을 높이고 중복 파싱을 줄여 성능 향상을 도모합니다.
  • Ruby 3.4 이상 버전에서 Robocop의 기본 파서가 Parser Gem에서 Prism (prism_translation_parser)으로 변경되어 최신 Ruby 문법 지원 및 유지보수성이 강화되었습니다.
RubyKaigi 2025년 05월 27일

RBS와 Steep 문서화 기능 및 내부 API 개선 방안

[EN] API for docs / Soutaro Matsumoto @soutaro

  • Steep은 LSP를 통해 RBS 파일에 정의된 주석 기반의 문서화 기능(호버, 자동 완성, 시그니처 도움말)을 제공합니다.
  • 현재 문서화 시스템은 타입 체커와 긴밀히 결합되어 주석 변경 시 불필요한 전체 타입 검사가 발생하며, 이를 해결하기 위해 '인덱스' API 도입이 제안되었습니다.
  • 메서드 오버로드 식별의 복잡성을 해결하기 위해 정규화된 메서드 타입을 식별자로 사용하는 방안이 제시되었으며, 이는 시스템 분리와 재활용성을 높일 것으로 기대됩니다.
RubyKaigi 2025년 05월 27일

IRB에서 Ruby 코드 분석: Ripper에서 Prism으로의 전환

[JA] Analyzing Ruby Code in IRB / tomoya ishida @tompng

  • IRB는 구문 강조, 자동 들여쓰기, 코드 완성 등 다양한 Ruby 코드 분석 기능을 제공하며, 기존 Ripper::Lexer 기반의 한계를 Prism으로 전환하여 개선하고 있습니다.
  • 구문 분석의 정확도와 유지보수성 향상을 위해 Ripper의 토큰 기반 분석에서 Prism의 AST(추상 구문 트리) 기반 분석으로 전환하는 하이브리드 접근 방식이 도입되고 있습니다.
  • 코드 종료 판정 및 자동 완성 기능은 Prism의 API를 활용하여 기존의 복잡하고 부정확했던 방식들을 표준화하고, 런타임 정보를 더욱 효과적으로 활용하여 정확도를 높일 계획입니다.
RubyKaigi 2025년 05월 27일

런타임 코드 자동 리팩토링을 통한 Deprecation 처리 제안

[JA] On-the-fly Suggestions of Rewriting Method Deprecations / Masato Ohba @ohbarye

  • RubyDepre Gem은 런타임에 Deprecated 메서드 호출을 감지하고, 정의된 규칙에 따라 사용자 코드를 자동으로 리팩토링하거나 패치 파일을 생성하여 Deprecation 해소를 돕는 도구입니다.
  • 이 도구는 Pharo 언어의 DepreWriter에서 영감을 받아 동적 타입 언어의 정적 분석 한계를 극복하고, 개발자의 마이그레이션 부담을 줄이는 것을 목표로 합니다.
  • 현재는 테스트 및 로컬 환경 사용을 전제로 하며, 복잡한 케이스 처리, 효율성 개선, 그리고 Ruby 에코시스템 내 통합 방안 모색이 향후 과제입니다.
RubyKaigi 2025년 05월 27일

Compo 업데이트 및 구현 내용: Ruby 프로젝트의 원 바이너리화

[JA] The Ruby One-Binary Tool, Enhanced with Kompo / ahogappa @ahogappa

  • Compo는 Ruby 프로젝트를 단일 실행 파일(원 바이너리)로 만들어 추가 설치 없이 어디서든 빠르게 실행 가능하게 하는 도구입니다.
  • 이전 버전의 `require` 오버라이딩 방식은 `autoload` 및 파일 접근 제한 등의 문제로 Rails와 같은 대규모 프로젝트에 적용할 수 없었습니다.
  • 가상 파일 시스템(VFS) 구축과 `dlsym`을 활용한 `libc` 함수 랩핑을 통해 `Rails` 프로젝트의 원 바이너리화에 성공했으며, 향후 Gem화 및 크로스 플랫폼 지원을 목표로 합니다.
RubyKaigi 2025년 05월 27일

Ruby의 마법을 포용하며: DSL 정적 분석

[EN] Embracing Ruby magic: Statically analyzing DSLs / Vinicius Stock @vinistock

  • Ruby LSP는 동적 특성을 지닌 Ruby DSL의 정적 분석을 위해 확장 가능한 애드온 API를 도입했습니다.
  • DSL 분석의 주요 난제인 런타임 의존성과 성능 제약을 해결하고자 정확성과 유용성의 균형을 추구합니다.
  • 애드온 API는 선언형 DSL을 위한 인덱싱 강화와 호출 사이트 DSL을 위한 기능별 확장을 통해 유연한 분석을 가능하게 합니다.
jeff 2025년 05월 27일

Monoruby: 더 빠른 Ruby 구현을 위한 JIT 컴파일러와 최적화 전략

[EN] Improving my own Ruby / monochrome @s_isshiki1969

  • Monoruby는 기존 CRuby 인터프리터 대비 3~10배 빠른 성능을 목표로 하는 새로운 Ruby 구현체입니다.
  • 성능 향상을 위해 JIT 컴파일러, 레지스터 상태 추적, 그리고 블록 및 yield 호출에 대한 특수화 기법을 적용합니다.
  • 현재 Gem을 지원하며 번들러 연동을 시도 중이나, C 확장 및 네이티브 스레드 등 일부 CRuby 기능은 지원하지 않습니다.
jeff 2025년 05월 27일

Picoruby를 ESP32 마이크로컨트롤러에 포팅하기

[JA] Porting PicoRuby to Another Microcontroller: ESP32 / Yuhei Okazaki @Y_uuu

  • Picoruby를 저전력, 저비용 IoT 마이크로컨트롤러인 ESP32에 성공적으로 포팅하는 과정을 상세히 설명합니다.
  • 포팅 과정에서 발생하는 워치독 타이머 오류, 스택 오버플로우, 표준 입출력 문제 등 다양한 기술적 난관과 해결책을 제시합니다.
  • 포팅된 Picoruby를 활용하여 ESP32에서 루비 셸, IRB, 그리고 SPI, ADC, PWM을 이용한 블록 깨기 게임 데모를 시연합니다.
RubyKaigi 2025년 05월 27일

순수 Ruby로 구현된 WebAssembly 런타임, Roite

[EN] Running ruby.wasm on Pure Ruby Wasm Runtime / Uchio KONDO @udzura

  • Roite는 순수 Ruby로 작성된 WebAssembly 런타임으로, Ruby 애플리케이션 내에서 Wasm 모듈 실행을 가능하게 하며 높은 이식성과 유지보수성을 제공합니다.
  • Wasm 코어 스펙 및 WASI(WebAssembly System Interface) 지원을 통해 파일 시스템 접근 등 복잡한 애플리케이션 실행을 구현, Ruby 자체를 Roite 위에서 구동하는 데 성공했습니다.
  • 성능 최적화를 위해 블록 점프 계산 캐싱, 객체 인스턴스 생성 최소화 등을 적용했으며, 특히 YJIT 사용 시 최대 57%의 실행 시간 단축 효과를 확인했습니다.
RubyKaigi 2025년 05월 27일

SigStore Ruby: 순수 Ruby로 소프트웨어 보안 검증 클라이언트 구축하기

[EN] The Challenges of Building sigstore-ruby / Samuel Giddins @segiddins

  • sigstore-ruby는 RubyGems 및 Bundler에 통합되어 사용되는 순수 Ruby 기반의 Sigstore 검증 및 서명 클라이언트입니다.
  • Ruby 표준 라이브러리의 제한된 암호화 프리미티브 지원과 JRuby, TruffleRuby 등 다양한 Ruby 구현체 지원으로 인해 수많은 하위 암호화 및 프로토콜 기능을 직접 구현해야 했습니다.
  • Sigstore 프로토콜의 복잡성과 여러 암호화 시스템(X509, TUF, Merkel trees, Signotes)의 결합은 구현을 어렵게 만들었지만, 이는 사양의 정밀성과 이식성을 높이는 데 기여했습니다.
RubyKaigi 2025년 05월 27일

Hotwire 및 HTML ERB 툴링: Herp 파서를 통한 Ruby 개발 경험 개선

[EN] Empowering Developers with HTML-Aware ERB Tooling / Marco Roth @marcoroth

  • Herp는 HTML과 ERB를 동시에 이해하는 C99 기반의 파서로, 기존 HTML 전용 LSP의 한계를 극복하고 Ruby 및 JavaScript 환경에서 정교한 구문 분석을 제공합니다.
  • 이 파서는 ERB 템플릿 내의 컨텍스트를 정확히 파악하여 향상된 자동 완성, 진단, 코드 변환 기능을 가능하게 하며, 개발 생산성을 크게 향상시킵니다.
  • Herp는 포매터, 린터, 스마트 ERB 렌더링 엔진(Reaction View) 및 범용 HTML 템플릿 구문 트리로 확장되어 Ruby 뷰 레이어 툴링의 미래를 제시합니다.
RubyKaigi 2025년 05월 27일