RubyGem 안에 무엇이 들어있는지 미스터리 파헤치기
gem의 구조
각 gem은 이름, 버전, 플랫폼을 가지고 있습니다. 예를 들어
rake gem은 0.8.7
버전 (2009년 5월 기준)을
가지고 있고 플렛폼은 ruby
입니다. 이 말은 Ruby가 돌아가는 어떤 플렛폼에서도
사용 가능하다는 의미입니다.
플랫폼은 CPU 아키텍처, 운영체제 종류나 가끔은 운영체제 버전에 기반합니다.
예를 들어 플랫폼에는 “x86-mingw32” 나 “java” 같은 게 있습니다. 플랫폼은
같은 플랫폼에서 빌드한 루비에서만 gem이 동작하는 것을 나타냅니다. RubyGems는
자동으로 당신의 플랫폼에 맞는 버전을 다운로드합니다. 자세한 내용은
gem help platform
을 보세요.
gem의 내부에는 다음과 같은 구성요소가 있습니다.
- (테스트와 지원 유틸리티를 포함한) 코드
- 문서
- gemspec
각 gem은 같은 코드 구성의 표준 구조를 따릅니다.
% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
여기 gem의 주요 구성요소를 보실 수 있습니다.
lib
디렉터리는 gem을 위한 코드를 포함합니다.- 개발자가 어떤 테스트 프레임워크를 사용하냐에 따라,
test
나spec
디렉터리는 테스트를 포함합니다. - gem은 보통 rake 프로그램에서 테스트 자동화,
코드 생성, 다른 작업을 수행하는데 사용하는
Rakefile
을 가지고 있습니다. - 이 gem은
bin
디렉터리 안에 실행 파일도 가지고 있습니다.bin
디렉터리는 gem이 설치될 때 유저의PATH
에 로드될 것 입니다. - 문서는 보통
README
파일이나 코드 안에 포합됩니다. gem을 설치하면, 문서는 자동으로 생성됩니다. 대부분의 gem은 RDoc 문서를 사용하지만, YARD 문서를 사용하는 것도 있습니다. - 마지막 조각은 gem에 관한 정보를 가지고 있는 gemspec입니다. gem의 파일들, 테스트 정보, 플랫폼, 버전 번호 등이 저자의 이메일, 이름과 함께 여기에 배치됩니다.
Gemspec
6개월 후에 당신과 애플리케이션, gem의 사용자는 누가 언제 gem을 작성했고 무엇을 하는지를 알고 싶어할 것입니다. gemspec은 이런 정보를 가지고 있습니다.
여기 gemspec 파일의 예제가 있습니다. 더 자세한 내용은 gem 만들어 보기에서 배우실 수 있습니다.
% cat freewill.gemspec
Gem::Specification.new do |s|
s.name = 'freewill'
s.version = '1.0.0'
s.summary = "Freewill!"
s.description = "I will choose Freewill!"
s.authors = ["Nick Quaranto"]
s.email = 'nick@quaran.to'
s.homepage = 'http://example.com/freewill'
s.files = ["lib/freewill.rb", ...]
end
gemspec에 관한 더 자세한 정보는 전체 사양 레퍼런스의 각 메타데이터의 상세정보를 확인하세요.
Credits
이 가이드는 Gonçalo Silva 님이 docs.rubygems.org에 올린 오리지널 튜토리얼과 Gem Sawyer, Modern Day Ruby Warrior를 차용했습니다.