Ruby gem とは?
gem は、ダウンロード & してインストールするパッケージです。
- Rails アプリケーションにログイン機能を追加する
- 外部サービス (API など) を簡単に操作する
- Web アプリケーションを構築する
これはほんの一例です。
なぜ gems を使うのでしょうか。
- Rubyでライブラリ & ツールを共有する方法です
- gemのファイル構造 & 形式により、どのように動作するかが簡単にわかります
- 仕様(”.spec”) ファイルは依存関係 (他の必要な gem) を記述しており、コードが動作するために必要なすべてを備えています。
RubyGems に感謝し、私たちは有用なライブラリの豊富なエコシステムをわずか gem install
手に入れました。 どちらもこのガイドで後述します。
Gems の例にはどのようなものがありますか?
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
の違いについても学びました。
これが役に立ったことを願っています!