LoginSignup
12
16

More than 5 years have passed since last update.

Gemの作り方

Posted at

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 していくのみです。

12
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
16