シリーズ パッケージマネジメント 【第 2 回】 RubyGems (2)
初稿:2005-10-10
はじめに
RubyGems の主要開発者 Chad Fowler 氏に再び寄稿してもらいました。今回は、過去・現在・未来の現在編です。簡単ですが、パッケージの管理・作成・配布を一通り網羅しています。是非お試し下さい。
The Past, Present, and Future of RubyGems (2)
著者:Chad Fowler、訳・編:babie、すぎむし
原文(英文):(公開され次第反映します)
RubyGems の現在
かなり物議を醸したが(とりわけそのディレクトリ構造で)RubyGems は、ここ 1 年半でかなりポピュラーになってきた
(Rails 人気に大いにあやかって。RubyGems は Rails の第一のインストール手段となったため)。RubyGems 単体でダウンロード数が 10 万に届こうとしてるのに加えて、
人気の One-Click Ruby Installer に同梱されている分が、世界中の数万のデスクトップパソコンに及ぶ。
RubyForge に設置されているメインの gem サーバーでは
およそ通算 90 万の gem パッケージがダウンロードされ、
今現在も 1 日に 5000 程度ダウンロードされている。
これを書いている時点で、インストール用のメイン gem リポジトリで 360 以上のアプリケーションやライブラリが登録されている。
RubyGems は Ruby パッケージの管理においてデファクトスタンダードとなった。
その一番の理由は、検索・インストール・アンインストールする方法が簡単だったからだ。
ソフトウェアのインストール
例:
ふーむ、面白そうだ。インストールしてみよう。
RDoc をサッと見てから、
オレってばスゲー!
finger サーバが 1 行で書けた!
アプリケーションのインストールはどうするかって?
既に gem パッケージで Rake を入れてある。今のバージョンを調べてみよう。
もっと新しいバージョンがあるかな?
よし、バージョン 0.5.4 がある。アップグレードするぞ。
おしまい。
仮に 0.5.3 と 0.5.4 で Rake の振る舞いが変わって、自分のビルド用スクリプトが古いバージョンじゃないと動かないことがわかったとしよう。
まだ uninstall コマンドを使ってバージョン 0.5.3 を削除していないのだから、古いバージョンが使えるはず、だよね?
古いバージョンで動かすにはこうする:
そのうち、同じ gem のバージョン違いでいっぱいになってしまうかもしれない。
最新バージョン以外の全てを削除し、一掃することができる:
今のコマンドの最後の引数を取ってしまえば、RubyGems は現在インストールされている全ての gem パッケージをキレイにできる。
当然、ある gem が完全に使い道がなくなれば、完全に削除することもできる。
おしまい。
自前の gem の作り方
自前の gem をこしらえるのは簡単だ。
まず、どうしたいか(tar ボールと zip ファイルのどちらでリリースするかといったこと)をお膳立てする。
良い例を思いついた:
このライブラリは単純でファイル数も多いといえないが、gem がどう動くのか・どんなものかを伝えるのには充分だろう。
こいつらを gem にするには gem スペックを作成すればよい。
この場合、some_cool_lib.gemspec というような名前でファイルを作り、中身はこういう風に書く:
gemspec を作ったなら、こんな簡単なコマンドで gem を作ることができる:
バラバラに gem スペックファイルを保守するよりも、Rake を使って gem パッケージを作る方が良い。
Rake は RubyGems をビルドとリリース工程に途切れなく取り込む。
gem スペックファイルを用いても、Rake を用いても、これで配布できる gem をつくることができた。
じゃ、インストールしてみよう。
ぎゃっ!
インストール時に “–test” 引数を指定したので、gem に失敗するテストがあるのがわかった!
コードを修正して gem をリビルドすれば、インストールはうまくいく。
最後の行は RubyGems が RDoc ドキュメントを生成したことを示している。
どうやって見つけるのかって?
それはファイルシステムの_どっか_に隠れている。
UNIXユーザー向けには、こういう_難しい_やり方がある:
けど、RubyGems を使えばもうすこし簡単:
gem_server の話はもうちょっと後でしよう。
Gem スペックでは他にもメタデータを保持できる。
完全なリファレンスは、RubyGems ドキュメントサイトの Gemspec Reference を見てくれ。
gem の配布
さあ、君も今日から自前 gem 作者。そうなったらシェアしたいね。
世界中でシェアする一番楽チンな方法は RubyForge にホスティングさせてもらえば良い。
RubyForge にアップロードすれば、自動的にセントラル gem リポジトリに追加され “gem install” コマンドでアクセスできるようになる。
そのほかに、自分で gem をホストする方法もある。
簡単な方法は、RubyGems に同梱されている “gem_server” を使うことだ。
これまで見てきたようにドキュメントを提供できるだけじゃなく、gem だって提供できちゃう。
自分達が今までインストールしたどの gem も単に “gem_server” コマンドを呼び出して提供されている。
それらにアクセスするには:
ひょっとすると、Rails プロジェクトのように、中央 RubyGems リポジトリでない別のどこかでソフトウェアのベータ版を提供したいかもしれない。
そんでもって、恒久的な本拠地をを構え、webrick のインスタンスを個別にに走らせる代わりに既にある自前のウェブサーバを使いたいかもしれない。
問題ない。
全て準備できた。お預けだった gem server の話に戻ろう。
これだけ!
これでインターネットに繋がっているコンピューターならどこからでもインストールできる:
何が起こってる?
今回はハイレベルな RubyGems の使い方を覚えた。
包括的なドキュメントは
Programming Ruby (the Pickaxe)
と
RubyGems ドキュメントサイトで見つけることができる(どっちも英語です。ごめん!)。
もちろん、一番良い学び方は_たくさんの_フリーな gem をいくつか見ることだ。
もし、RubyGems のことで質問や問題(もしくはパッチ!)があるなら、RubyGems メーリングリストに投稿してくれ。
次回は、バージョン 1.0 に向けた計画を含む RubyGems の行く先を取り上げようと思う。
Ruby 本体に取り込んでもらえる可能性とか、外部ツールのサポートとかをね。
著者について
Chad Fowler はある巨大な多国籍企業のソフトウェア開発者 兼 マネージャーです。
最近はインドに住んで働いており、オフショア・ソフトウェア開発センターを設置し率いています。
また、Ruby Central の共同設立者でもあります。
Ruby Central は非営利企業で、
毎年行われる インターナショナル Ruby カンファレンス を主催し、Ruby コミュニティを支援しています。
おわりに
今回はだいぶ実践的な内容だったと思います。細かいところまで言及していませんでしたが、導入には丁度良いのではないでしょうか?
次回の掲載時期等はまだ決まっておりません。楽しみにしてる方がいれば気長にお待ちください。
シリーズ パッケージマネジメント 連載一覧