순수 Ruby 프로젝트에서 Rails 콘솔과 같은 환경을 구축하기 위한 주요 단계는 다음과 같습니다.
1. 프로젝트 구조 이해
프로젝트는 main.rb 진입점과 lib 폴더 내에 모든 코드가 모듈화되어 구성됩니다. lib 하위 폴더에는 tax, return_sequences, strategy 등 다양한 도메인별 코드가 포함됩니다. 초기 irb 세션에서는 이 코드들이 자동으로 로드되지 않아 NameError와 같은 오류가 발생합니다.
2. config/environment.rb 정의
config 디렉토리를 생성하고 그 안에 environment.rb 파일을 만듭니다. 이 파일은 프로젝트의 모든 Gem 의존성과 lib 디렉토리 및 그 하위 디렉토리의 모든 Ruby 소스 파일을 로드하는 역할을 합니다.
```ruby # frozen_string_literal: true
Gemfile 및 표준 Ruby 라이브러리에서 모든 의존성 로드
require “descriptive_statistics” require “tty-progressbar” require “yaml” # …
lib 디렉토리와 하위 디렉토리의 모든 프로젝트 소스 파일 로드
Dir.glob(File.expand_path(“../lib/*/.rb”, dir)) { |file| require file } ```
Dir.glob(File.expand_path("../lib/**/*.rb", __dir__)) { |file| require file } 라인은 __dir__, File.expand_path, Dir.glob을 활용하여 lib 폴더 내의 모든 .rb 파일을 찾아 require하는 핵심 로직입니다.
3. 프로젝트 전용 .irbrc 생성
프로젝트 루트 디렉토리에 .irbrc 파일을 생성하여 irb 세션 시작 시 config/environment.rb를 자동으로 로드하도록 설정합니다. 또한, 이 파일을 통해 irb 프롬프트를 프로젝트 이름으로 사용자 정의할 수 있습니다.
```ruby # 프로젝트 소스 모두 로드 require_relative “config/environment” puts “Loaded application”
(선택 사항) 프롬프트 사용자 정의
IRB.conf[:PROMPT][:APP] = { PROMPT_I: “drawdown_simulator> “, PROMPT_N: “drawdown_simulator* “, PROMPT_S: “drawdown_simulator%l “, PROMPT_C: “drawdown_simulator? “, RETURN: “=> %s “ } IRB.conf[:PROMPT_MODE] = :APP
(선택 사항) reload! 메서드 추가
def reload! exec “irb” end ```
reload! 메서드는 애플리케이션 코드 변경 시 irb를 재시작하지 않고 메모리에 로드된 코드를 새로고침하는 편의 기능을 제공합니다.
4. 선택적 bin 스크립트
Rails 프로젝트의 bin/rails console과 같은 ‘근육 기억’을 위해 bin/console 스크립트를 생성할 수 있습니다. 이 스크립트는 irb를 시작하며, .irbrc 파일이 존재하면 해당 설정을 자동으로 활용합니다.
bash
#!/usr/bin/env ruby
require "irb"
# 프로젝트 레벨 .irbrc를 사용하므로 config/environment를 여기서 로드할 필요 없음.
IRB.start
.irbrc 파일을 커밋하지 않으려는 경우, bin/console 스크립트에서 직접 config/environment.rb를 로드하는 대안도 가능합니다.
5. config/environment.rb의 다른 활용
이렇게 구성된 config/environment.rb는 프로젝트의 메인 진입점인 main.rb나 테스트 헬퍼 파일인 spec/spec_helper.rb에서도 활용되어, 여러 곳에서 파일 목록을 수동으로 require하는 중복을 피할 수 있습니다.