Ruby (日本語) - ArchWiki

# Ruby (日本語)

Ruby はシンプリシティと生産性に重点を置いた、オープンソースの動的なスクリプト言語です。

## Ruby のインストール

インストールするべき Ruby のバージョンはあなたが必要としているものによります。レガシーなアプリケーションをサポートするつもりなら、Ruby 1.9 や 1.8 をインストールしてください。新しいプロジェクトを初めるつもりなら、Ruby 2.0 が推奨です。利用可能な Ruby のバージョンと入手方法の概要を以下に述べます。

### Ruby 2.0

Ruby 2.0.0 をインストールするには、ruby をインストールしてください。Ruby 2.0 には #RubyGems が含まれています。

### Ruby 1.9

Ruby 1.9.3 をインストールするには、ruby1.9 をインストールしてください。Ruby 1.9 には #RubyGems が含まれています。

メリット:

- 1.8 に比べてパフォーマンスがはるかに向上しています。
- fiber などの並列化のための新機能があります。
- 他にも、CSV パーサーの改善などさまざまな機能向上がなされています。

デメリット:

- 多くの古い gem (そして Ruby On Rails バージョン 2.3 以前) と互換性がありません。
- 言語の変更によって古い Ruby コードが動かなくなったり、予期せぬバグが生まれる可能性があります。

Note: あなたの必要な gem/module が Ruby 1.9 と互換性があるか知るには http://isitruby19.com/ を見て下さい。

### Ruby 1.8

Ruby 1.8.7 をインストールするには、ruby1.8 か ruby-1.8.7-svn[broken link: package not found] を AUR からインストールしてください。Ruby 1.8 には RubyGems が含まれていません。そのかわり、rubygems1.8 パッケージから利用できます。

### 複数のバージョン

同じシステム上で複数のバージョン (例: 2.0.0-p0 と 1.9.3-p392) を動作させたい場合、一番簡単な方法は RVM や rbenv を使うことです。

## RubyGems

gem は Ruby のモジュール (Gem と呼ばれます) のためのパッケージマネージャで、Arch Linux における pacman に（多少は）相当します。上述の通り Ruby のインストールを行えば gem コマンドがインストールされます。

### 使用方法

インストールされている gem を確認するには:

    $ gem list

gem についての情報を得るには:

    $ gem spec <gem_name>

デフォルトで、`gem list` や `gem spec` は `--local` オプションを使います。つまりローカルのシステムだけで gem を検索します。これを `--remote` フラグで上書きすることが可能です。そう、例えば mysql の gem を検索するには:

    $ gem list --remote mysql

gem をインストールするには:

    $ gem install mysql

ローカルのドキュメントが必要ない場合はスピードアップすることができます:

    $ gem install mysql --no-rdoc --no-ri

インストールされている gem を全てアップデートするには:

    $ gem update

### 標準ユーザーで実行

標準ユーザーとして gem を実行すると、gem はシステム全体ではなく `~/.gem` にインストールされます。Arch で gem を管理するにはこれが最適だと思われます。残念ながら、全ての gem はこの方法ではインストールできず、root でインストールするように言われているもの (特にネイティブ拡張 (コンパイルされた C コード) を持っている gem) があります。このユーザーごとにインストールする挙動は `/etc/gemrc` で有効にされており `~/.gemrc` ファイルによって書き換えることが可能です。

バイナリをインストールする gem を使う時は、`~/.gem/ruby/2.0.0/bin` を `$PATH` に追加する必要があります。

### root で実行

root として実行したとき、gem は `/root/.gems` にインストールされます。`/usr/lib/ruby/gems/` にはインストールされません。

Note: 詳しくは #33327 を見て下さい。

Bundler は gem をあなたのアプリケーションにパッケージングすることでこの問題をある程度解決します。bundler を使用するにあたって下のセクションを見て下さい。

### Bundler

Bundler を使うことであなたのアプリケーションが依存している gem はどれか、さらに（任意で）その gem のバージョンは何でなければならないかを指定することができます。この記述があると、Bundler は必要な gem を全て (完全な gem の依存ツリーを含む) インストールして、後の点検のために結果をログに残します。デフォルトで、Bundler は gem を共有の場所にインストールしますが、あなたのアプリケーションに直接インストールすることも可能です。あなたのアプリケーションが実行されると、複数のバージョンの gem がインストールされている時でも、Bundler はそれぞれの gem の正しいバージョンを与えます。これにはわずかばかりの作業が必要です: アプリケーションは `bundle exec` で呼び出される必要があり、あなたのアプリケーションのメインの実行ファイルに2行のボイラープレートコード（おまじない）を入れなくてはなりません。

Bundler をインストールするには:

    $ gem install bundler

デフォルトで、Bundler は gem をシステム全体にインストールします。これは Arch での gem それ自体の挙動とは反対です。これを正すには、次を `~/.bashrc` に追加してください:

    export GEM_HOME=~/.gem/ruby/2.0.0

新しい bundle を始めるには:

    $ bundle init

次に (`bundle init` によって作成された) 作業ディレクトリ内の `Gemfile` を編集して必要な gem を記載してください:

    Gemfile

    gem "rails", "3.2.9"
    gem "mysql"

次を実行して gem を `GEM_HOME` にインストールしてください:

    $ bundle install

もしくは、次を実行して gem を作業ディレクトリ内の `.bundle` にインストールしてください:

    $ bundle install --path .bundle

あなたのメインの実行ファイルを編集するのを忘れないで下さい:

    #!/usr/bin/env ruby

    # "This will automatically discover your Gemfile, and make all of the gems in
    # your Gemfile available to Ruby." http://gembundler.com/v1.3/rationale.html
    require 'rubygems'
    require 'bundler/setup'

    ...

最後に、あなたのプログラムを実行して下さい:

    bundle exec <main_executable_name.rb>

## pacman を使って RubyGems を管理する

直接 gem コマンドを使うかわりに pacman を使って普通のパッケージのようにインストールした gem を管理することができます。AUR から利用できる ruby パッケージがたくさんあります。Ruby パッケージは ruby-[gemname] という命名規則に従っています。pacman を使った後 gem から自動で arch パッケージを作成しインストールする pacgem ツールを代替として使うことが可能です。

Warning: AUR にある ruby gem パッケージの多くは、`/etc/gemrc` やユーザーの `~/.gemrc` 内のグローバルな設定を無視して、コマンドラインスイッチの `--no-user-install` や `--user-install` を明示的に使います。インストールする前に PKGBUILD ファイルを編集しますよね？

## 関連項目

- Ruby On Rails

## 参照

- Ruby - http://ruby-lang.org/
- Rubyforge - http://rubyforge.org
- Bundler - http://github.com/carlhuda/bundler

Category:

- Programming language (日本語)