bundle gem doala

動機

ドアラの顔文字どんなんだっけ?とか、ドアラのビジネスライクな仲間のペンギンの名前なんだっけ?ということ。よくあると思います。それを解決するためにgemをつくりました。

bundle gem doala

雛形作成に bundler というgemを使います。 コマンドを叩いてみましょう。こんな感じのファイル群が生成されます。

$ bundle gem doala
Creating gem 'doala'...
      create  doala/Gemfile
      create  doala/.gitignore
      create  doala/lib/doala.rb
      create  doala/lib/doala/version.rb
      create  doala/doala.gemspec
      create  doala/Rakefile
      create  doala/README.md
      create  doala/bin/console
      create  doala/bin/setup
      create  doala/.travis.yml
Initializing git repo in /Users/ohtsuka/myapp/doala

lib配下のファイルに実際のコードを記述していきます。今回はこんな感じ

$ cat lib/doala.rb
require "doala/version"

module Doala
  def face
    '(⌒(´・△・`)⌒)'
  end

  def business_friend
    'つば九郎'
  end

  module_function :face, :business_friend
end

buildしよう

bundlerさんがrakeタスクを用意してくれているので、ありがたく使わせていただきましょう

$ rake -T
rake build          # Build doala-0.1.0.gem into the pkg directory
...

早速実行してみましょう

$ rake build
rake aborted!
WARNING:  licenses is empty, but is recommended.  Use a license abbreviation from:
http://opensource.org/licenses/alphabetical
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
ERROR:  While executing gem ... (Gem::InvalidSpecificationException)
    "FIXME" or "TODO" is not a description

Tasks: TOP => build
(See full trace by running task with --trace)

doala.gemspecのsummaryとdescriptionにTODOと含まれているとエラーとなるようです。それらを書き換えて再実行

$ rake build
doala 0.1.0 built to pkg/doala-0.1.0.gem.

うまくいきました。pkgディレクトリ配下にgemが作られています。 では動作確認をしてみましょう。 普通にgem installできます。

$ gem i pkg/doala-0.1.0.gem
Successfully installed doala-0.1.0
1 gem installed

pryで動作確認

$ pry
[1] pry(main)> require 'doala'
=> true
[2] pry(main)> Doala.face
=> "(⌒(´・△・`)⌒)"
[3] pry(main)> Doala.business_friend
=> "つば九郎"

よさそうですね

テストを書こう

テストを書きます。今回はminitestというgemを使います。 Gemfileでなくdoala.gemspecに追加してbundle installします

Make your own gem - RubyGems Guides

上記ページを参考にテストの設定を行います。これでrake testでテストが実行できるようになります

テストを書いてコマンドを叩くとテストが通ったことを確認できます

$ rake test
Run options: --seed 14895

# Running:

..

Finished in 0.000904s, 2211.3301 runs/s, 2211.3301 assertions/s.

2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

リリースしよう

rake releaseコマンドを叩きます

$ rake release
doala 0.1.0 built to pkg/doala-0.1.0.gem.
Tagged v0.1.0.
Untagging v0.1.0 due to error.
rake aborted!

...

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

Tasks: TOP => release => release:source_control_push
(See full trace by running task with --trace)

色々メッセージが出てきて失敗しました。追随するブランチが設定されてなかった?(初めてこのエラーを見たのでよく分かっていませんm(_ _)m)のが原因のようです。以下のコマンドでエラーは出なくなりました

$ git push --set-upstream origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date

再度チャレンジ

$ rake release
doala 0.1.0 built to pkg/doala-0.1.0.gem.
Tagged v0.1.0.
Pushed git commits and tags.
rake aborted!
ERROR:  "https://rubygems.org" is not allowed by the gemspec, which only allows "TODO: Set to 'http://mygemserver.com'"
Pushing gem to https://rubygems.org...

Tasks: TOP => release => release:rubygem_push
(See full trace by running task with --trace)

rubygemsに登録するときにはspec.metadata['allowed_push_host']あたりを消しておこう - Qiita

上記Qiitaによると、誤ってrubygemに公開されるのを避けるようになっているらしい。doala.gemspecを修正して (あと、homepageも変える必要あり)再チャレンジ

$ rake release
doala 0.1.0 built to pkg/doala-0.1.0.gem.
Tag v0.1.0 has already been created.
Pushed doala 0.1.0 to rubygems.org.

うまくリリースされた模様

doala | RubyGems.org | your community gem host

動作確認してみましょう

$ gem i doala
Fetching: doala-0.1.0.gem (100%)
Successfully installed doala-0.1.0
1 gem installed
$ pry
[1] pry(main)> require 'doala'
=> true
[2] pry(main)> Doala.face
=> "(⌒(´・△・`)⌒)"

終わりっ!!