2008年6月20日金曜日

RubyGemの作り方

参考になるかどうかわからないけど、(自分用に)Gemを作った仮定をメモしておきます。

かなーり適当な事を書いてますので、突っ込みよろしくです。

まず、GemとPluginの使い分けから。

  • Gemはシステムに入れるもので、複数のRailsアプリや、Railsを前提としない環境で使う
  • PluginはRailsアプリに入れるもので、特定のアプリのみで使う。複数のアプリで使い方ったら、それぞれに入れる。

今回は、Rails環境を簡単に作るためのGemを作っていますので、これを題材にします。

よく調べてないけど、関連状況はこんな感じ。

  • gemの配布はRubyForgeにgemを登録する事で行う。ユーザ登録やgem登録などは無料。
  • RubyForgeへのgem登録は、昔は.gemと.tarを手動でアップロードしてたけど、今はrakeタスクがある。(hoe)
  • gemのひな形としてnewgemを使う。これはhoeを含む。
  • hoeはgemの作成・登録を便利にするためのgem。newgemに含まれる。
  • このチュートリアルでのパッケージ名はrocketstarterにするよ。

参考

RubyGems パッケージの作り方 - rubyforge 登録まで ※さすがにちょと古い。概念押さえるべし

RubyGemsパッケージを作る  ※新しい。基本はコレ

rubyforgeがとても便利  ※新しい。ノウハウはコレ


手順としては、

  1. RubyForge上に自分のアカウントを作る
  2. RubyForge上で新規プロジェクトを登録する
  3. newgemのインストールとRubyForgeの設定
  4. newgemを使ってひな形を展開する
  5. ひな形をベースに管理情報やライセンスなどを書き込んで、公開したいプログラムを配置する
  6. testまたはrspecを書いておく
  7. rakeタスク(hoe)を使って、gemをビルド&インストールしてみて、動作を確認
  8. rakeタスク(hoe)を使って、RubyForgeに登録する
  9. RubyForgeへのアナウンス

1.RubyForge上に自分のアカウントを作る

無料なのでさっさと作ってしまうのが吉。

本名曝す事になるのは、しょうがないのかな?

SSHの公開鍵なんかもさっさと登録!!

2.RubyForge上で新規プロジェクトを登録する

プロジェクト登録は最大48時間かかるって書いてあるので、登録待ちでしょんぼりしないように、先に作っておくと良い。

申請内容を微調整される事もあるので、newgemに手を出す前に登録できた事を確認した方がいいよ。

あと、プロジェクト登録前にプログラム作っちゃうと、新規プロジェクト登録時に他のプロジェクトと名前が被っていて、そのままでは登録できないって罠にハマる可能性があるよ。<ハマったやつ

3.newgemのインストールとRubyForgeの設定

gem install newgem

でgemをインストールしておき、

rubyforge setup

で設定ファイルを作ったら、

rubyforge config

でRubyForgeからプロジェクトIDを取得しておく。

※先にRubyForgeで新規プロジェクトの申請をしておき、登録済みになってないとプロジェクトIDは取得できない。

2008/6/20 12:00追記

なんかgem list -rに出てこないなぁと思ったら、rake releaseに失敗してたみたい。対処法としては上記rubyforge setupとconfigを終えてから、

rubyforge login

として、エラーが無い事を確認。(エラーがある場合は、ブラウザからRubyForgeにログインして、言語をEnglishにしておく。rubyforge loginでは、ログインできた事の判定にtitleタグを使っているらしく、これは言語設定により異なるため)

あと、後々rake deployやrake releaseの時に

no <processor_id> configured for <Any>

などのエラーが出る場合は、rubyforge configに失敗していて、一部データが取得できてないので、以下のyamlデータを~/.rubyforge/auto-config.ymlに貼っておく。参考 Building a Ruby Gem

processor_ids:

IA64: 6000

AMD-64: 1500

Any: 8000

Sparc: 4000

PPC: 2000

Other: 9999

Alpha: 7000

i386: 1000

UltraSparc: 5000

MIPS: 3000


4.newgemを使ってひな形を展開する

newgem rocketstarter [options]

でひな形を展開する。

この時点でオプションを指定しておけば、のちのち楽になるものがたくさんある。

$ newgem --help
Take any library or Rails plugin or command line application, gemify it, and easily share it with the Ruby world.

Usage: newgem /path/to/your/app [options]

Options:
-b=BIN_NAME[,BIN_NAME2] Sets up executable scripts in the bin folder.
--bin-name Default: none
-e, --email=PATH Your email to be inserted into generated files.
Default: ~/.rubyforge/user-config.yml[email]
-j, --jruby Use if gem is for jruby.
-a, --author=PATH Your name to be inserted into generated files.
Default: ~/.rubyforge/user-config.yml[user_name]
-p, --project=PROJECT Rubyforge project name for the gem you are creating.
Default: same as gem name
-r, --ruby=path Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).
Default: /opt/local/bin/ruby
-T, --test-with=TEST_FRAMEWORK Select your preferred testing framework.
Options: test::unit (default), rspec.
-v, --version Show the newgem version number and quit.
-V, --set-version=YOUR_VERSION Version of the gem you are creating.
Default: 0.0.1
-W, --website-disable Disables the generation of the website for your RubyGem.
--simple Creates a simple RubyGems scaffold.
General Options:
-h, --help Show this help message and quit.
--pretend Run but do not make any changes.
-f, --force Overwrite files that already exist.
-s, --skip Skip files that already exist.
-q, --quiet Suppress normal output.
-t, --backtrace Debugging: show backtrace on errors.
-c, --svn Modify files with subversion. (Note: svn must be in path)

とりあえず

newgem rocketstarter --bin-name rocketstarter --test-with=rspec -e "myaddress@example.com" -a "maimuzo"

あたりで作るかな。

5.ひな形をベースに管理情報やライセンスなどを書き込んで、公開したいプログラムを配置する

config/hoe.rbあたりをいじった後にgrep -r "FIX" ./*して引っかかったところをすべてチェック。

上記-aと-eを付けておくと、この作業が楽になるよ。

あとは、適当に。

プログラムの配置は、binの中の実行ファイルと、libの中のrocketstarter.rbを変更して、実態はlib/rocketstarter/の中に入れた。

あと、サポートフォーラムとして、google groupsに部屋作れって書いてあるね。(一応素直に作った)

6.testまたはrspecを書いておく

今回は動作環境がよくわかってないので、後付けにするよー

7.rakeタスク(hoe)を使って、gemをビルド&インストールしてみて、動作を確認

ちなみに、--simpleオプションをつけると、この機能は使えない。

まず、公開用のRSA公開/秘密鍵を作る

rake generate_key

マニフェストファイル(パッケージに含めるファイル?)を最新状態で作り直す

rake manifest:refresh

現在の設定でgemを作って、ローカルにインストールしてみる。

rake local_deploy

だめぽだったら

sudo gem uninstall rocketstarter

して、変なところを直してからまたrake local_deployする。

8.rakeタスク(hoe)を使って、RubyForgeに登録する&告知する

rake check_manifest

でファイルの整合性が崩れてないか念のためチェック

rake deploy VERSION=0.0.1

でリリース。しばらく待つべし。

9.RubyForgeへのアナウンス

rake announce

でいいみたい。

gemの配布が始まってからの方がいいかもねー

0 件のコメント: