履歴
概要
RubyGemsパッケージの作成手順。
全部gemで入る。
GPhys を例に説明する。 基本的には、プロジェクトフォルダ以下につぎのように適切な Rakefile, gphys.gemspec, Gemfile ファイルなどを置くだけでよい。
gemの作成は、全部設定したあとに、
$ rake build
で、pkg/ 以下に gphys-<バージョン番号>.gem ができる。
RubyGems.orgへの発行は、RubyGems.orgにアカウントを作成したあと、API keyを適切に設定しておき、
$ rake release
とすると、version.rb に記述しているバージョン番号で git のタグを打ってからRubyGems.org へリリースする。
プロジェクトフォルダ以下には、基本的につぎのようにファイルを配置する
gemパッケージのバージョンを記述しているrubyスクリプト。 今回は、lib/numru/gphys/ に置く。ライブラリファイルに直接書いても良い。
% cat lib/numru/gphys/version.rb
module NumRu
class GPhys
VERSION = "1.4.3"
end
end
% cat Gemfile source 'https://rubygems.org' # Specify your gem's dependencies in gphys.gemspec gemspec
一番単純なのは次のとおり:
# -* coding: utf-8 -*- require "bundler/gem_tasks"
rake compilerを使用した書き方は次のとおり:
# -* coding: utf-8 -*-
require 'rake/testtask'
require 'rake/extensiontask'
require 'rake/packagetask'
begin
require 'bundler/gem_tasks'
rescue LoadError
puts 'If you want to create gem, You must install Bundler'
end
require './lib/numru/gphys/version.rb'
def version
NumRu::GPhys::VERSION
end
task :default => :test
task :test => :compile
Rake::TestTask.new do |t|
t.libs << 'lib' << 'test'
t.test_files = FileList['test/test_*.rb'].exclude('test/test_assoccoords.rb')
end
Rake::ExtensionTask.new do |ext|
ext.name = 'gphys_ext'
ext.ext_dir = 'ext/numru/gphys'
ext.lib_dir = 'lib/numru'
end
Rake::PackageTask.new('gphys', "#{version}") do |t|
t.need_tar_gz = true
t.package_files.include `git ls-files`.split("\n")
end
gphys.gemspecファイルの全体はこちら。 詳細については<URL:http://guides.rubygems.org/specification-reference/>を参照。
細かく説明すると、
1) libファイルの場所を指定
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
2) gem パッケージのバージョン名を書いているファイルを読み込み
require 'numru/gphys/version'
3) gem パッケージの詳細をGem::Specification.new do .. end 間で指定
3-1) 基本設定
Gem::Specification.new do |spec|
spec.name = "gphys"
spec.version = NumRu::GPhys::VERSION
spec.authors = ["Takeshi Horinouchi", "Ryo Mizuta",\
"Daisuke Tsukahara", "Seiya Nishizawa", "Shin-ichi Takehiro"]
spec.email = ["eriko@gfd-dennou.org"]
spec.summary = %q{A multi-purpose class to handle Gridded Physical quantities}
spec.description = %q{Comprehensive library for self-descriptive gridded physical data (in NetCDF, GrADS, or on memory) with graphics. This version works with Ruby 2.0.}
spec.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/gphys/'
spec.licenses = ["BSD-2-Clause"]
3-2) ファイル構造について書く
require_paths でパスを指定。extensionファイルがある場合には、"ext"を先に書くようにする。
spec.files = `git ls-files -z`.split("\x0")
spec.require_paths = ["ext","lib"]
spec.test_files = spec.files.grep(%r{^(test|test_old|sample|testdata)/})
spec.bindir = "bin"
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.extensions << "ext/numru/gphys/extconf.rb"3-3) インストールした後に出すメッセージ
もちろんなくても良い
spec.post_install_message = "Thanks for installing! You can add extra libraries (i.e., ruby-lapack, rb-grib) to enjoy powerful calculating and handling datasets."
3-4) 依存関係について(rubygems関係のみ)
add_development_dependency は開発環境で入るrubygemsパッケージ
spec.required_ruby_version = Gem::Requirement.new(">= 1.8")
spec.add_dependency(%q<narray>, [">= 0.5.7"])
spec.add_dependency(%q<numru-misc>, [">= 0.1.0"])
spec.add_dependency(%q<numru-units>, [">= 1.7"])
spec.add_dependency(%q<narray_miss>, [">= 1.2.4"])
spec.add_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
spec.add_dependency(%q<ruby-dcl>, [">= 1.6.1"])
spec.add_dependency(%q<ruby-fftw3>, [">= 0.3"])
#spec.add_dependency(%q<gsl>, [">= 1.14"])
spec.add_dependency(%q<rb-gsl>, [">= 1.14"])
#spec.add_dependency(%q<ruby-lapack>, [">= 1.5"])
#spec.add_dependency(%q<rb-grib>, [">= 0.2.0"])
spec.add_development_dependency(%q<bundler>,[">=1.3"])
spec.add_development_dependency(%q<rake>)
spec.add_development_dependency(%q<rake-compiler>)