有効なgemスペックファイルを含むRubyGemに必要な構造を満たすRubyプロジェクトを作成し、それをGitリポジトリでホストしているが、まだファイルに組み込んでいないmyproject.gem
場合、厳密に言えば、それはまだgemですか?
結局のところ、オプションが使用されたgem install
としても、それをインストールすることはできません。--source
NB。Bundlerがそのようなプロジェクトをインストールできることを私は理解しています。
RubyGems Guidesによると、gem には以下が含まれます。
コード
Ruby コードなしで Ruby プロジェクトを作成することはできません。
ドキュメンテーション
プロジェクトの README ファイルとソース コードのコメントから自動的に生成されます。
ジェム仕様
プロジェクトのメタデータ。
この定義を考えると、Ruby プロジェクトと gemの唯一の違いは仕様であることがわかります。
実際、パッケージ化プロセス全体は仕様から始まります。
gem build
します.gemspec
Gem::Specification
有効な Ruby コードであるファイルを評価し、オブジェクトを取得します。.gem
。これは、これら 2 つのアーカイブのコンテナーにすぎません。パッケージを開けると.gem
、何が入っていますか?
プロジェクト ファイルとメタデータ。ええ、それは基本的にそれです: たくさんのプロジェクトメタデータが含まれている美化された tarball です。
それ自体は、プロジェクト ツリー全体を圧縮してダウンロード用に配置するか、最新のコミットに現在のバージョンのタグを付けて、GitHub からアーカイブを取得するように人々に指示するのとまったく同じです。
通常のソフトウェア ソース パッケージと gemの唯一の違いは、 RubyGems ソフトウェアがパッケージ内に含まれる情報を使用して、自動パッケージ管理、依存関係の解決、リモート リポジトリからのインストールなどを提供できることです。rpm
Red Hatや Debianなど、他のパッケージ形式についても同じことが言えますdeb
。
agem
は技術的にはソフトウェア パッケージ自体ですが、この名詞は非公式に、a としてパッケージ化できるプロジェクト全体、gem
つまり gem 仕様を持つプロジェクトを指すためにも使用されます。RubyGems.org やその他のリモート gem リポジトリにプッシュされたかどうかは問題ではありません。仕様を使用してgem
パッケージを生成したり、プロジェクトに関する情報を抽出したりできるからです。
たとえば、 Gemnasium.gemspec
は、パッケージを生成またはダウンロードせずに、gem の依存関係を特定および追跡するために解析するサービスです。
gemspecを使用したプロジェクトがgemになりました。プロジェクトがrubygems.orgにないからといって、それがgemと呼ばれることを妨げるべきではありません。最終的に、rubygems.orgはgemのリポジトリであり、使用する必要はありません。Githubリポジトリまたはその他のリポジトリは別のソースとして表示できます。また、gemがGemファイルに組み込まれている必要はありません。