web-dev-qa-db-ja.com

プラグインとRuby gems?

プラグインとgemの違いは何ですか?それぞれの異なる用途は何ですか?どこで、なぜ一方を他方の上に使用しますか?

33
Mr. Black

宝石

  • Gemは、 RubyGems で定義されたパッケージングシステムを使用したパッケージ化されたRubyアプリケーションです。
  • Rails自体は宝石です。

    Railsgemはjruby-1.0\lib\Ruby\gems\1.8\gems\Rails-1.2.3に次のようにインストールされます。

    [〜#〜] dir [〜#〜]bin
    [〜#〜] dir [〜#〜]組み込み
    68,465変更ログ
    [〜#〜] dir [〜#〜]構成
    [〜#〜] dir [〜#〜]ディスパッチ
    [〜#〜] dir [〜#〜]doc
    [〜#〜] dir [〜#〜]環境
    307 fresh_rakefile
    [〜#〜] dir [〜#〜]ヘルパー
    [〜#〜] dir [〜#〜]html
    [〜#〜] dir [〜#〜]lib
    1,072MIT-LICENSE
    11,969 Rakefile
    8,001 README
    libディレクトリにはすべてのgemソースコードが含まれています。

  • Gemバージョンのインストール、アップグレード、クエリを実行できます。私の GemInstaller のようなツールを使用すると、1つの簡単な構成ファイルでRubyGemsのインストールとロードを簡単に自動化できます。

  • Rubyインタープリター用にインストールされたGemは、そのインタープリターによってシステム全体で使用できます。
  • Gemはプラグインとして公開される場合があります。
  • ベンダー/宝石でベンダー化することもできます。

プラグイン

  • プラグインはRails Frameworkの拡張です。
  • コマンドを使用してアップグレードすることはできません。アップグレードするには、アップグレードしたバージョンをアンインストールしてからインストールする必要があります。
  • Railsアプリケーションにフックする必要があります。(init.rbが必要です)
  • Install.rbファイルがあります。
  • プラグインをGemとして公開することはできません。
  • アプリケーション全体でのみ使用できます。

Goldspikeプラグインは、アプリケーションのvendor\plugins\Rails-integrationディレクトリに次のようにインストールされます。
7,089 build.xml
1,141 LICENSE.txt
[〜#〜] dir [〜#〜]プラグイン
6,675 pom.xml
1,447 README
[〜#〜] dir [〜#〜]サンプル
plugins/goldspikeディレクトリはで構成されています
24 init.rb
25 install.rb
[〜#〜] dir [〜#〜]lib
549 Rakefile
536README
[〜#〜] dir [〜#〜]タスク
[〜#〜] dir [〜#〜]テスト
libディレクトリには、すべてのプラグインソースコードが含まれています。

Gem vs Plugins

  • Railsには、vendor/plugins /ディレクトリからプラグインをロードする方法がありました。 Railsは、vendor/gems /ディレクトリ内のプロジェクトにgemをバンドルするためのサポートを追加したため、これはおそらく非推奨になります。rspecのgemバージョンは、日常の使用を目的としたものです。 1.2.xファミリー以前のRailsアプリケーションをサポートしていない限り、これらを使用してください。
  • 実際のアプリケーションにライブラリを含めていないため、Gemsを使用してリポジトリをチェックインおよびチェックアウトする方が速くなることがよくあります。多くの場合、分散チーム間のソフトウェアバージョンに関して発生する非互換性に関連するプラグインの使用による問題は少なくなります。
  • 一般的な経験則では、Rails固有の機能をプラグインにし、より一般的なRubyライブラリをgemにします。
39
Piyush Mattoo

ジェムはシステムレベルでインストールされ、プラグインはアプリケーションレベルでインストールされます。つまり、2つ以上のアプリが同じサーバーで実行されている場合、それらはgemを共有できますが、それぞれに独自のプラグインがあります。今のところ、アプリケーションの規模に応じて保守が容易になるため、gemを使用することをお勧めします。

9
serengeti12