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にモンキーパッチするだけなのでモジュールの中身は空で良い。
require "stable_sort/version"
require "stable_sort/extension/enumerator"
require "stable_sort/extension/array"
module StableSort
end
例えばEnemeratorクラスの中身はこんな感じ。
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
テスト結果をREADMEに表示
ドキュメント: http://about.travis-ci.org/docs/user/status-images/
マークダウンで言えば、以下のものを書けばいいみたい。
[![Build Status](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png)](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME])
テストカバレッジも出してみる
COVERALLSを使う。
gemspecのdevelopment dependencyにcoverallsを追加。
spec.add_development_dependency "coveralls"
その上で、spec_helperの最初でrequireする。
require 'coveralls'
Coveralls.wear!
# ...
[![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
に上げてみる。
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でやっているもくもく会で作りました。
興味がある方は一度こちらからどうぞ