インストール済みの宝石のリスト?


141

インストールされているgemのリストを取得するために呼び出すことができるRubyメソッドはありますか?

の出力を解析したいgem list。これを行う別の方法はありますか?

回答:


55

Gemコマンドは現在Ruby 1.9以降に含まれており、Ruby pre 1.9に標準で追加されています。

require 'rubygems'

name = /^/i
dep = Gem::Dependency.new(name, Gem::Requirement.default)
specs = Gem.source_index.search(dep)
puts specs[0..5].map{ |s| "#{s.name} #{s.version}" }
# >> Platform 0.4.0
# >> abstract 1.0.0
# >> actionmailer 3.0.5
# >> actionpack 3.0.5
# >> activemodel 3.0.5
# >> activerecord 3.0.5

リストを取得する更新された方法は次のとおりです。

require 'rubygems'

def local_gems
   Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end

local_gems依存しているためgroup_by、gemのハッシュを返します。キーはgemの名前で、値はgem仕様の配列です。値は、インストールされているそのgemのインスタンスの配列であり、バージョン番号でソートされています。

これにより、次のようなことが可能になります。

my_local_gems = local_gems()

my_local_gems['actionmailer']
# => [Gem::Specification.new do |s|
#       s.authors = ["David Heinemeier Hansson"]
#       s.date = Time.utc(2013, 12, 3)
#       s.dependencies = [Gem::Dependency.new("actionpack",
#         Gem::Requirement.new(["= 4.0.2"]),
#         :runtime),
#        Gem::Dependency.new("mail",
#         Gem::Requirement.new(["~> 2.5.4"]),
#         :runtime)]
#       s.description = "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments."
#       s.email = "david@loudthinking.com"
#       s.homepage = "http://www.rubyonrails.org"
#       s.licenses = ["MIT"]
#       s.name = "actionmailer"
#       s.require_paths = ["lib"]
#       s.required_ruby_version = Gem::Requirement.new([">= 1.9.3"])
#       s.requirements = ["none"]
#       s.rubygems_version = "2.0.14"
#       s.specification_version = 4
#       s.summary = "Email composition, delivery, and receiving framework (part of Rails)."
#       s.version = Gem::Version.new("4.0.2")
#       end]

そして:

puts my_local_gems.map{ |name, specs| 
  [ 
    name,
    specs.map{ |spec| spec.version.to_s }.join(',')
  ].join(' ') 
}
# >> actionmailer 4.0.2
...
# >> arel 4.0.1,5.0.0
...
# >> ZenTest 4.9.5
# >> zucker 13.1

最後の例はgem query --localコマンドラインに似ていますが、特定のgemの仕様に関するすべての情報にアクセスできるのはあなただけです。


2
「Dependency.new w / regexpは非推奨」になりました。
Martin Poljak

351

これにより、インストールしたすべてのgemがリストされます。

gem query --local

http://guides.rubygems.org/command-reference/#gem-list

2.7インストールされたすべてのgemの一覧表示を参照してください


37
私が賛成票を見ると、この答えがほとんどの人が望んでいたものです。:)
カイザー2014

4
質問自体により良い答えがありますgem list
ブルーレイ

gem list私が必要とするものを正確に実行しました。CLIで呼び出すと、はるかにシンプルで簡単に呼び出すことができます。なぜそんなに多くのコマンドが1つのことをするのですか?
Dave Everitt

28

両方とも

gem query --local

そして

 ruby -S gem list --local

69エントリのリスト

ながら

ruby -e 'puts Gem::Specification.all_names'

82をくれ

以前wc -lは番号を取得していました。それが正しい方法かどうかはわかりません。出力をテキストファイルにリダイレクトして比較しましたが、効果はありませんでした。手動で1つずつ比較する必要があります。


1
理由は簡単です。最初のコマンドは、gemごとに1つのエントリのみを追加し、同じ行の括弧内にバージョンをリストします。最後のrubyコマンドは、各gemバージョンを別々の行にリストします。用例: sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)sass-3.3.14sass-3.3.7sass-3.3.6sass-3.2.19
カイザー

10

年齢のためにこれのための方法がありました:

ruby -e 'puts Gem::Specification.all_names'

ruby -e 'Gem :: Specification.all_names'を実行すると、「-e:1:初期化されていない定数Gem(NameError)」が表示されますこれを解決するにはどうすればよいですか?
Metahuman

6
Gem::Specification.map {|a| a.name}

ただし、アプリがBundlerを使用している場合、依存するローカルGemのリストのみが返されます。すべてをインストールするには:

def all_installed_gems
   Gem::Specification.all = nil    
   all = Gem::Specification.map{|a| a.name}  
   Gem::Specification.reset
   all
end

これはNoMethodError: undefined method 何かを与えるのですか?」nil:NilClass`を使用する場合(a内rails console)。
iconoclast


3

より近代的なバージョンは、次のようなものを使用することです...

require 'rubygems'
puts Gem::Specification.all().map{|g| [g.name, g.version.to_s].join('-') }

注:Evgenyによる回答の最初の部分と非常によく似ていますが、ページの書式設定のため、見落としがちです。


3

すべての宝石をバージョン、ホームページ、説明と一緒に印刷するための本当に素晴らしい1行のコードを次に示します。

Gem::Specification.sort{|a,b| a.name <=> b.name}.map {|a| puts "#{a.name} (#{a.version})"; puts "-" * 50; puts a.homepage; puts a.description; puts "\n\n"};nil


1

多分あなたはgemsディレクトリからファイル(gems)を取得できますか?

gemsdir = "gems directory"
gems = Dir.new(gemsdir).entries

1

デバッガータイプ$LOAD_PATHから、gemのリストを取得します。デバッガーがない場合は、pryをインストールします。

gem install pry
pry
Pry(main)> $LOAD_PATH

これにより、インストールされた宝石の配列が出力されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.