先日 Electron で遊ぶと言いつつ、ずっと rubygem を作っていました。
今後も作ることはあるかもしれないので、メモしておきます。
まず、雛形を作ります。
$ bundle gem new_gem --test
--test
付きで実行することで、テストの雛形も生成してくれます。
ついでに、 Git リポジトリを作ってくれてたり、 .gitignore
もあったりと、
とってもいい感じです。
次に、 new_gem.gemspec
を変更します。 生成直後はこんな感じ。
# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'new_gem/version' Gem::Specification.new do |spec| spec.name = "new_gem" spec.version = NewGem::VERSION spec.authors = ["Mikazuki Fuyuno"] spec.email = ["mikazuki_fuyuno@example.com"] spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.} spec.description = %q{TODO: Write a longer description or delete this line.} spec.homepage = "TODO: Put your gem's website or public repo URL here." # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or # delete this section to allow pushing this gem to any host. if spec.respond_to?(:metadata) spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'" else raise "RubyGems 2.0 or newer is required to protect against public gem pushes." end spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec" end
spec.authors
, spec.email
は、 Git の設定を元に自動で設定してくれています。
ということで、コード内に TODO
とある部分を編集します。
また、依存ライブラリがある場合も、こいつに設定していきます。
例えば、 nokogiri
に依存している場合は、
spec.add_dependency "nokogiri"
と、開発環境のみの依存はすでに記述されているようにできます。
gem のコード自体は、 lib/new_gem
以下に、クラスを増やしていきます。
lib/new_gem.rb
には、とりあえず require
だけ書いておけばいいんじゃないかなと。
ということで、こんな感じ
require 'new_gem/version'
クラスを増やした場合、例えば Cat クラス (lib/new_gem/cat.rb
) は、
require 'new_gem/version' require 'new_gem/cat'
といったように、適度に追加していきます。
gem が完成したら、 rake build
でビルドすると、ローカルにインストールすることができます。
インストールする場合は下のコマンドでインストールできます。
gem install -l pkg/new_gem-VERSION.gem -V
rubygems.org へと公開する場合は、 gemspec
を変更する必要があります。
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or # delete this section to allow pushing this gem to any host. if spec.respond_to?(:metadata) spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'" else raise "RubyGems 2.0 or newer is required to protect against public gem pushes." end
この部分を削除します。
んで、 rake release
で公開されます。
この時、 Git にタグ付けが行われるので、 変更は commit しておく必要があります。
ということで、 gem を作って使う/公開する流れでした。