どのように自分のRubyGemを開発しますか?

12228 ワード

RubyGemとは
RubyGemはRuby言語の標準ソースパッケージ形式です.
みんなはずっとgemという命令を使っていますが、これがどのように来たのか知っている人は少ないです.ここではネットからいくつかの資料をまとめて、みんなに共有します.一番後ろにこれらのリンクがありますので、もっと知りたいので、クリックしてみてください.Ruby言語は他のいくつかのスクリプト言語の影響を受けており、その中にPerlがあり、PerlにはCPAN(Comprehensive Perl Archive Network)があり、これも現在のRubyGemsのようなものです.orgですが、当時Rubyにはこんなものはありませんでした.CPANやRubyGemのように、ソースコードのパッケージとインストール方法を定義しているだけで、無料の共通のソースパッケージのストレージを提供する組織もあります.これは今、毎日使用しているインストール方法です.
gem install rails

RubyGemの発展の歴史の中で、何人かの重要な人物がいて、ここもゴシップの知識としてみんなに干して、みんなのお茶の後の話にしましょう.Rubyコミュニティの人はJim Weirichという人を知っているはずです.彼は2014年2月に亡くなりました.かわいい白ひげのおじさんです.彼は他の4人のRich Kilmer、Chad Fowler、David Black、Paul Brannanと2003年にRubyGemの基本的な規範と実在を制定しましたが、実はRubyGemが最初にRyan Leavengoodが2001年に開発したのです.残念ながら流行しなかったが、2003年になると、前の5人はRyan Leavengoodの同意を得て、RubyGemという名前を使って、新しいRubyGemを開発したが、その中でRyan Leavengoodのコードは使われていなかった.ここにrubygemsの実行ファイルのリンクを添付して、注釈を見て、中には上の何人かの名前rubygems/blob/master/bin/gemがあります
rubygemsにはデフォルトのソースがあり、変更することもできます.国内の基本はhttps://rubygems.taobao.orgで、一部の会社は自分の需要があり、自分のプライベートソースを構築します.現在の公式ソースはhttps://rubygems.orgで、このソースも何度も転々としており、初期のRubyユーザーはhttp://gems.rubyforge.orghttp://gemcutter.orgを知っており、githubもソースとして使用されたことがある、つまりhttp://gems.github.comであり、この3つは現在廃棄されている.
見てみると、簡単なgem installの歴史はまだ少なくないでしょう.
RubyGemの基本的な使い方
gem install rails  //  rails
gem install rails -v 4.2.0   //       rails
gem search rails  //         rails gem
gem search ^rails  //        rails   gem
gem search ^rails -d  //        rails   gem,     
gem build package.gemspec  //    gem,        gem  ,     .gem  
gem push pack-1.0.gem  //     ,   rubygems.org

ここでは最もよく使われる使用方法を簡単にリストしただけで、みんなが見てくれればいいのに、命令は限られていて、簡単で、gem --helpを実行して、基本的にすべてのものを10分以内にマスターすることができます.
自分のRubyGemを作る方法
数年前まではこんな道具があったが、今はbundlerで十分だ.
$ bundler gem mygem
      create  mygem/Gemfile
      create  mygem/Rakefile
      create  mygem/LICENSE.txt
      create  mygem/README.md
      create  mygem/.gitignore
      create  mygem/mygem.gemspec
      create  mygem/lib/mygem.rb
      create  mygem/lib/mygem/version.rb
Initializing git repo in /home/lizhe/Workspace/mygem
bundler命令で終わりました.mygemというフォルダの下にあるものを見てみましょう.
total 24
-rw-rw-r-- 1 lizhe lizhe   90  7   2 15:52 Gemfile
drwxrwxr-x 3 lizhe lizhe 4096  7   2 15:52 lib
-rw-rw-r-- 1 lizhe lizhe 1062  7   2 15:52 LICENSE.txt
-rw-rw-r-- 1 lizhe lizhe  850  7   2 15:52 mygem.gemspec
-rw-rw-r-- 1 lizhe lizhe   29  7   2 15:52 Rakefile
-rw-rw-r-- 1 lizhe lizhe  556  7   2 15:52 README.md
gemspecというファイルを見てみましょう.このGemの様々な情報を説明しています.
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'mygem/version'

Gem::Specification.new do |spec|
  spec.name          = "mygem"
  spec.version       = Mygem::VERSION
  spec.authors       = ["lizhe"]
  spec.email         = ["[email protected]"]
  spec.summary       = %q{TODO: Write a short summary. Required.}
  spec.description   = %q{TODO: Write a longer description. Optional.}
  spec.homepage      = ""
  spec.license       = "MIT"

  spec.files         = `git ls-files -z`.split("\x0")
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
  spec.require_paths = ["lib"]

  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
end

この書類の内容を見た人がいるのを見つけたとき、その'git ls-files -z'.split("\x0")に関心を持っていました.どういう意味ですか.そしてその\x0は何ですか?リンクを添付して、説明して、リンクを参照してください.このファイルの一番上にlibフォルダをload pathに追加します.Gem::Specificationの第1部は主にこのgemの情報を説明しています.名前、バージョンなどが含まれています.第2部は、このgemがどのファイルを含むか、実行ファイル、テストファイル、およびどのパスの下のファイルがload pathに追加できるかです.第3部はmygemの開発に依存する他のgemである.これらの情報はカスタマイズできます.まずデフォルトに従います.buildの最初のgemにしましょう.
$ rake build

rake aborted!
WARNING: See http://guides.rubygems.org/specification-reference/ for help
ERROR:  While executing gem ... (Gem::InvalidSpecificationException)
 "FIXME" or "TODO" is not a description
/home/lizhe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.12/lib/bundler/gem_helper.rb:149:in `sh' /home/lizhe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.12/lib/bundler/gem_helper.rb:57:in `build_gem'
/home/lizhe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.12/lib/bundler/gem_helper.rb:39:in `block in install' /home/lizhe/.rvm/gems/ruby-2.1.5@global/bin/ruby_executable_hooks:15:in `eval' /home/lizhe/.rvm/gems/ruby-2.1.5@global/bin/ruby_executable_hooks:15:in `<main>' Tasks: TOP => build (See full trace by running task with --trace)

この警告は、gemspecFIXMETODOを置き換える必要があることを示しています.この警告は、解決しなければgemをbuildすることはできません.summaryとdescriptionのTODOを直接削除します.
  spec.summary       = %q{Write a short summary. Required.}
  spec.description   = %q{Write a longer description. Optional.}

再実行:
$ rake build

mygem 0.0.1 built to pkg/mygem-0.0.1.gem.

さあ、最初のgemが誕生しました.現在のディレクトリのpkgの下にあります:mygem-0.0.1.gem .どのように使いますか?bundlerを考慮しない場合、irbやpryのセッションを開いた場合、require "mygem"と書くのが一般的です.もしあなたが今このようにすれば、rubyのload pathにインストールされていないので、それをインストールすることはできません.
$ rake install

mygem 0.0.1 built to pkg/mygem-0.0.1.gem.
mygem (0.0.1) installed.

インストールが完了したら、使用してirbを開きます.
require "mygem"
=> true
Mygem
=> Mygem

ほら、もうこのmoduleは使えますが、このgemは何もできません.では、lib/mygemを開く方法を追加しましょう.rb、メソッドを追加します.
require "mygem/version"

module Mygem
  def self.hello
    p "hello from my gem"
  end
end

保存してrake installを実行します.このコマンドはbuildからinstallを開始し、irbを再開します.
require "mygem"
=> true
Mygem.hello
=> "hello from my gem"

正常に動作したら、最初のgemを発表しましょう.
rake release
//     rubygems.org       

railsアプリケーションがhello from my gemを出力する必要がある場合は、Gemfileにこのgemを追加できます.
gem 'mygem'

実行bundle installを追加すると、railsアプリケーションで使用できます.
参照リンク:
  • RubyGems
  • Gemcutter Is The New Official Default RubyGem Host
  • Gem Building is Defunct

  • 本文はOneAPMエンジニアのオリジナル文章です.OneAPMは中国の基礎ソフトウェア分野の新興リーダー企業であり、企業のユーザーと開発者が簡単に実現できる:遅いプログラムコードとSQL文のリアルタイムキャプチャ.詳細については、OneAPM公式テクニカルブログを参照してください.