それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

gemパッケージ の作り方

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

ここでたくさんモジュール突っ込んでくれる.

Gemのひな形を作る newgemコマンド

今回はnodaと言う名前のパッケージを作ります. *2

$ newgem noda

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 にコマンドの実体を書くと言い.

できあがったら rake package

ソースコードが出来たら

rake package 

してできあがりです.

*1:githubはgem builderサポート辞めちゃったみたいよ。

*2:大阪の野田のマックでこのエントリ書いてるので