Hanami를 WASM에서 실행하는 과정에서 저자는 몇 가지 주요 도전 과제에 직면했습니다. WASM 패키지에 사용자 정의 Gem을 포함할 때의 복잡성과 BigDecimal
와 같이 WASM으로 컴파일되지 않는 특정 Gem 문제가 대표적이었습니다. 저자는 BigDecimal
의 더미 구현을 제공하고 WASM 컴파일러가 해당 Gem 컴파일을 건너뛰도록 강제하는 방법을 통해 이를 해결했습니다. 이 과정에서 ruby.wasm
저장소와 Vladimir Dementyev의 자료에서 많은 도움을 받았습니다.
현재 구현은 Hanami의 전체 프레임워크가 아닌, hanami-controller
및 hanami-validations
Gem을 사용한 기본적인 액션과 유효성 검사 기능만을 브라우저에서 실행합니다. 이는 WASM의 현재 한계와 Ruby 지원의 제약으로 인해 전체 프레임워크 포팅과는 거리가 있음을 명확히 합니다.
글에서는 WASM 패키지 로드, Gem 및 shim을 사용한 가상 머신(VM) 초기화, 그리고 에디터의 Ruby 코드를 실행하는 JavaScript 스니펫을 제시합니다. 또한, ruby_wasm
도구를 사용하여 bigdecimal
Gem을 제외하고 WASM 패키지를 빌드하는 Ruby 스크립트도 포함되어 있습니다.