gem(RubyGems)を認証必須のプロキシ経由で使いたい

目的

id:taiyo:20080401#p1 を参照。

結果

~/.gemrc に、以下の設定を記述する(大文字の箇所は記入例、各自で変えること):

http_proxy: http://4000000:PassWord@abcproxy.examlple.com:8080

※PassWordに英数字以外が含まれる場合はURLエンコードが必要

もちろん、~/.gemrc のパーミッションは 600(自分のみread/wriet可) にしておくこと。

gemの仕様

gemのドキュメントやウェブ上の情報ではみあたらなかったので、ソースを読んでみる。

rubygemsの下のremote_fetcher.rbにて、Gem::RemoteFetcherクラスがウェブアクセスを処理するのだが、プロキシ情報の受け取り方は以下のようになっている。

  • 環境変数 http_proxy, http_proxy_user, http_proxy_pass から受け取る
  • 環境変数 http_proxy に認証情報付き(http://user:password@host/ 形式)で書いてあれば、認証情報も取得する(URI.parseを使う)
  • 設定ファイル(YAML形式)の処理もあり、~/.gemrc 内でHashとして http_proxy を書いておけばよい(認証情報もパースする)
  • 設定ファイルからは http_proxy_user, http_proxy_pass は読み取らない

gemの仕様のまとめ

左側にある設定が優先される。

コマンドラインオプション 設定ファイル ~/.gemrc 環境変数
プロキシのユーザ名 なし? (URLに埋め込む) http_proxy_user
プロキシのパスワード なし? (URLに埋め込む) http_proxy_pass
プロキシURL なし http_proxy: PROXY http_proxy