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: "[email protected]:rails/rails.git"
branch
を渡すことができます マスターではないブランチからのコードを使用するオプション。
このように :
gem "awesome_print", git: "[email protected]: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 which | |
gem search | 構成されたソースからgemを検索します(デフォルト:rubygems.org)。正規表現を取ります(例:gem search "\Aawesome_" 。 |
gem env | 宝石環境に関する情報(バージョン、パス、構成)を表示します。 |
gem install | 特定のgemバージョンをインストールできます(例:gem install sinatra -v 2.0.0 。 |
概要
RubyのパッケージシステムであるRubyGemsについて学びました。また、gemの構造、Gemfile、Bundler、およびGemfile
の違いについても学びました。 &Gemfile.lock
。
これがお役に立てば幸いです!
この記事を共有し、まだニュースレターを購読していない場合は(9000人以上のRuby開発者!)、私のRubyブックをチェックしてください。
読んでくれてありがとう&素晴らしい一日を過ごしてください🙂
-
Ruby開発者のための時間計算量への決定的なガイド
時間計算量は、コンピュータサイエンスから学ぶことができる最も興味深い概念のひとつであり、それを理解するのに学位は必要ありません! 特定のアルゴリズムやプログラムが遅い理由を確認するのに役立つので興味深いです &それをより速くするためにあなたは何ができますか。 これを独自のコードに適用できます。 これはすべての派手なアルゴリズムを超えて これは、この記事の後半で説明するように、コンピュータサイエンスの本にあります。 しかし、最初に、何が遅いのか、何が速いのかについて話す必要があります。 遅いvs速い 150ミリ秒(ミリ秒)で100万個の数値を並べ替えるのは遅いですか、それとも速いですか
-
Mac上のAndroidメッセージの究極のガイド
Mac 上の Android メッセージ ?不可能に聞こえますよね? 2 つのブランド間の競争が激しいため、ほとんどの人は Android と Mac は連携しないと考えています。ただし、Google は会話をユーザーにとって便利で柔軟なものにしたいと考えているため、Android Messages を開発しました。 このメッセージング プラットフォームは、PC デバイスと Mac デバイスの両方で使用できます。したがって、Mac コンピューターをお持ちの場合は、使用するのが難しくないので心配する必要はありません。 Android メッセージは複数のデバイスで互換性があるため、さまざま