LoginSignup
52
49

More than 5 years have passed since last update.

Gemを作って、自動テストを回して、公開してみる方法

Last updated at Posted at 2013-12-28

rubyでstable_sortをできるようにするgemを作ったので、作った課程のメモ。
Gemを公開し、Rspecでテストを書いてTravis CIで回すところまでやっている。

実際に出来たもの

gemのテンプレートを生成

bundle gemコマンドを使う。

% bundle gem stable_sort -t                   
      create  stable_sort/Gemfile
      create  stable_sort/Rakefile
      create  stable_sort/LICENSE.txt
      create  stable_sort/README.md
      create  stable_sort/.gitignore
      create  stable_sort/stable_sort.gemspec
      create  stable_sort/lib/stable_sort.rb
      create  stable_sort/lib/stable_sort/version.rb
      create  stable_sort/.rspec
      create  stable_sort/spec/spec_helper.rb
      create  stable_sort/spec/stable_sort_spec.rb
      create  stable_sort/.travis.yml
Initializating git repo in /Users/aikawa/work/stable_sort

-tオプションでRSpecのテストも生成してくれる。

中身を作る

StableSortの場合ArrayやEnemeratorにモンキーパッチするだけなのでモジュールの中身は空で良い。

lib/stable_sort.rb
require "stable_sort/version"
require "stable_sort/extension/enumerator"
require "stable_sort/extension/array"

module StableSort
end

例えばEnemeratorクラスの中身はこんな感じ。

stable_sort/extension/enumerator.rb
class Enumerator
  def stable_sort_by
    sort_by.with_index{ |e, index| [yield(e), index] }
  end

  def stable_sort
    stable_sort_by { |x| x }
  end
end

.gemファイルを作る

% gem build stable_sort.gemspec
  Successfully built RubyGem
  Name: stable_sort
  Version: 0.0.1
  File: stable_sort-0.0.1.gem

stable_sort gemの公開

% gem push stable_sort-0.0.1.gem 
Pushing gem to https://rubygems.org...
Successfully registered gem: stable_sort (0.0.1)

stable_sortとか言う名前取れないかと思ったらまさかとれてしまったw

テストを書く

デフォルトで1つFailするテストが作られているので、とりえあずbundle exec rspecで動かしてみる。

Failしてることを確認したら、それを消して後は適当にテストを書く。
https://github.com/awakia/ruby_stable_sort/commit/6c276352ef7ef9b1b6f55d85fb1d2d1223e7d374

Travis CIで動かす

https://travis-ci.org/ にてGithubアカウントでログイン。

プロフィールページに行って (https://travis-ci.org/profile) 連携をON

travis_on.png

テスト結果をREADMEに表示

ドキュメント: http://about.travis-ci.org/docs/user/status-images/

マークダウンで言えば、以下のものを書けばいいみたい。

README.md
[![Build Status](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png)](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME])

こんな感じ -> Build Status

テストカバレッジも出してみる

COVERALLSを使う。

gemspecのdevelopment dependencyにcoverallsを追加。

stable_sort.gemspec
  spec.add_development_dependency "coveralls"

その上で、spec_helperの最初でrequireする。

spec_helper.rb
require 'coveralls'
Coveralls.wear!

# ...

バッジもつける -> Coverage Status

README.md
[![Coverage Status](https://coveralls.io/repos/awakia/ruby_stable_sort/badge.png?branch=master)](https://coveralls.io/r/awakia/ruby_stable_sort?branch=master)

バージョンを上げてみる

0.0.1だと使えないGemみたいに見えるので、1.0.0に上げてみる。

lib/stable_sort/version.rb
module StableSort
  VERSION = "1.0.0"
end

あとは

gem build stable_sort.gemspec

して

gem push stable_sort-1.0.0.gem

する。

リリースにタグを付けておく

ちゃんとしたgemでは、gitでタグを付けておくことにより、Githubのreleasesにそれぞれバージョンがどのコミットまでの部分だったかがわかるようになっている。それに習って自分でもタグを付けておく

まずは古いバージョンのコミット位置で

git tag v0.0.1 

とし、
次に新しいバージョンのコミット位置で

git tag v1.0.0

とする。

git push origin --tags

とすることでリモートのGithubにもタグが反映される。

参考にした資料

RubyGemsに登録するところの参考文献:

Gemを作って公開するところの参考文献:

ちなみに

これは毎週木曜Wantedlyでやっているもくもく会で作りました。
興味がある方は一度こちらからどうぞ

52
49
1

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
52
49