Rails 8.1의 로컬 CI 기능: 개발 워크플로우의 일관성 및 효율성 혁신

Rails 8.1 Local CI as First-Class Support

작성자
발행일
2025년 10월 14일

핵심 요약

  • 1 Rails 8.1은 `config/ci.rb`와 `bin/ci`를 통해 로컬 개발 환경과 CI 서버 간의 워크플로우를 표준화하는 Local CI 기능을 도입하여 개발 일관성을 크게 향상시킵니다.
  • 2 Local CI는 '로컬에서는 성공, CI에서는 실패'와 같은 문제를 줄이고, CI 서비스 비용 절감 및 개발자 온보딩을 간소화하여 효율적이고 예측 가능한 개발 환경을 제공합니다.
  • 3 이 기능은 테스트, 보안 검사, 린트 등 다양한 작업을 통합하는 단일 진실 공급원 역할을 하지만, 고급 CI 서비스의 매트릭스 빌드나 캐싱과 같은 기능은 기존 시스템에 의존합니다.

도입

Rails 8.1은 Rails World 2025 키노트에서 DHH에 의해 처음 공개되었으며, 애플리케이션 구축, 유지보수, 협업을 간소화하는 다양한 도구를 선보였습니다. 특히 개발자 경험과 일관된 워크플로우에 중점을 두어 팀이 일반적인 문제점을 피하고 원활하게 협력할 수 있도록 돕습니다. 현대 Rails 개발의 핵심인 지속적 통합(CI)은 로컬 환경과 CI 서버 간의 테스트 명령, 번들러, 젬 버전 등의 차이로 인해 불일치가 발생할 수 있었는데, Rails 8.1은 이러한 문제를 해결하기 위해 Local CI를 핵심 기능으로 도입했습니다.

Rails 8.1의 Local CI는 config/ci.rb 파일에 정의된 간단한 DSL과 새로운 bin/ci 러너를 통해 로컬 머신과 CI 서버 전반에 걸쳐 워크플로우를 표준화합니다.

Local CI의 핵심 기능

config/ci.rb를 통한 워크플로우 정의

  • ci.workflow 블록 내에서 taskrun을 사용하여 각 단계를 정의합니다.

  • task는 단계의 이름을 부여하고, run은 실행될 명령어를 설정합니다.

  • 이는 애플리케이션 검증 방식에 대한 신뢰할 수 있는 단일 참조 역할을 합니다.

ruby # config/ci.rb (예시) ci.workflow do task "Lint" do run "bundle exec rubocop" end task "Tests" do run "bin/rails test" end task "System Tests" do run "bin/rails test:system" end end

bin/ci를 통한 로컬 워크플로우 실행

  • bin/ci 명령어를 통해 config/ci.rb에 정의된 작업을 순서대로 실행합니다.

  • 이는 여러 명령어를 기억하거나 CI와 동일한 검사를 수행하는지 고민할 필요를 없애줍니다.

  • 로컬에서 테스트를 실행함으로써 CI 서비스 사용 비용을 절감하고, CI 파이프라인 실행 시간을 단축하여 개발자 시간을 절약할 수 있습니다.

  • 새로운 Rails 8.1 앱은 기본적으로 설정, 스타일, 보안 감사(Gem audit, Importmap audit, Brakeman), Rails 및 시스템 테스트, 시드 테스트 등 포괄적인 CI 단계를 포함합니다.

  • 선택적으로 GitHub CLI와 gh-signoff 확장을 사용하여 모든 CI 단계 통과 시 GitHub 커밋 상태를 자동으로 ‘병합 준비 완료’로 설정할 수 있습니다.

CI 서버 통합

  • GitHub Actions와 같은 CI 파이프라인에서도 단순히 bin/ci를 호출하여 동일한 워크플로우를 실행할 수 있습니다.

  • 이를 통해 CI 서버와 개발자가 ‘통과 빌드의 기준’에 대한 정확히 동일한 정의를 공유하게 됩니다.

yaml # .github/workflows/ci.yml (예시) jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ruby/setup-ruby@v1 with: ruby-version: 3.4 - run: bin/ci

추가 작업 통합

  • Local CI DSL은 테스트 외에도 보안 검사(brakeman, bundler-audit), JavaScript 린터(yarn eslint), 데이터베이스 마이그레이션 등 파이프라인에서 실행하는 모든 작업을 포함할 수 있습니다.

결론

Rails 8.1의 Local CI 기능은 아직 초기 단계이지만, 그 파급력은 매우 큽니다. 이 기능은 `config/ci.rb`를 워크플로우의 단일 진실 공급원으로 삼고 `bin/ci`를 실행기로 제공함으로써, 로컬 개발과 지속적 통합 간의 불일치를 효과적으로 제거합니다. Local CI는 매트릭스 빌드, 캐싱, 시크릿 관리와 같은 고급 CI 서비스의 모든 기능을 대체하도록 설계된 것은 아니며, '무엇을 실행할 것인가'를 정의하는 워크플로우 정의 레이어 역할을 합니다. 그럼에도 불구하고, 개발 일관성, 온보딩 간소화, '로컬은 성공, CI는 실패' 상황 감소, 그리고 Rails의 '배터리 포함' 철학을 강화하는 데 있어 중요한 진전을 이루었습니다. 이 작은 추가 기능은 Rails 개발 워크플로우에 큰 변화를 가져올 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!