Jewelerで作ったGemをGithubとRubygemsに登録

[Ruby - 読みをポケベル入力数字に変換するPokebell gem - Qiita](http://qiita.com/riocampos/items/df546cb59eee2e91e839)を作った際の記録です。

[Jewelerで作ったGemをGithubとRubygemsに登録 - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20140626/register_my_gem_to_Github_and_Rubygems)にアップした記事の要約です。

アカウントは予め github には登録済みで、既に pokebell フォルダに、符号化できる状態の pokebell.rb を作成してある状況から開始しました。
#Jeweler について
>Jeweler とは、RubyGems 作成支援のツールであり RubyGems の作成を簡単にしてくれます。 下記のような機能があります。

>* パッケージのひな形の作成
* github へのソースの登録
* RubyGems への公開
* 公開したパッケージの更新

>[Rubyist Magazine - Jeweler で作る Rails 用 RubyGems パッケージとそのテストについて](http://magazine.rubyist.net/?0037-CreateRailsPlugin)

Github への登録をしてくれるのがありがたいです。
#Jeweler で gem 作成開始
```
$ jeweler --rspec --create-repo pokebell
	create	.gitignore
	create	Rakefile
	create	Gemfile
	create	LICENSE.txt
	create	README.rdoc
	create	.document
	create	lib
	create	lib/pokebell.rb
	create	spec
	create	spec/spec_helper.rb
	create	spec/pokebell_spec.rb
	create	.rspec
Jeweler has prepared your gem in ./pokebell
Please provide your Github password to create the Github repository
Password: 
```

ここで Github のパスワードを入力します。

```
Faraday::Builder is now Faraday::RackBuilder.
Jeweler has pushed your repo to git@github.com:riocampos/pokebell.git
```

当然ですが lib/pokebell.rb の中身は空っぽです。ので、バックアップを取っていた内容を流し込みます。そして `git commit` 。

なお、github情報を ~/.gitconfig に未登録だったり同名フォルダが存在したりすると失敗します。それらの対応については[Jewelerで作ったGemをGithubとRubygemsに登録 - 別館 子子子子子子（ねこのここねこ）](http://d.hatena.ne.jp/riocampos+tech/20140626/register_my_gem_to_Github_and_Rubygems)を確認してください。

##バージョン設定
ひとまずバージョンを0.0.1にしておきたい。

```bash
$ rake version:write
Updated version: 0.0.0
$ rake version:bump:patch
Current version: 0.0.0
Updated version: 0.0.1
```

として VERSION ファイルの作成及び記載バージョンを0.0.1に変更しました。

```VERSION
0.0.1
```

git commit も為されていました。

##gemspec ファイル作成

```ruby:Rakefile
gem.summary = %Q{TODO: one-line summary of your gem}
gem.description = %Q{TODO: longer description of your gem}
```

の部分を変更しておく必要があるようです。

```ruby:Rakefile
gem.summary = %Q{Japanese "Pokebell" pager message encoder}
gem.description = %Q{Japanese charactor displayed by hiragana, alphabet, or number encode to 2-digit in used "Pokebell" pager.}
```

に変更します。
続いて `rake gemspec` を実行します。

```bash
$ rake gemspec
Generated: pokebell.gemspec
pokebell.gemspec is valid.
```

pokebell.gemspec ファイルには

```ruby:pokebell.gemspec
# Generated by jeweler
# DO NOT EDIT THIS FILE DIRECTLY
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
```

とありますので、 gemspec ファイルを訂正する場合には Rakefile を直しましょう。ちなみに Rakefile の gem.summary などが **TODO** のままであってもそのまま gemspec ファイルが生成されます。先に直しておきましょう。

##rubygems を生成
なお、gemspec ファイルを作成しなくても`rake build`は実行可能です。

```
$ rake build
  Successfully built RubyGem
  Name: pokebell
  Version: 0.0.1
  File: pokebell-0.0.1.gem
```

##rubygems.org への登録

[Edit Profile | RubyGems.org | your community gem host](https://rubygems.org/profile/edit)

の最下段の curl コマンドを実行し rubygems.org のパスワードを入力すると、 `~/.gem/credentials` に API key を設定できます。

```
$ curl -u riocampos https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
Enter host password for user 'riocampos':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56    0    56    0     0     23      0 --:--:--  0:00:02 --:--:--    23
```

##リリース☆
`rake release` 一発で Github へのアップロード(`git push origin master`)、 gemspec ファイル作成(`rake gemspec`)、 rubygems 生成(`rake build`)、 rubygems.org への登録(`gem push ./pkg/pokebell-0.0.1.gem`)を行ってくれます。

```
$ rake release
Committing pokebell.gemspec
Pushing master to origin
Generated: pokebell.gemspec
pokebell.gemspec is valid.
  Successfully built RubyGem
  Name: pokebell
  Version: 0.0.1
  File: pokebell-0.0.1.gem
Executing "gem push ./pkg/pokebell-0.0.1.gem":
gem push ./pkg/pokebell-0.0.1.gem
Pushing gem to https://rubygems.org...
Successfully registered gem: pokebell (0.0.1)
```

#参考
* [jeweler でらくらく rubygems 作成（github編） - すがブロ](http://sugamasao.hatenablog.com/entry/20090723/1248357767)
* [ruby のGemパッケージを作る方法．その２ - それマグで！](http://takuya-1st.hatenablog.jp/entry/20110523/1306172537)
* [gemをつくってみよう！ その2　- gemspecからつくってみよう - | アルミナ解析室](http://jampin.blog20.fc2.com/blog-entry-56.html)
* [Rubyist Magazine - Jeweler で作る Rails 用 RubyGems パッケージとそのテストについて](http://magazine.rubyist.net/?0037-CreateRailsPlugin)
* [Rubyist Magazine - シリーズ パッケージマネジメント 【第 2 回】 RubyGems (2)](http://magazine.rubyist.net/?0010-PackageManagement)
* [Make your own gem - RubyGems Guides](http://guides.rubygems.org/make-your-own-gem/)