すがブロ

sugamasaoのhatenablogだよ

jeweler でらくらく rubygems 作成(github編)

jeweler とは

rubygems 作成支援ツールとでも言えば良いのでしょうか。
こいつ自体は gem install jeweler でインストールできます。
くわしくは Route 477 - gemspecの作り方がわからない?ならばjewelerだ

前提条件

このエントリを読む人は以下を満たしていると良いかもしれません

  • github にアカウントを持っている(もってない人はさっさと取ってきなさい)
  • jeweler がインストールされている
  • rubygems でインストールさせるライブラリ等を作りたい

github 用の プロジェクトのスケルトンコードの作成

まだ github のプロジェクトは作っていないので、jeweler に作ってもらいましょう。
jeweler のオプションに --create-repo オプションを追加すると、スケルトンコードの他に github 上のリポジトリも一緒に作成してくれます。
ちなみに、下記のプロジェクトの場合、rspec のひな形も作ってもらうため、 --rspec のオプションも付けています。runit でも可能なので、jeweler のヘルプを確認してみると良いです。

sugamasao% jeweler --rspec --create-repo  atnd4r
        create  .gitignore
        create  Rakefile
        create  LICENSE
        create  README.rdoc
        create  .document
        create  lib
        create  lib/atnd4r.rb
        create  spec
        create  spec/spec_helper.rb
        create  spec/atnd4r_spec.rb
Jeweler has prepared your gem in atnd4r
Enter passphrase for key '/Users/sugamasao/.ssh/github_id_rsa': 
Jeweler has pushed your repo to http://github.com/sugamasao/atnd4r
Jeweler has enabled gem building for your repo

結果の確認

ローカルには atnd4r ができています。

sugamasao% ls -l
total 0
drwxr-xr-x  10 sugamasao  sugamasao  340  7 20 19:24 atnd4r
drwxr-xr-x  13 sugamasao  sugamasao  442  7  6 02:10 saag

atnd4r の中身は以下の通り。spec ディレクトリもありますね。

sugamasao% ls -l atnd4r
total 24
-rw-r--r--  1 sugamasao  sugamasao  1053  7 20 19:24 LICENSE
-rw-r--r--  1 sugamasao  sugamasao   103  7 20 19:24 README.rdoc
-rw-r--r--  1 sugamasao  sugamasao  1188  7 20 19:24 Rakefile
drwxr-xr-x  3 sugamasao  sugamasao   102  7 20 19:24 lib
drwxr-xr-x  4 sugamasao  sugamasao   136  7 20 19:24 spec

gihub のほうも確認してみると、既に作成されている
http://github.com/sugamasao/atnd4r/tree/master

追記

この github のプロジェクトページを確認した際に、以下をやっておかないと、gem の自動生成が効きません!
上記 github ページから admin ページへ行き、

RubyGem:

となっている項目にチェックを入れてください*1

VERSIONファイルを作る

デフォルトではバージョンファイルが存在しないので、作りましょう。
atnd4r のディレクトリに移動して、 rake -hrake -T*2 で rake タスクを確認してみる。

sugamasao% rake -T
rake build                  # Build gem
rake clobber_rcov           # Remove rcov products for rcov
rake clobber_rdoc           # Remove rdoc products
rake gemspec                # Generate and validates gemspec
rake gemspec:generate       # Generates the gemspec, using version from VERSION
rake gemspec:validate       # Validates the gemspec
rake install                # Install gem using sudo
rake rcov                   # Run specs using RCov
rake rdoc                   # Build the rdoc HTML Files
rake release                # Release the current version.
rake rerdoc                 # Force a rebuild of the RDOC files
rake rubyforge:release:gem  # Release the current gem version to RubyForge.
rake rubyforge:setup        # Setup a rubyforge project for this gem
rake spec                   # Run specs
rake version                # Displays the current version
rake version:bump:major     # Bump the gemspec by a major version.
rake version:bump:minor     # Bump the gemspec by a minor version.
rake version:bump:patch     # Bump the gemspec by a patch version.
rake version:write          # Writes out an explicit version.
rake version_required       # Setup initial version of 0.0.0

この、rake version:write で作ってくれそうだ。

sugamasao% rake version:write

これでバージョンファイルが作成された。

コミットする

とりあえず、最初のスケルトンの時点でコミットしておきましょう

% git commit *

gemspec の生成

rubygems を作る為には gemspec が必要です。しかし、これも jeweler がうまいことやってくれるので、以下のコマンドで生成しましょう*3

jeweler gemspec
rake gemspec

これでできたので、git に追加しておく

git add atnd4r.gemspec

そしてコミットしておく

git commit atnd4r.gemspec

そして、push する

もしかしたら、ここの手順は不要で、rake relsease で良いのかもしれない。
でも、おれは最初の push は手動でやったので書いておきますね。

おれの場合、すでに origin は他のリポジトリで名前を使ってしまったので、別の名前をつけることにする

% git remote add origin_atnd4r git@github.com:sugamasao/atnd4r.git

ちなみに、git remote rename old new で名前はかえられるよ
だいたい、Webで調べると origin って付けてるけど、リポジトリ名とかにした方が良いかもね。

それでは github へ push

% git push origin_atnd4r master

できた。
あとは、適宜バージョンを上げておけば、github 上で gems を作成してくれます!
※逆に、バージョンを上げないと gems ができないので、注意

これであなたも

rubygems auther です!

初回以降の開発プロセス

  • コードの修正
  • rake spec でテスト
  • rake version:bump:hoge でバージョンアップ
  • rake release でリリース
    • gemspec の生成とか
    • github への push とか
    • github の tags を付け(いつでもそのバージョンをDLできるよ!)
    • っていうのをやってくれるから、手動 push よか release の方が良いよ!

追記(Rdoc で日本語が化けるんですけど)

これは、rdoc のキャラセットがデフォルトだと ascii 前提になっているのが原因ですね。デフォルトで UTF-8 にしてほしいところですが。。。
さて、UTF-8 にする方法ですが、Rakefile の rdoc の設定部分で charset のオプションを渡してあげるようにすれば解決します。
Rakefile 内の、

require 'rake/rdoctask'

という行があるところの下に

  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = "atnd4r #{version}"
  rdoc.rdoc_files.include('README*')
  rdoc.rdoc_files.include('lib/**/*.rb')

こんな感じの既述があるので、その最後尾に以下のように追記してあげると良いです。以下の例では、UTF-8 の設定の他に、ソースコードの rdoc で行番号を表示する設定も追加してます(詳しくは rdoc 自身のオプションを参照ください)。

  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = "atnd4r #{version}"
  rdoc.rdoc_files.include('README*')
  rdoc.rdoc_files.include('lib/**/*.rb')
  rdoc.options = ["--charset", "utf-8", "--line-numbers"] # <------ 追加

これで無事、日本語が通るようになります。もちろん、EUCSJIS 等の設定も可能です(たぶん)。

さらに追記(2009/7/26)

github に push してから、実際に gem isntall されるまでは多少タイムラグがある。
GitHub RubyGemsrubygems 化された状態のリストがあり、install 可能な状態になるとリストに載ります。
つまり、上記ページに載った= install 解禁となります。
ちなみに、10分程度でリストに載るという既述を良く見るけれど、新規登録の時は普通に一時間以上掛かってる気がする。まぁ、ここまできたらのんびり構えて居なさい、ということですね。

*1:うーん、ここまでやってくれるのかと思ってた・・・

*2:コメント欄で指摘して頂きました!

*3:最初jeweler コマンドって書いてありましたけど、正しくは rake コマンドでした! コメントにて指摘頂きました。感謝です!><