layout | title | url | previous | next |
---|---|---|---|---|
default |
gem이란 무엇인가? |
/what-is-a-gem |
/rubygems-basics |
/make-your-own-gem |
RubyGem 안에 무엇이 들어있는지 미스터리 파헤치기
각 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 파일에 대한 더 자세한 정보]({{ site.baseurl }}/specification-reference/)
[gem 만들어 보기]({{ site.baseurl }}/make-your-own-gem/)
6개월 후에 당신과 애플리케이션, gem의 사용자는 누가 언제 gem을 작성했고 무엇을 하는지를 알고 싶어할 것입니다. gemspec은 이런 정보를 가지고 있습니다.
여기 gemspec 파일의 예제가 있습니다. 더 자세한 내용은 [gem 만들어 보기]({{ site.baseurl }}/make-your-own-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 = '[email protected]'
s.homepage = 'http://example.com/freewill'
s.files = ["lib/freewill.rb", ...]
end
gemspec에 관한 더 자세한 정보는 전체 [사양 레퍼런스]({{ site.baseurl }}/specification-reference)의 각 메타데이터의 상세정보를 확인하세요.
이 가이드는 Gonçalo Silva 님이 docs.rubygems.org에 올린 오리지널 튜토리얼과 Gem Sawyer, Modern Day Ruby Warrior를 차용했습니다.