読者です 読者をやめる 読者になる 読者になる

20分でテスト付きのgemを作って公開する

20分程度で、テストコード付きのgemを作って公開するところまでやってみました。

1. gemのひな形を作ります。

$ bundle gem sudden_death -b -t
$ git commit -m "first commit"

git initとgit addが自動的に行われるので、コミットしておきましよう。

2. sudden_death.gemspecを編集して、コマンドの説明を記述します。

〜略〜
spec.name          = "sudden-death"
〜略〜
spec.summary       = %q{Add sudden_death method to String class.}
spec.description   = %q{Add sudden_death method to String class.}
〜略〜
$ git commit -a -m "説明追加"

3. 文字列を"突然の死"に変えるコードを書きます。

lib/sudden_death.rbを編集します。

require "sudden_death/version"

class String
  def sudden_death
    len = (self.chars.inject(0){|sum, c| sum + (c.bytesize > 1 ? 2 : 1)} / 2).floor
    <<EOS
_#{"" * (len + 2)}_
> #{self} <
 ̄Y#{"^Y" * len}
EOS
  end
end

Stringクラスを拡張してみました。

4. コマンドラインからコマンドとして呼び出せるようにします。

bin/sudden_deathを編集します。

#!/usr/bin/env ruby

require 'sudden_death'

str = ARGV.join(' ').sudden_death
puts str

5. テストコードを記述します。

spec/sudden_death_spec.rbを編集します。

require 'spec_helper'

describe SuddenDeath do
  it 'should have a version number' do
    SuddenDeath::VERSION.should_not be_nil
  end

  it 'should make totsuzenno-shi' do
    str = '突然の死'
    sd = <<-EOS
_人人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y ̄
    EOS
    (str.sudden_death == sd).should be_true
  end
end

テストをするには、このプロジェクトのルートディレクトリにいる状態で、

$ rake spec

とコマンドを打ちます。
うまく動作するかどうか確認しましょう。

6. gemを公開します。

$ rake build
$ gem push pkg/sudden-death-0.0.1.gem

完成!

こんな感じで、gemを作って開するまでだいたい20分程度でできました。