웹사이트 검색

IRB를 사용하여 Ruby를 탐색하는 방법


소개

Interactive Ruby의 줄임말인 IRB는 파일을 만들지 않고도 Ruby 프로그래밍 언어를 탐색하고 코드를 시험해 볼 수 있는 빠른 방법입니다. IRB는 많은 최신 프로그래밍 언어에서 제공하는 도구인 Read-Eval-Print Loop 또는 REPL입니다. 이를 사용하려면 irb 실행 파일을 실행하고 프롬프트에 Ruby 코드를 입력합니다. IRB는 입력한 코드를 평가하고 결과를 표시합니다.

IRB는 Ruby의 모든 내장 기능과 설치한 라이브러리 또는 gem에 대한 액세스를 제공합니다. 또한 IRB를 구성하여 명령 기록을 저장하고 코드 자동 완성을 활성화할 수도 있습니다.

이 자습서에서는 IRB를 사용하여 일부 코드를 실행하고, 출력을 검사하고, 외부 라이브러리를 가져오고, IRB 세션을 사용자 지정합니다.

IRB 시작 및 중지

Ruby가 설치되어 있으면 IRB가 설치됩니다. 명령줄 인터페이스에서 irb 명령을 실행하여 Ruby가 설치된 모든 컴퓨터에서 시작할 수 있습니다.

  1. irb

IRB 프롬프트가 표시됩니다.

IRB session
irb(main):001:0>

프롬프트는 IRB를 실행 중이고 실행하는 모든 것이 Ruby 프로그램의 최상위 기본 컨텍스트인 main 컨텍스트에서 실행됨을 나타냅니다. 줄 번호도 표시됩니다.

참고: Ruby를 RVM과 함께 설치한 경우 프롬프트가 약간 다르게 보일 수 있으며 대신 버전 번호가 표시됩니다.

IRB session from RVM
2.4.0 :001 >

이 튜토리얼 전체에서 프롬프트를 표시하려면 irb --prompt inf-ruby를 사용하여 IRB를 시작합니다.

IRB는 프롬프트에 입력할 수 있는 Ruby 구문을 허용합니다. 두 개의 숫자를 함께 추가하여 사용해 보세요.

  1. 2 + 2

ENTER 키를 누르면 IRB가 결과를 표시합니다.

IRB session
=> 4

=> 기호는 이것이 Ruby 표현식의 반환 값임을 알려줍니다.

IRB를 종료하려면 프롬프트에 exit를 입력하거나 CTRL+D를 누르십시오. 쉘 프롬프트로 돌아갑니다.

IRB를 사용하여 코드를 탐색하는 방법을 살펴봄으로써 IRB에 대해 좀 더 깊이 파고들겠습니다.

IRB 세션에서 코드 실행

IRB는 문제에 대한 좋은 해결책인지 확인하기 위해 코드를 시험해 볼 수 있는 좋은 방법입니다. Ruby의 거의 모든 것이 어떤 값을 반환하며 IRB에서 명령문을 실행할 때마다 반환 값이 화면에 출력되는 것을 볼 수 있습니다.

이를 시연하려면 새 IRB 세션에서 다음 명령문을 실행하십시오.

  1. puts "Hello World"

ENTER 키를 누르면 IRB에서 두 가지 결과가 표시됩니다.

OUTPUT
Hello World => nil

첫 번째 결과는 puts 메서드의 출력으로 지정한 문자열과 줄바꿈을 인쇄합니다. puts 메소드는 화면인 표준 출력 장치에 텍스트를 인쇄합니다. 그러나 puts 메서드에는 반환 값이 있습니다. Ruby의 모든 메서드에는 반환 값이 있기 때문입니다. puts 메서드는 nil을 반환하며 이것이 IRB에서 보여주고 있는 것입니다.

문을 실행할 때마다 프롬프트가 변경되어 새 줄 번호를 나타냅니다.

irb(main):001:0> puts "Hello World"
Hello World
=> nil
irb(main):002:0>

이것은 오류 메시지가 줄 번호를 참조하기 때문에 IRB 세션에서 더 복잡한 표현식을 수행할 때 명령문을 디버그하는 데 도움이 될 수 있습니다.

독립 실행형 Ruby 프로그램에서와 마찬가지로 IRB 세션에서 변수에 값을 할당할 수 있습니다. IRB 세션에 입력하고 ENTER를 눌러 이 명령문을 실행합니다.

  1. birth_year = 1868

이 명령문의 반환 값이 다시 표시되는 것을 볼 수 있습니다.

IRB session
=> 1868

변수 birth_year는 이 값을 보유하지만 Ruby의 대부분의 명령문이 값을 반환하므로 IRB는 여기에서도 반환 값을 보여줍니다.

두 개의 변수를 더 추가합니다. 먼저 death_year라는 변수를 만듭니다.

  1. death_year = 1921

그런 다음 death_year에서 birth_year를 빼서 변수 age_at_death를 만듭니다.

  1. age_at_death = death_year - birth_year

IRB는 변수에 값을 할당하지만 결과도 보여줍니다.

IRB session
=> 53

IRB 세션에 있을 때 원하지 않는 경우 명시적인 puts 또는 print 문을 사용할 필요가 없습니다. 반환 값이 표시됩니다.

여러 줄에 걸쳐 있는 코드를 작성하고 싶을 때가 있습니다. IRB는 이를 직관적으로 지원합니다. IRB는 구문적으로 완전한 코드만 실행합니다. 다음 Ruby 코드는 select 메서드를 사용하여 이름에 문자 "a\가 포함된 상어만 반환합니다. IRB 세션에 이 코드를 입력하고 각 줄 끝에서 ENTER를 누릅니다.

["Tiger", "Great White", "Angel"].select do |shark|
shark.include?("a")
end

IRB를 사용하면 여러 줄의 코드를 입력할 수 있지만 코드가 구문적으로 완전하다고 생각할 때만 코드를 실행합니다. IRB가 별표(*)를 사용하고 다른 범위를 나타내기 위해 마지막 0을 1로 변경하여 아직 코드를 평가하지 않음을 나타내도록 프롬프트가 변경됩니다.

IRB session
irb(main):005:0> ["Tiger", "Great White", "Angel"].select do |shark| irb(main):006:1* shark.include?("a") irb(main):007:1> end

첫 번째 줄에 do 키워드가 포함되어 있으므로 IRB는 end 키워드를 만날 때까지 아무것도 실행하지 않습니다. 그런 다음 결과를 표시합니다.

IRB session
=> ["Great White"]

IRB를 사용하면 코드를 테스트하여 자신의 프로그램에 통합하기 전에 어떻게 작동하는지 확인할 수 있습니다. IRB를 사용하여 외부 라이브러리로 작업할 수도 있습니다.

라이브러리 및 보석 사용

Ruby 프로그램에서와 마찬가지로 require 문을 사용하여 라이브러리를 IRB 세션으로 가져올 수 있습니다. 이러한 라이브러리는 Ruby의 표준 라이브러리에 포함된 것, 직접 작성한 것 또는 gem, gem 명령을 사용하여 설치하는 Rubygems.org를 통해 배포된 Ruby 라이브러리일 수 있습니다.

Ruby의 표준 라이브러리에는 웹 요청을 만들고 결과를 가져오는 모듈이 포함되어 있습니다. Ruby 프로그램에서와 마찬가지로 IRB 세션에서 사용할 수 있습니다.

Ruby의 표준 라이브러리에서 Net/HTTP를 가져오려면 require 문을 사용하십시오. IRB 세션에 다음 코드 줄을 입력하고 ENTER를 누릅니다.

require 'net/http'

IRB는 이 문이 라이브러리가 성공적으로 로드되었음을 알려주는 true를 반환함을 나타냅니다. 이제 이 코드를 IRB에 입력하여 외부 IP 주소를 가져오도록 icanhazip.com에 요청합니다.

uri = URI.parse("http://icanhazip.com")
response = Net::HTTP.get_response uri
response.body

각 줄을 입력할 때 IRB는 반환 값을 표시하므로 각 단계를 디버깅할 수 있습니다.

IRB session
irb(main):010:0> uri = URI.parse("http://icanhazip.com") => #<URI::HTTP http://icanhazip.com> irb(main):011:0> response = Net::HTTP.get_response uri => #<Net::HTTPOK 200 OK readbody=true> irb(main):012:0> response.body => 203.0.113.52\n

라이브러리를 찾을 수 없는 경우 다른 응답이 표시됩니다. HTTP 요청 작업을 좀 더 쉽게 해주는 HTTParty 라이브러리를 가져오십시오.

require 'httparty'

다음 메시지가 표시됩니다.

IRB session
LoadError: cannot load such file -- httparty

이 메시지는 원하는 라이브러리를 사용할 수 없음을 알려줍니다. HTTParty는 gem으로 배포되므로 설치해야 합니다. 프롬프트로 돌아가려면 CTRL+D를 사용하여 IRB 세션을 종료하거나 exit를 입력하십시오. 그런 다음 gem 명령을 사용하여 httparty gem을 설치합니다.

  1. gem install httparty

이제 irb를 다시 시작하십시오.

  1. irb

모듈을 다시 로드해 보십시오. IRB 세션에서 다음 코드를 입력합니다.

require 'httparty`

이번에는 IRB가 true를 표시하여 라이브러리를 로드할 수 있음을 알려줍니다. IRB에 다음 코드를 입력하여 사용해 보세요.

response = HTTParty.get("http://icanhazip.com")
response.body

출력이 화면에 인쇄되는 것을 볼 수 있습니다.

IRB session
=> 203.0.113.52\n

이제 IRB로 자신의 Ruby 코드를 탐색하고 테스트하는 방법을 살펴보겠습니다.

IRB에 코드 로드

IRB 세션을 시작하고 -r 스위치를 사용하면 IRB가 시작될 때 로드할 라이브러리 또는 gem을 지정할 수 있습니다. 예를 들어 irb -r httparty는 이미 로드된 httparty gem으로 IRB 세션을 시작합니다. 즉, 명시적인 require httparty 문을 건너뛸 수 있습니다.

그러나 이를 사용하여 자신의 코드를 새 세션에 로드할 수도 있습니다. 이는 코드를 탐색하거나 테스트할 때 유용합니다.

exit를 입력하거나 CTRL+D를 눌러 IRB 세션을 종료합니다.

ip_grabber.rb라는 새 Ruby 파일을 생성합니다. 이 파일은 URL이 제공되면 외부에서 머신의 IP 주소. HTTParty 라이브러리를 사용하여 icanhazip.com에서 응답을 가져옵니다. 자신의 프로그램에서 이 IPGrabber 개체를 사용하여 코드를 외부 변경으로부터 보호할 수 있습니다. obect를 사용하면 나머지 코드가 작동하는 방식을 변경하지 않고도 기본 라이브러리와 IP 주소를 확인하는 데 사용하는 사이트를 전환할 수 있습니다.

다음 코드를 파일에 추가하여 클래스를 정의합니다.

require 'httparty'
class IPGrabber

def initialize()
@url = "http://icanhazip.com"
end

def get
response = HTTParty.get(@url)
response.body.chomp # remove the \n if it exists
end
end

파일을 저장하고 편집기를 종료합니다.

그런 다음 IRB를 시작하고 이 파일을 로드합니다. gem이나 내장 라이브러리가 아닌 로컬 파일이므로 경로를 지정해야 합니다. 또한 파일의 .rb 확장자를 지정할 필요가 없습니다.

  1. irb -r ./ip_grabber

IRB 세션이 로드되고 다음과 같이 세션에서 이 새 객체를 사용할 수 있습니다.

ip = IPGrabber.new
ip.get

다음 출력이 표시됩니다.

IRB session
=> 203.0.113.52

자신의 코드를 IRB 세션에 로드하면 전체 프로그램에 통합하기 전에 코드를 검사하고 자신의 라이브러리로 작업할 수 있습니다.

이제 IRB 세션에서 코드로 작업하는 방법을 알았으므로 IRB 세션을 사용자 지정하는 방법을 살펴보겠습니다.

IRB 커스터마이징

IRB 세션을 사용자 지정할 수 있는 .irbrc라는 구성 파일을 만들 수 있습니다. 그런 다음 자동 완성, 들여쓰기 및 명령 기록에 대한 지원을 추가할 수 있습니다.

홈 디렉터리에 다음 파일을 만듭니다.

  1. nano ~/.irbrc

먼저 IRB에서 자동 완성 지원을 구성합니다. 이렇게 하면 TAB 키를 사용하여 IRB에서 개체, 변수 이름 및 메서드 이름을 자동 완성할 수 있습니다.

require 'irb/completion'

다음으로 명령 기록을 외부 파일에 저장하기 위한 지원을 추가합니다.

IRB.conf[:SAVE_HISTORY] = 1000

이 기능을 사용하면 입력한 마지막 1000개의 명령문이 홈 디렉토리의 .irb_history 파일에 기록됩니다.

또한 새 IRB 세션을 열면 기록이 자동으로 로드되며 아래 화살표 키를 사용하여 이러한 항목 사이를 이동하거나 <CTRL+R Bash 셸에서와 마찬가지로 역방향 검색을 수행합니다.

다른 히스토리 파일을 지정하려면 다음을 구성 파일에 추가하십시오.

IRB.conf[:HISTORY_FILE] = '~/your_history_filename'

다음으로 구성 파일에 이 줄을 추가하여 클래스, 메서드 및 블록을 작성할 때 편리한 자동 들여쓰기를 활성화합니다.

IRB.conf[:AUTO_INDENT] = true

구성 파일에는 추가 유효한 Ruby 코드가 포함될 수 있습니다. 즉, 헬퍼 메서드를 정의하거나 require를 사용하여 추가 라이브러리를 로드할 수 있습니다. 예를 들어, 기록을 표시하는 IRB 세션에 history 도우미를 추가하려면 다음 코드를 .irbrc에 추가합니다.

def history
history_array = Readline::HISTORY.to_a
print history_array.join("\n")
end

IRB 세션을 로드할 때 history를 입력하면 IRB 기록을 볼 수 있습니다. 꽤 많이 가지고 있을 수 있으므로 history 명령을 변경하여 표시할 선택적 줄 수를 지정할 수 있습니다. history 함수의 코드를 count라는 선택적 인수를 사용하고 표시하는 항목을 제한하는 데 사용하는 다음 코드로 바꿉니다.


# history command
def history(count = 0)

# Get history into an array
history_array = Readline::HISTORY.to_a

# if count is > 0 we'll use it.
# otherwise set it to 0
count = count > 0 ? count : 0

if count > 0
from = history_array.length - count
history_array = history_array[from..-1]
end

print history_array.join("\n")
end

파일을 저장하고 새 IRB 세션을 시작합니다. 그런 다음 history 2를 입력하면 기록의 마지막 두 줄만 표시됩니다.

.irbrc를 사용하여 자주 사용하는 라이브러리를 로드할 수 있지만 로드하는 각 라이브러리는 IRB 세션의 로드 시간을 증가시켜 사용하기 불편할 수 있습니다. require 문을 사용하여 특정 라이브러리를 수동으로 로드하는 것이 더 나은 경우가 많습니다.

결론

IRB는 Ruby 코드를 실험할 수 있는 장소를 제공합니다. 파일에 넣기 전에 프로그램 논리를 해결하는 좋은 방법입니다.

이제 IRB에 익숙해졌으므로 이 자습서를 따르고 IRB를 사용하여 예제를 실행하여 Ruby의 다양한 데이터 유형을 탐색하는 데 사용할 수 있습니다.

  • Ruby의 데이터 유형 이해
  • Ruby에서 문자열로 작업하는 방법
  • Ruby에서 문자열 메서드로 작업하는 방법
  • 루비에서 배열로 작업하는 방법
  • Ruby에서 배열 메서드를 사용하는 방법