rubyでコードを書いてるとライブラリのパスだとか,モジュールの依存関係とかめんどくさくなってくる.あとGithubなどに置いておきたくなる.github にコードを置いてgem パッケージにしたい.*1ライブラリのロードパスを解決したい
2011-05-17追記
rubygems のページを見ると, jeweler /gem push でやれって書いてあった。
http://help.rubygems.org/kb/gemcutter/publishing-your-own-rubygem
gem を作るなら以下の、私の記事のやり方で構わないです。rubygemsに公開するなら上記URLに従う方が良いです.
gemの作り方
・gem作成用のパッケージをインストール
・Gemの名前を決める
・Gemのひな形を作る
・空っぽのパッケージを作ってみる
・Libにソースを書く
・テストのソースを書く
・テストを実行する
・パッケージ作成
Gem作成用パッケージ newgem をインストール
$ gem install rubyforge $ gem install newgem
ここでたくさんモジュール突っ込んでくれる.
RakefileのFIXMEを編集する
self.developer 'takuya_1st', 'takuya.nomorespam.1st@gmail.com' self.post_install_message = 'PostInstall.txt' self.rubyforge_name = self.name # TODO this is default value # self.extra_deps = [['activesupport','>= 2.0.2']]
README.rdocのFIXMEを編集する
Copyright (c) 2011 takuya_1st
パッケージを作る
まずはなにもない空っぽのパッケージを作ってみます.
$ rake package
簡単!!
テストを書く
test_helper.rb がすべての基本になる。
test_helper.rbに次の行を追加
require 'stringio' require 'test/unit' require 'rubygems' require 'drb/drb' require File.dirname(__FILE__) + '/../lib/noda' ##ここ以下にlibにおいたソースを追記する require 'noda' #テストで使うパッケージをロードする require 'noda/table' # include Noda #include は僕が好きで入れてます
テストファイルの書き方
テストファイルでは先ほどのヘルパーを読み込んでおけばいい
テストファイルの例
test_table.rb
require File.dirname(__FILE__) + '/test_helper.rb' class TestPageList < Test::Unit::TestCase def test_table_put
上記のようにhelperをテストファイルから読み込めばいい.
テストの実行
$ rake test
rakeでテストを実行する.rake便利!
ライブラリの作成
["./lib", "./lib/noda"]の二つのディレクトリが作られている。
./lib/noda.rb ←これは、モジュール必須ライブラリや共通読み込み用に使うみたい.
モジュールが読込のひな形が作ってあった。便利ねー
./lib/noda ←ここにコードを書いていく。
./lib/noda.rb
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) module Noda VERSION = '0.0.1' end
自分の書いたライブラリの置き場所
./lib/noda/my_class.rbのように書いていきます.
自分が書くときは一階層下げてlib/noda以下にファイルを書いていきます.
module Noda class MyClass def initialize #do something end end end
のように書いていく
コマンドを作るには
./script/generate コマンドでひな形を作ります.
$ ./script/generate executable my_command_name create bin create lib/my_command_name create bin/my_command_name create lib/my_command_name/cli.rb exists test create test/test_my_command_name.rb
たくさんファイルができあがるので、lib/my_command_name/cli.rb にコマンドの実体を書くと言い.