RubyGemsパッケージの作成手順

履歴

概要

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 へリリースする。

フォルダ構造

プロジェクトフォルダ以下には、基本的につぎのようにファイルを配置する

version.rb

gemパッケージのバージョンを記述しているrubyスクリプト。 今回は、lib/numru/gphys/ に置く。ライブラリファイルに直接書いても良い。

% cat lib/numru/gphys/version.rb
module NumRu
  class GPhys
    VERSION = "1.4.3"
  end
end

Gemfile

% cat Gemfile
source 'https://rubygems.org'

# Specify your gem's dependencies in gphys.gemspec
gemspec

Rakefile

一番単純なのは次のとおり:

# -* 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

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) ファイル構造について書く

3-3) インストールした後に出すメッセージ

3-4) 依存関係について(rubygems関係のみ)