RubyGems のパッケージを作ってみた & 自前の gem サーバを建ててみた
RubyGems のパッケージを作り、そのパッケージをインストールするための gem サーバを用意する。
作成した gem を一般に公開するなら、 RubyForge にアップロードすればよいのだろう。
しかし、今回作成するパッケージのプログラムは、限られた利用者だけに公開したいプログラムなので、自前の Web サーバに gem ファイルを設置し、 gem サーバとして機能するように設定した。
サーバの RubyGems のバージョンは 1.2.0 である。*1
gem の作成
gem を作成するために、パッケージにするプログラムの情報を記述した gemspec ファイルを用意する。
以下のサイトを参考に gemspec ファイルを作成した。
るびま
http://docs.rubygems.org/read/chapter/20
パッケージの作成にあたり、プログラムのファイル配置を調整する必要があった。
参考サイトや、他のパッケージのファイル構成を参考に、bin, lib ディレクトリを作成して、適切な場所にファイルを配置した。
gemspec ファイルが作成できたら、gem build コマンドを用いて gem を作成する。
xxx はパッケージ名である。
gem build xxx.gemspec
うまくいけば、パッケージ名に gemspec で指定したバージョン番号がついた名前の gem ファイルができる。
gem ができたら、うまくインストールできるか試してみる。
gem install xxx.-x.y.gem --test
もし、インストールがうまくいかなかったり、テストに失敗するようならば、コードや gemspec ファイルを修正する。
インストールが成功したら以下のコマンドを実行して、 webrick を用いた RubyGems サーバを立ち上げて、 RDoc ドキュメントも正しく生成されているか確認してみよう。
gem server
ブラウザで http://localhost:8808/ にアクセスすれば、RDoc ドキュメントを見ることができる。
gem の設置と公開用の設定
gem ができたら、 Web サーバに gem ファイルを設置して、そこから gem パッケージをインストールできるようにする。
gem ファイルを設置するディレクトリに対し、 Web サーバ側で認証の設定をすることで、パッケージの公開範囲を制限することができる。
今回は以下の URL でリモートレポジトリを公開するとする。
http://yourserver/gemserver/
Web サーバの gemserver ディレクトリに gems ディレクトリを作成し、その中に gem ファイルを置く。
gem ファイルを置いたら、以下のコマンドを実行してインデックスを生成する。
gem generate_index -d
その後、Web サーバ側で gemserver ディレクトリ以下にアクセス制限の設定を行った。
クライアント側からインストールできるか試してみる。
gem install xxx --source http://yourserver/gemserver/
これで、自前の gem サーバができた。
公開してよし。こっそり使ってよし。
作成した gem が他の gem を必要とするときは、依存している gem ファイルを自分の gem サーバに置いておくとよい。
または、インストール時に --remote オプションを付けることで、パッケージが見つからない時に標準のリモートレポジトリへ探しにいってくれるようだ。*2
他の gem サーバにある gem ファイルは以下のコマンドで取得できる。
gem fetch パッケージ名