bundler で gem を作る

bundler を使う

コマンド

bundle gem new_gem_name

とすると new_gem_name という名前の gem のためのディレクトリが作られる。

gemspec の編集

変更が必要なところを直す。 summary と description を指定する必要がある。

依存関係は add_development_dependency と add_runtime_dependency で指定する。 バージョン指定の「~>」がよくわからなかったのだが、 調べると「~> 2.2.0」と書くと「’>= 2.2.0’, ‘< 2.3.0’」と同等となるようだ。

gem パッケージのバージョンを表す定数名を必要ならば変更する。

リリース

lib/*/version.rb の中のバージョン番号を変更して

rake release

とする。

C言語の拡張ライブラリ

gemspec に

s.extensions << 'ext/extconf.rb'

のようにして extconf.rb を指定する。

rspec 用のタスク

Rakefile に

require "rspec/core/rake_task"

RSpec::Core::RakeTask.new do |spec|
  spec.pattern = 'spec/**/*_spec.rb'
  spec.rspec_opts = ['--backtrace']
end

とかけば rspec を実行する spec タスクが追加される。 また、

RSpec::Core::RakeTask.new(:spec2) do |spec|
  spec.pattern = 'spec/dir/**/*_spec.rb'
  spec.rspec_opts = ['--backtrace']
end

のようにすればタスク名を spec2 として、 spec ディレクトリ以下の一部だけを実行するタスクを作ることができる。

参考

jeweler から bundler に変更する

busdle で gem のディレクトリを作る

old_dir は jeweler で作ったディレクトリとする。

bundle new_dir

で new_dir ディレクトリを作り、old_dir からファイルを移動する。 new_dir は gem の名前にしないと面倒なことになるので注意。

ファイルをコピーする

新しく作られた .git は削除して、古い .git をコピーする。

rm -rf new_dir/.git
cp -r old_dir/.git new_dir

.gitignore ファイルは必要な設定を移しておく。

lib や spec もコピーする。

cp -r old_dir/spec new_dir
rm -r new_dir/lib
cp -r old_dir/lib new_dir

LICENSE.txt や README.rdoc などもコピーしておく。

バージョンを設定する

old_dir の VERSION ファイルに書きこまれているバージョン番号を bundle 用に new_dir の lib/new_dir/version.rb に書き込む。 定数の名前を変更した場合は new_dir.gemspec の中も変更する。

gem の設定をコピーする

gem の依存関係は old_dir の Gemfile や Rakefile から new_dir の new_dir.gemspec に必要な依存関係を書きこむ。

old_dir の Rakefile で指定されている作者などの設定も new_dir.gemspec に書きこむ。

Rake のタスクをコピーする

必要に応じて old_dir/Rakefile のタスクを new_dir/Rakefile にコピーする。

newgem から bundler に変更する

newgem で作った gem を bundler を用いた gem に変更した。 newgem を使ったのがだいぶ前なので、どこをどう設定すれば良いのか はっきりわからなかった。

ファイルをコピーする

jeweler のときと同じようにファイルをコピーする。

gem の設定をコピーする

newgem 用の Rakefile を参考にして、*.gemspec を設定する。

バージョンを設定する

newgem はどのようにバージョンを管理していたのか忘れてしまった。 lib/*/version.rb に記述して *.gemspec に設定すれば良い。

Tags of current page

, ,