gemのローカルリポジトリを作る

gemコマンドでインストールするモジュールを、rubygems.orgのものだけでなくローカルに用意したリポジトリからも探せるようにする。

リポジトリ作成

リポジトリとして動作させるホストのRubyにモジュールをインストール(キャッシュ)しておく。

# 特定のモジュールをインストールする
gem install $MODULE_YOU_NEED

# インストール済みのものを最新化する
gem update

インストールしたら、gem serverでホスティングを開始するだけでよい。
ポート番号等、サーバ設定可能項目についてはgem help serverにて確認。

リポジトリの利用

一時的に参照する場合

gem install $MODULE_NAME --source $URLとすればよい。

# 既存の参照先に加えたい場合
gem install $MODULE_NAME --source http://my-gem-host

# 既存の参照先ではなく指定した先しか参照させない場合
gem install $MODULE_NAME --clear-sources --source http://my-gem-host

恒久的に追加する場合

以下のようにgem sources --add $URLすれば、以降gem installするときに自動でそちらも参照してくれるようになる。

gem sources --add http://my-gem-repo-host

gem help sourcesにも書いてあるが、削除したくなったらgem sources --remove $URLとすればよい。

リポジトリとして動作するホストへにRubyインストールを不要にできないか

リポジトリのホストにはRubyが必要でgem serverとしなければならないであればちょっと使い勝手が悪い。
(例えばファイルサーバをそのままリポジトリにすることはできないのか)

試してみたところ、sourceとして指定するURLはあくまでURLであり、スキーマとしてはHTTP(s)しか対応していないようだ。
--source file://path/to/local-cache--source C:\Path\to\WinLocalCacheのような指定ではgemがURLを解釈できない、とエラーになってしまう。

なので、リポジトリホストにはRubyのインストールが必須であり、故に

  • それ専用のサーバ(gem serverが実行できるサーバ)を準備する
  • ローカルホストでファイルサーバ上のパスを指定したgem serverを起動しつつ、インストールする

のどちらかをしなければならない。

gem server --dir \\Path\To\RepoOnFileSerer --no-daemon

それか、依存関係のあるgemファイルを洗い出した上で一つ一つgem install --local $GEMFILE_PATHする、あるいはGemfile書いてbundlerに任せるか、の方法も考えられるが、これはこれで依存関係を調べるのに大変そう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です