Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby Gems, Gemfile 및 번들러(궁극의 가이드)

루비 보석이란 무엇입니까?

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: "git@github.com:rails/rails.git"

branch를 전달할 수 있습니다. 마스터가 아닌 분기의 코드를 사용하는 옵션입니다.

좋아요 :

gem "awesome_print", git: "git@github.com: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 책을 확인하십시오.

읽어주셔서 감사하고 좋은 하루 되세요 🙂