Rubygems.org に登録
登録はこちらの form から。
https://rubygems.org/sign_up
開発マシンに Rubygems.org の API Token を配置
こちらのページの下の方に書いてある curl
コマンド実行するか、手動で配置。
https://rubygems.org/profile/edit
以下のようなファイルが出来上がってれば、準備完了。
$ cat .gem/credentials
---
:rubygems_api_key: <your-api-token>
Bundler で Gem の雛形作成
<gem-name>
の部分は他の gem とかぶらないように注意。
$ bundle gem <gem-name>
以下では nov-test-gem
という gem を作る前提で話を進めます。
bundle gem
すると、gem 公開に必要な各種設定ファイルや lib ディレクトリなどが生成されます。
$ bundle gem nov-test-gem
Creating gem 'nov-test-gem'...
MIT License enabled in config
Code of conduct enabled in config
create nov-test-gem/Gemfile
create nov-test-gem/.gitignore
create nov-test-gem/lib/nov/test/gem.rb
create nov-test-gem/lib/nov/test/gem/version.rb
create nov-test-gem/nov-test-gem.gemspec
create nov-test-gem/Rakefile
create nov-test-gem/README.md
create nov-test-gem/bin/console
create nov-test-gem/bin/setup
create nov-test-gem/.travis.yml
create nov-test-gem/.rspec
create nov-test-gem/spec/spec_helper.rb
create nov-test-gem/spec/nov/test/gem_spec.rb
create nov-test-gem/LICENSE.txt
create nov-test-gem/CODE_OF_CONDUCT.md
Initializing git repo in /Users/nov/Desktop/nov-test-gem
雛形を適宜編集
*.gemspec ファイル
まずは nov-test-gem/nov-test-gem.gemspec
を開いて、TODO になっている箇所 (gem の説明等) を適宜編集しましょう。今回は Rubygems.org への公開を前提としているため、allowed_push_host
の部分は丸ごと削除します。
普段は Gemfile に指定するような dependencies も、gem の場合は *.gemspec ファイルに指定します。(Gemfile からは gemspec を参照するようになっています)
lib 以下
lib 以下は gem の本体コードが配置されます。
ここには当該 gem の lib 直下が $LOAD_PATH に含まれる状態で動くよう、適宜コードを配置します。
この記事では、lib 以下はとりあえず default のまま放置することにして、nov-test-gem/lib/nov/test/gem/version.rb
だけの状態で公開することにしましょう。default では first release が v0.1.0
になりますが、ここは適宜 v0.0.1
等にしてから初期公開した方が良いかもしれません。(個人の感想です)
Release
基本的には初期状態では必要な dependencies は全て手元にあるかとは思いますが、念のため bundle install
しておきましょう。
*.gemfile に dependencies を追加した際などは、bundle install
は必須です。
$ cd nov-test-gem
$ bundle install
そしておもむろに rake -T
として、呼び出し可能な rake task をリストアップしてみましょう。
環境によっては bundle exec rake -T
としないとエラーになることもあります。(bundle exec
をつけて Gemfile に指定されたバージョン固定の依存 gem を使うのが正しい作法ではあります。長いけど)
$ rake -T
rake build # Build nov-test-gem-0.1.0.gem into the pkg directory
rake clean # Remove any temporary products
rake clobber # Remove any generated files
rake install # Build and install nov-test-gem-0.1.0.gem into system gems
rake install:local # Build and install nov-test-gem-0.1.0.gem into system gems without network access
rake release[remote] # Create tag v0.1.0 and build and push nov-test-gem-0.1.0.gem to Rubygems
rake spec # Run RSpec code examples
rake release
なる task がありますね。実行してみましょう。(これも bundle exec rake release
じゃないとダメなこともあり)
$ rake release
nov-test-gem 0.1.0 built to pkg/nov-test-gem-0.1.0.gem.
Tagged v0.1.0.
Pushed git commits and tags.
Pushed nov-test-gem 0.1.0 to rubygems.org.
リリース完了しましたね。
あとは、lib 以下を適宜編集し、version を上げながら、順次 rake release
していくのみです。