피드로 돌아가기
Adding a Scripting Engine to a Rust CLI with Rhai
Dev.toDev.to
Backend

diesel-guard가 Rhai 스크립트 엔진을 통합하여 사용자가 런타임에 커스텀 마이그레이션 체크 규칙을 작성할 수 있게 되었다

Adding a Scripting Engine to a Rust CLI with Rhai

Alex Yarotsky2026년 4월 1일9intermediate

Context

diesel-guard는 Postgres 마이그레이션의 잠금 문제를 감지하는 linter로 28개의 내장 체크를 제공한다. 사용자들이 team별 명명 규칙이나 DBA 요구사항에 맞는 커스텀 체크를 요청하게 되었다.

Technical Solution

  • Rhai crate를 "serde", "sync" 피처와 함께 Cargo.toml에 추가한다
  • 모든 체크(내장/커스텀)가 동일한 Check trait를 구현하도록 구조화한다
  • rhai::serde::to_dynamic()으로 Rust struct를 Dynamic 값으로 직렬화한다
  • protobuf enum variants가 map keys로 변환되어 스크립트에서 접근 가능하다
  • diesel-guard.toml의 custom_checks_dir에 Rhai 스크립트 파일을 배치한다

Impact

스크립트 로딩 시 재컴파일 없이 런타임에 규칙을 적용할 수 있다

Key Takeaway

trait 기반 아키텍처로 내장과 커스텀 구현의 경계를 제거하면 확장성이 크게 향상된다


Rust CLI 도구에서 사용자 정의 규칙을 런타임에 로드해야 하는 환경에서 Rhai를 엔진으로 활용 시 serde 피처와 to_dynamic() 변환으로 Rust 타입과 스크립트를 자연스럽게 연결할 수 있다

원문 읽기