主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2015/12/30
先日 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 を作って使う/公開する流れでした。