루비 보석이란 무엇입니까?
gem은 다운로드하여 설치할 수 있는 패키지입니다. 설치된 gem이 필요할 때 Ruby 프로그램에 추가 기능을 추가하는 것입니다.
보석을 사용하면 :
- Rails 앱에 로그인 기능 추가
- 외부 서비스(예:API)로 쉽게 작업
- 웹 애플리케이션 구축
이것은 단지 몇 가지 예일 뿐입니다. 모든 보석에는 고유한 목표가 있습니다.
보석을 사용하는 이유는 무엇입니까?
- Ruby에서 라이브러리 및 도구를 공유하는 방법입니다.
- Gem의 파일 구조 및 형식을 통해 작동 방식을 쉽게 이해할 수 있습니다.
- 모든 gem과 함께 제공되는 사양(".spec") 파일은 종속성(다른 필수 gem)을 설명하므로 코드가 작동하는 데 필요한 모든 것을 포함합니다.
RubyGems 덕분에 gem install
한 번으로 유용한 라이브러리의 풍부한 생태계를 갖게 되었습니다. 떨어져!
특정 프로젝트에 필요한 gem 목록은 "Gemfile"이라는 특수 파일에 나열할 수 있으므로 Bundler에서 자동으로 설치할 수 있습니다. 둘 다 이 가이드의 뒷부분에서 다룹니다.
보석의 예는 무엇입니까?
- Rails 및 모든 구성 요소(ActiveRecord, ActiveSupport 등)는 Ruby gem으로 배포됩니다.
- irb의 강력한 대안인 Pry
- 인기 있는 XML 및 HTML 파서인 Nokogiri
대부분의 gem은 순수한 Ruby 코드입니다.
몇 가지 보석에는 성능 향상을 위한 Ruby C 확장이 포함됩니다.
이 확장은 gem을 설치할 때 자동으로 빌드됩니다. 경우에 따라 RubyGems에서 관리하지 않는 추가 소프트웨어를 수동으로 설치해야 할 수도 있습니다.
지금 :
자신만의 gem을 만들고 gem을 만드는 파일을 보고 gem에 대해 더 자세히 알아보겠습니다.
RubyGem을 구축하는 방법
bundle gem <name>
을(를) 실행하여 새 gem을 위한 파일을 준비할 수 있습니다. .
예를 들어 :
bundle gem awesome_gem
보석은 다음 구조로 구성됩니다. :
├── awesome_gem.gemspec ├── bin │ ├── console │ └── setup ├── Gemfile ├── lib │ ├── awesome_gem │ │ └── version.rb │ └── awesome_gem.rb ├── Rakefile ├── README.md └── test ├── awesome_gem_test.rb └── test_helper.rb
이 .gemspec
파일은 보석에 대한 모든 정보를 찾을 수 있는 곳입니다. .
포함 :
- 보석 이름
- 보석 요약(간단한 설명)
- 저자 이름
- 종속성 목록
- 젬에 포함할 파일 목록
- 선택 사항:작성자의 이메일 주소, 프로젝트 URL(홈페이지), 실행 파일, c 확장자, 자세한 설명
gem 버전 자체는 lib/<gem_name>/version.rb
에 상수로 정의되어 있습니다. .
젬 사양의 예 :
Gem::Specification.new do |spec| spec.name = "awesome_gem" spec.version = AwesomeGem::VERSION spec.authors = ["Jesus Castello"] spec.summary = "Example gem for article about Ruby gems" spec.files = Dir['**/**'].grep_v(/.gem$/) spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.16" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "minitest", "~> 5.0" end
require_paths
array는 필요할 때 Ruby가 gem 파일을 찾는 곳입니다. 이렇게 하면 lib/<gem_name>/
아래에 코드를 넣을 수 있습니다. 그런 다음 require "<gem_name>/<file_name>"
으로 요구하십시오. .
예를 들어 :
lib/awesome_gem/parser.rb
라는 파일 require "awesome_gem/parser"
로 필요합니다. 보석 안의 어느 곳에서나.
대부분의 요구 사항은 lib/<gem_name>.rb
에 있습니다. (/lib
의 루트에 있는 유일한 파일 ).
require
때 로드되는 파일입니다. 보석!
다음 :
add_development_dependency
라인은 개발 중에 사용할 gem을 정의합니다.
minitest, RSpec 또는 pry와 같은 보석입니다.
add_dependency
동안 코드의 일부로 사용하는 gem을 정의합니다.
요약 및 설명을 기본값에서 변경하면... bin/console
을 사용하여 gem과 함께 irb 세션을 로드할 수 있습니다. bundle gem
프로그램 당신을 위해 만듭니다.
예 :
$ bin/console irb(main):001:0> irb(main):002:0> irb(main):003:0> AwesomeGem => AwesomeGem irb(main):004:0> irb(main):005:0> AwesomeGem::VERSION => "0.1.0"
그런 다음 gem build <name>.gemspec
을 사용하여 gem을 패키징할 수 있습니다. &gem push
를 사용하여 rubygems.org에 게시 .
번들러란 무엇입니까?
Ruby 보석에 대해 배우는 동안 Bundler에 대해서도 읽을 수 있습니다. .
하지만 번들러가 정확히 무엇인가요?
번들러는 종속성 관리를 위한 도구입니다. .
RubyGems에서 이미 처리하지 않았습니까?
글쎄요... 하지만 보석 자체에 대해서만 .
일반 Ruby 애플리케이션은 보석으로 빌드되지 않으므로 이 기능을 사용할 수 없습니다.
그것이 번들러가 존재하는 이유입니다!
Gemfile 이해
Gemfile
파일?
여기에서 Ruby 애플리케이션에 사용할 보석을 작성합니다. .
이 보석은 require
필요 없이 로드됩니다. 그들.
Gemfile은 다음과 같습니다. :
ruby '2.5.0' gem 'rails', '~> 5.2.1' gem 'sqlite3' gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false
Bundler(및 버전 2.0 이후의 RubyGems)는 이 파일을 읽고 이러한 gem의 요청된 버전을 설치할 수 있습니다.
이것은 bundle install
를 실행할 때 표시되어야 하는 것입니다. 명령:
Using turbolinks-source 5.1.0 Using turbolinks 5.1.1 Using uglifier 4.1.18 Using web-console 3.6.2 Bundle complete! 18 Gemfile dependencies, 78 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.
지금 :
이 기호는 무엇입니까(예:~>
) Gemfile에 있는 모든 gem의 버전을 선언할 때 사용합니까?
이를 통해 다양한 버전을 요청할 수 있습니다. .
"버전이 1.2 이상, 2.0 미만이길 원합니다"와 같이 말할 수 있습니다.
다음과 같이 표시됩니다.
gem 'puma', '~> 1.2'
~>
이 범위의 바로 가기입니다. :
gem 'puma', '>= 1.2', '< 2.0'
~> 5.2.1
의 경우 , 정확히 이것을 의미합니다. :
'>= 5.2.1', '< 5.3'
버전 번호가 구체적일수록 버전 범위가 더 제한됩니다.
Gemfile 옵션 및 Gemfile.lock
Gemfile 내부에 gem이 필요한 경우 몇 가지 옵션이 있습니다.
예를 들어 :
GitHub와 같은 다른 소스에서 gem을 가져올 수 있습니다.
이것은 최신 버전의 프로젝트를 사용해야 할 때 유용합니다. , rubygems.org에 아직 출시되지 않은 경우에도 마찬가지입니다.
다음은 예입니다.
gem "rails", git: "[email protected]:rails/rails.git"
branch
를 전달할 수 있습니다. 마스터가 아닌 분기의 코드를 사용하는 옵션입니다.
좋아요 :
gem "awesome_print", git: "[email protected]:awesome-print/awesome_print.git", branch: "v2"
찾을 수 있는 또 다른 옵션은 require: false
입니다. .
무엇을 합니까?
보석을 자동으로 요구하지 않도록 Bundler에 지시합니다. 즉, require
필요할 때 코드에 추가하세요.
범위가 제한된 보석에 사용됩니다.
예를 들어 :
특정 레이크 작업에서 사용하지만 Rails 컨트롤러 및 모델에서는 사용하지 않는 보석입니다. 필요할 때만 gem을 로드하기 때문에 앱 코드의 메모리를 절약할 수 있다는 이점이 있습니다.
환경별로 보석을 그룹화할 수도 있습니다. .
즉, capybara
와 같이 개발 중에만 설치 및 로드되는 gem을 가질 수 있습니다. &pry
).
마지막으로 번들러는 Gemfile.lock
을 생성합니다. .
차이점은 무엇입니까?
Gemfile.lock
자동 생성 &정확히 설치된 모든 gem의 버전이 표시됩니다. .
Bundler는 이러한 버전을 설치하므로 이 애플리케이션을 프로덕션에 배포하거나 다른 개발자와 프로젝트를 공유할 때 모두가 동일한 gem 세트로 작업하게 됩니다.
유용한 보석 및 번들러 명령
명령 | 설명 |
---|---|
보석 목록 | 설치된 모든 gem을 나열합니다. 이름으로 gem을 필터링하기 위한 인수를 허용합니다(예:gem list active ) |
젬이 설치된 경로를 제공합니다. | |
보석 검색 <이름> | 구성된 소스에서 보석을 검색합니다(기본값:rubygems.org). 정규식 사용(예:gem search "\Aawesome_" ). |
보석 환경 | Gem 환경(버전, 경로, 구성)에 대한 정보를 표시합니다. |
젬 설치 <이름> -v <버전> | 특정 gem 버전을 설치할 수 있습니다(예:gem install sinatra -v 2.0.0 ). |
번들 비주얼리제이션 | 현재 프로젝트에 대한 종속성 그래프의 시각화를 생성합니다. |
번들 쇼 | 번들러를 통해 설치된 특정 gem에 대한 정보를 표시합니다. Gemfile이 있는 폴더 안에 있어야 합니다. |
번들이 오래됨 | 현재 프로젝트의 오래된 gem 목록을 표시합니다. --groups 를 사용할 수 있습니다. 그룹화하는 옵션입니다. |
번들 콘솔 | 현재 프로젝트의 Gemfile에서 gem으로 irb 세션을 실행합니다. |
요약
Ruby용 패키지 시스템인 RubyGems에 대해 배웠습니다. 또한 gem이 어떻게 구성되는지, Gemfile이 무엇인지, 번들러가 무엇인지, Gemfile
&Gemfile.lock
.
이 정보가 유용하셨기를 바랍니다!
이 기사를 공유하고 아직 뉴스레터를 구독하지 않았다면(9000명 이상의 Ruby 개발자!) 뉴스레터를 구독하고 내 Ruby 책을 확인하십시오.
읽어주셔서 감사하고 좋은 하루 되세요 🙂