Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Ruby Gems、Gemfile&Bundler(究極のガイド)

Ruby gemとは何ですか?

gemは、ダウンロードしてインストールできるパッケージです。インストールされたgemが必要な場合は、Rubyプログラムに機能を追加します。

宝石を使用すると

  • Railsアプリにログイン機能を追加する
  • 外部サービス(APIなど)を簡単に操作できます
  • Webアプリケーションを構築する

それはほんの一例です。すべての宝石には独自の目標があります。

なぜ宝石を使用するのですか?

  • Rubyでライブラリとツールを共有する方法です
  • gemのファイル構造と形式により、gemがどのように機能するかを簡単に理解できます
  • すべてのgemに付属する仕様(「.spec」)ファイルには、依存関係(その他の必要なgem)が記述されているため、コードには機能するために必要なすべてのものが含まれています。

RubyGemsのおかげで、1つのgem installだけで役立つライブラリの豊富なエコシステムがあります。 離れて!

特定の(非gem)プロジェクトに必要なgemのリストは、「Gemfile」と呼ばれる特別なファイルにリストできるため、Bundlerによって自動的にインストールされます。どちらもこのガイドの後半で説明します。

宝石の例は何ですか?

  • Railsとそのすべてのコンポーネント(ActiveRecord、ActiveSupportなど)はRubygemとして配布されます
  • irbの強力な代替手段であるPry
  • 人気のあるXMLおよびHTMLパーサーであるNokogiri

ほとんどの宝石は純粋なRubyコードです。

いくつかの宝石には、パフォーマンスを向上させるためのRubyC拡張機能が含まれています。

この拡張機能は、gemをインストールすると自動的に作成されます。場合によっては、RubyGemsによって管理されていない追加のソフトウェアを手動でインストールする必要があります。

独自の宝石を作成し、宝石を構成するファイルを見て、宝石についてもっと学びましょう。

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 ファイルは、宝石に関するすべての情報を見つける場所です。 。

含まれています

  • 宝石の名前
  • 宝石の概要(簡単な説明)
  • 作成者名
  • 依存関係リスト
  • gemに含めるファイルのリスト
  • オプション:作成者のメールアドレス、プロジェクトのURL(ホームページ)、実行可能ファイル、c拡張子、長い説明。

gemバージョン自体は、lib/<gem_name>/version.rbで定数として定義されています。 。

これがgemspecの例です

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 配列は、必要なときに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 線は、開発中に使用する宝石を定義します。

これらは、ミニテスト、RSpec、またはこじ開けのような宝石です。

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に公開します 。

Bundlerとは何ですか?

Ruby gemについて学びながら、 Bundlerについても読むことができます。 。

しかし、Bundlerとは正確には何ですか?

Bundlerは依存関係管理のためのツールです 。

RubyGemsはすでにこれを処理していませんか?

ええと、そうです…しかし宝石自体のためだけに

通常のRubyアプリケーションはgemとして構築されていないため、この機能は利用できません。

それがBundlerが存在する理由です!

Gemfilesを理解する

それらのGemfileを見たことがありますか ファイル?

ここで、Rubyアプリケーションに使用するgemを記述します。 。

これらのgemは、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にgemを自動要求しないように指示します。これは、requireが必要になることを意味します 必要なときにコードに入れてください。

これは、範囲が限定されている宝石に使用されます。

特定のレーキタスクで使用するGemsですが、Railsコントローラーとモデルでは使用しません。利点は、必要なときにのみそのgemをロードするため、アプリコードのメモリを節約できることです。

環境ごとに宝石をグループ化することもできます 。

つまり、開発時にのみインストールおよびロードされるgem(capybaraなど)を使用できます。 &pry

最後に、bundlerはGemfile.lockを作成します 。

違いは何ですか?

Gemfile.lock 自動生成 &それはすべての宝石の正確にどのバージョンがインストールされたかと言います 。

Bundlerはこれらのバージョンをインストールするため、このアプリケーションを本番環境にデプロイしたり、プロジェクトを他の開発者と共有したりすると、全員が同じgemセットで作業します。

便利なGem&Bundlerコマンド

コマンド 説明 宝石リスト インストールされているすべてのgemを一覧表示します。名前でgemをフィルタリングするための引数を受け入れます(例:gem list activegemがインストールされているパスを提供します。 バンドルviz 現在のプロジェクトの依存関係グラフの視覚化を生成します。 バンドルショー バンドラーを介してインストールされた特定の宝石に関する情報を表示します。 Gemfileのあるフォルダー内にある必要があります。 バンドルが古くなっています 現在のプロジェクトの古いgemのリストを表示します。 --groupsを使用できます それらをグループ化するオプション。 バンドルコンソール 現在のプロジェクトのGemfileのgemを使用してirbセッションを実行します。
gem which
gem search 構成されたソースからgemを検索します(デフォルト:rubygems.org)。正規表現を取ります(例:gem search "\Aawesome_"
gem env 宝石環境に関する情報(バージョン、パス、構成)を表示します。
gem install -v 特定のgemバージョンをインストールできます(例:gem install sinatra -v 2.0.0

概要

RubyのパッケージシステムであるRubyGemsについて学びました。また、gemの構造、Gemfile、Bundler、およびGemfileの違いについても学びました。 &Gemfile.lock

これがお役に立てば幸いです!

この記事を共有し、まだニュースレターを購読していない場合は(9000人以上のRuby開発者!)、私のRubyブックをチェックしてください。

読んでくれてありがとう&素晴らしい一日を過ごしてください🙂


  1. Ruby開発者のための時間計算量への決定的なガイド

    時間計算量は、コンピュータサイエンスから学ぶことができる最も興味深い概念のひとつであり、それを理解するのに学位は必要ありません! 特定のアルゴリズムやプログラムが遅い理由を確認するのに役立つので興味深いです &それをより速くするためにあなたは何ができますか。 これを独自のコードに適用できます。 これはすべての派手なアルゴリズムを超えて これは、この記事の後半で説明するように、コンピュータサイエンスの本にあります。 しかし、最初に、何が遅いのか、何が速いのかについて話す必要があります。 遅いvs速い 150ミリ秒(ミリ秒)で100万個の数値を並べ替えるのは遅いですか、それとも速いですか

  2. Mac上のAndroidメッセージの究極のガイド

    Mac 上の Android メッセージ ?不可能に聞こえますよね? 2 つのブランド間の競争が激しいため、ほとんどの人は Android と Mac は連携しないと考えています。ただし、Google は会話をユーザーにとって便利で柔軟なものにしたいと考えているため、Android Messages を開発しました。 このメッセージング プラットフォームは、PC デバイスと Mac デバイスの両方で使用できます。したがって、Mac コンピューターをお持ちの場合は、使用するのが難しくないので心配する必要はありません。 Android メッセージは複数のデバイスで互換性があるため、さまざま