RubyGemsをローカルに作成(example: ruby_learner)
Gemの入れ物を用意する
$ bundle gem ruby_learner -t
create ruby_learner/Gemfile
create ruby_learner/Rakefile
create ruby_learner/LICENSE.txt
create ruby_learner/README.md
create ruby_learner/.gitignore
create ruby_learner/ruby_learner.gemspec
create ruby_learner/lib/ruby_learner.rb
create ruby_learner/lib/ruby_learner/version.rb
create ruby_learner/.rspec
create ruby_learner/spec/spec_helper.rb
create ruby_learner/spec/ruby_learner_spec.rb
create ruby_learner/.travis.yml
Gemの基本設定(gemspecファイルについて)
- TODOの部分は極力入力する。(ただし、以下の部分はreleaseの時のエラーの原因になるのでコメントアウトしましょう。)
ruby_learner.gemspec
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
# to allow pushing to a single host or delete this section to allow pushing 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
- そのgemの開発だけに必要なものはadd_development_dependency で指定する。
ruby_learner.gemspec
spec.add_development_dependency "bundler", "~> 1.16"
- gemの実行に必要なgemはadd_dependencyで指定する。
ruby_learner.gemspec
spec.add_dependency "minitest", "~> 5.10.3"
Gemの基本設定(実行ファイルについて)
- lib内に実行領域が存在する。Gemと同じ名前のファイルがあるのでそれが実行されると考える。
ローカルでのテスト実行の例
- gemのディレクトリ上でrakeコマンドを実行する。
$ rake build
$ rake install:local
リリースまでの流れ
GitHubでのアカウント作成とGemのディレクトリを新規リポジトリに登録する
- 省略
RubyGemsでの操作
- アカウント作成はこちら >
https://rubygems.org/sign_up
- 自分のアカウントのEdit profileからAPI ACCESSの以下のコマンドを実行する。
curl -u USERNAME https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
- APIがきちんとコピーされているか確認する。
cat ~/.gem/credentials
リリースコマンド(変更は全てgithub上にpushしておきましょう。)
bundle exec rake release
- 同じversionでのリリースはできないので、versionは更新して追加リリースの場合は
rake release
を実行しましょう。 - versionの更新は、gemのディレクトリ内の
lib/#{gem_name}/version.rb
の値を変更しよう。
Versionをあげた際の注意
- versionをあげるとローカルに保存したgemは全くの別物としてインストールされます。
- gemを削除したい場合は
gem uninstall #{gem_name}
で行えます。(最新版と過去版の2つある場合は選択できるようになっています。) - ちなみに、
gem list #{gem_name}
でバージョンの確認を行えます。