Ruby Gems, Gemfile & Bundler (The Ultimate Guide)

Ruby gem とは?

gem は、ダウンロード & してインストールするパッケージです。

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

これはほんの一例です。

なぜ gems を使うのでしょうか。

  • Rubyでライブラリ & ツールを共有する方法です
  • gemのファイル構造 & 形式により、どのように動作するかが簡単にわかります
  • 仕様(”.spec”) ファイルは依存関係 (他の必要な gem) を記述しており、コードが動作するために必要なすべてを備えています。

RubyGems に感謝し、私たちは有用なライブラリの豊富なエコシステムをわずか gem install 手に入れました。 どちらもこのガイドで後述します。

Gems の例にはどのようなものがありますか?

  • Pry, the powerful alternative to irb
  • Nokogiri, a popular XML & HTML parser
  • Most gems are pure Ruby code.

    A few gems includes a Ruby C extension for improved performance.

    This extension is built automatically for you when you install the gem. Ruby Gems はRubyで配布されているもので、この拡張はインストール時に自動的に行われます。

    さて、

    自分で & を構築し、gem を構成するファイルを見て、gem についてもっと学びましょう。

    How to Build a RubyGem

    bundle gem <name> を実行して、新しい gem のためのファイルを準備することができます。

    例:

    bundle gem awesome_gem

    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に関するすべての情報が記載されています。

    It includes:

    • Gem name
    • Gem summary (short description)
    • Author name
    • Dependency list
    • gemに含めるファイルのリスト
    • Optional(任意)。 作者のメールアドレス、プロジェクトの URL (ホームページ)、実行ファイル、c 拡張、長い説明文。

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

    gemspec:

    Gem::Specification.new do |spec| spec.name = "awesome_gem" spec.version = AwesomeGem::VERSION spec.authors = spec.summary = "Example gem for article about Ruby gems" spec.files = Dir.grep_v(/.gem$/) spec.require_paths = spec.add_development_dependency "bundler", "~> 1.16" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "minitest", "~> 5.0"end

    The require_paths array is where Ruby will look for your gem files when you require them.これは、あなたが gem を必要とするときに、Ruby があなたのファイルを探す場所です。 これにより、コードを lib/<gem_name>/ & の下に置き、それを require "<gem_name>/<file_name>" で require します。

    たとえば、lib/awesome_gem/parser.rb というファイルは、gem のどこからでも require "awesome_gem/parser" として要求されます。

    ほとんどの requires は lib/<gem_name>.rb (/lib のルートで唯一のファイル) で行われるはずです。

    これは、require gem をロードするときに読み込まれるファイルです!

    次に、add_development_dependency 行は開発中に使用する gem を定義します。

    これらは、minitest、RSpec、または pry などの gem です。

    一度、概要 & の記述をデフォルト値から変更したら、bundle gem が作成する bin/console プログラムを使用して gem で irb セッションをロードすることができます。

    Bundler とは何ですか。

    Ruby gems について学んでいると、Bundler について読むこともあります。

    Bundler とは一体何ですか。

    Bundler は依存関係を管理するツールです。

    通常の Ruby アプリケーションは gem としてビルドされていないので、この機能は得られません。

    そのために Bundler が存在します。

    これらの gems は 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) はこのファイルを読んで & これらの gems の要求されたバージョンのインストールができます。

    bundle install コマンドを実行すると、このように表示されます:

    Using turbolinks-source 5.1.0Using turbolinks 5.1.1Using uglifier 4.1.18Using web-console 3.6.2Bundle complete! 18 Gemfile dependencies, 78 gems now installed.Use `bundle info ` to see where a bundled gem is installed.

    さて、Gemfile の各 gem のバージョンを宣言するときに使うこれらのシンボル (~> など) とは何でしょうか。

    gem 'puma', '~> 1.2'

    ~> はこの範囲のショートカットです。

    gem 'puma', '>= 1.2', '

    In the case of , it means exactly this:

    '>= 5.2.1', '

    The more specific the version number is the more restricted the version range will be.

    Gemfile Options & Gemfile.lock

    You have a few options when requiring a gem inside a Gemfile.

    For example:

    You may want to pull a gem from a different source, like GitHub.

    This is helpful when you need to use the latest version of the project, even if it hasn't been released on rubygems.org yet.

    Here's an example:

    gem "rails", git: "[email protected]:rails/rails.git"

    branch オプションを渡すと、master 以外のブランチのコードを使用できます。

    gem "awesome_print", git: "[email protected]:awesome-print/awesome_print.git", branch: "v2"

    もう 1 つのオプションは require: false です。

    これは何をするのでしょうか。 これは、必要なときにコード内で require 要求する必要があることを意味します。

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

    たとえば、特定の rake タスクで使用し、Rails コントローラ & モデルで使用しない gem です。

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

    つまり、& 開発時にのみインストールされる gem (capybara & pry など) をロードさせることができます。

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

    何が違うのでしょうか。

    Gemfile.lock は自動生成され、& すべての gem のどのバージョンをインストールしたかが正確に記述されています。

    Bundler はこれらのバージョンをインストールするので、このアプリケーションを実稼働環境にデプロイしたり、他の開発者とプロジェクトを共有したりするときに、誰もが同一の gem のセットで作業することになります。

    Useful Gem & Bundler Commands

    コマンド 説明
    gem list List all your installed gems.Gems.Lists. Gem List Gem List は、インストールされたすべての gems を一覧表示します。 gem を名前でフィルタリングするための引数を受け付けます (例: gem list active)
    gem which <name> gemがインストールされるパスを表示します。
    gem search <name> 設定したソース (default: rubygems.org) から gems を探します。 正規表現を使用します (例: gem search "\Aawesome_")。
    gem env gem環境に関する情報を表示します (バージョン、パス、設定)。
    gem install <name> -v <version> 特定のgemバージョンをインストールします (例: gem install sinatra -v 2.0.0)。
    bundle viz 現在のプロジェクトの依存関係グラフを視覚化します。
    bundle show バンドラーでインストールした特定の gem についての情報を表示します。 Gemfile があるフォルダー内にある必要があります。
    bundle outdated 現在のプロジェクトにある古い gem のリストを表示します。
    bundle console 現在のプロジェクトのGemfileからgemsを使用してirbセッションを実行します。

    概要

    RubyGems、Rubyのパッケージシステムについて学習しました。 また、gem の構造、Gemfile とは何か、Bundler & と Gemfile.lock の違いについても学びました。

    これが役に立ったことを願っています!

    コメントを残す

    メールアドレスが公開されることはありません。