1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyのgemパッケージ管理およびgemソース構築のチュートリアル

2022-01-30 10:02:17

RubyGemsを使いこなすために
RubyGemsはRubyのプラグイン管理システムで、Rubyのライブラリのインストールや管理を簡単に行うことができます。すべてのオープンソースパッケージはRubyGems上で見つけることができます。

### 共通ディレクティブ

  • gem -v RubyGemsのバージョンを表示します。
  • gem update --system RubyGems のバージョンをアップグレードします。
  • gem install gem_name プラグインをインストールする。
  • gem install -v x.x.x gem_name 指定されたバージョンのプラグインをインストールします。
  • gem list インストールされたパッケージの一覧を表示します。
  • gem update gem_name プラグインを更新します。
  • gem update すべてのプラグインを更新する
  • gem uninstall gem_name プラグインを削除する。

また、プラグインをインストールすると、そのプラグインのRDocファイルとriファイルがデフォルトでインストールされます。これらをインストールしたくない場合は、インストール時に --no-ri --no-rdoc パラメータを使用することができます。

gem install gem_name --no-ri --no-rdoc



また、ユーザーディレクトリ ~ に以下の内容の .gemrc ドキュメントを新規に作成することも可能です。
gem: --no-ri --no-rdoc


RDocとriのファイルをデフォルトでインストールしないようにしました。

### 国内RubyGemsミラー

サーバーが中国にある場合、必要なgemsをインストールするのは並大抵のことではありませんが、幸いなことに、以下のタオバオミラーを利用することが可能になりました。

$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l


表示される場合。

*** CURRENT SOURCES ***

http://ruby.taobao.org



これは、変更が成功し、国内のミラーからrugy gemsをインストールできるようになったことを意味します。詳しくは、Rubygemsのミラー

Bundler を使って Ruby Gems を管理している場合は、Gemfile を以下のように修正します。

source 'http://ruby.taobao.org/'

gem 'rails', '3.2.2'
... ... ...



### Ruby Gems のビルドと共有

公式の宣伝文句によると

gem update --system #Update to the latest RubyGems version
gem build foo.gemspec #Build your gem
gem push foo-1.0.0.gem #Deploy your gem instantly



Rubygemsを自作する方法
###簡単な例です。

例としてtopic-0.0.1.gemを作成する。

フォルダを作成する #### 。

.
├── lib
│ └── topico.rb
└── topico.gemspec


注意:libディレクトリにgemと同じ名前のrbファイルがなければなりません。

#### write code libtopico.rb

class Topico
 def self.hello
  puts "Hello, RubyGems!"
 end
end


#### GemSpec ファイル topico.gemspec を編集します。

Gem::Specification.new do |s|
 s.name = 'topico'
 s.version = '0.0.1'
 s.date = '2012-03-11'
 s.summary = 'Greeting from Topico'
 s.description = 'Topico shows a greeting to RubyGems'
 s.authors = 'Author Name'
 s.email = '[email protected]'
 s.files = ["lib/topico.rb"]
 s.homepage = 'http://rubygems.org/gems/topico'
end


ここでは、より一般的な属性のみを掲載しています。

#### gem を生成するために###コンパイルします。

$ gem build topico.gemspec


メッセージが表示されます。

 Successfully built RubyGem
 Name: topico
 Version: 0.0.1
 File: topico-0.0.1.gem


コンパイル後、フォルダ構造ツリーを表示することができます。

.
├── lib
│ └── topico.rb
├── topico-0.0.1.gem
└── topico.gemspec


新しく生成されたtopic-0.0.1.gemに注目してください。

#### gemのインストールとテスト

topico-0.0.1.gemのインストール

$ gem install . /topico-0.0.1.gem


のプロンプトが表示されます。

Successfully installed topico-0.0.1
1 gem installed
Installing ri documentation for topico-0.0.1...
Installing RDoc documentation for topico-0.0.1...


irbでirbの使い方をテストしている。

irb(main):001:0> require 'topico'
=> true
irb(main):002:0> Topico.hello
Hello, RubyGems!
=> nil


#### RugyGemsのサイトに##を掲載しました。

まず、RubyGems のユーザー名とパスワードを以下のサイトで設定します。

$ curl -u username https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials


Enter host password for user 'username':
 % Total % Received % Xferd Average Speed Time Time Time Current
                 Dload Upload Total Spent Left Speed
 0 56 0 56 0 0 25 0 --:--:-- 0:00:02 --:--:--:-- 144


セットアップ成功後に掲載。

$ gem push topico-0.0.1.gem


Pushing gem to https://rubygems.org...
Successfully registered gem: topico (0.0.1)


リリースが成功したので、みんながあなたのRubygemを使えるようになりました。

### 少し複雑な例です。

ここでは、複数のrubyファイルを整理する方法について説明します。

1. ディレクトリ構造

.
├─ lib
│ ├── ext
│ │ └── calculation.rb
│ └── topico.rb
└── topico.gemspec


2. GemSpecの書き方

s.filesの行で、修正します。

 s.files = ["lib/topico.rb", "lib/ext/calculation.rb"]


ジェムビルドをやり直すだけ。

3. Gemに実行ファイルを含める方法

(1) plugins ディレクトリに、bin フォルダを作成します。

実行ファイルを生成し、パーミッションをrunnableに変更します。

$ mkdir bin
$ touch bin/greeting
$ chmod a+x bin/greeting


(2) 実行ファイルの内容を変更する

#! /usr/bin/env ruby

require 'topico'
puts Topico.hello



(3) GemSpecにs.executablesという行を追加するように修正します。

 s.executables << 'greeting'