読者です 読者をやめる 読者になる 読者になる

gemパッケージの作り方メモ。

RubyGems / rss_detector
GitHub / rss_detector


この前作ったRSSを検出するRubyスクリプトをgemのパッケージとして公開してみました。

思っていたよりは簡単にできたけど、すぐに忘れそうなので作成手順を備忘録として残しておきます。


・作成手順

  1. ひな形の作成
  2. .gemspecの編集
  3. README.mdの編集
  4. 実装
  5. テスト
  6. バージョンの変更
  7. コミット
  8. ローカルでのビルド、インストール、動作確認
  9. GitHubへの登録
  10. RubyGemsAPIキーの取り込み
  11. リリース
  12. (おまけ)Travis-CIの設定


1.ひな形の作成

bundlerを使ってひな形を作成する。(git initも同時に実行される)

% bundle gem hoge
% cd hoge
% git commit -m "init"


2..gemspecの編集

descriptionとsummaryを編集する。(TODOコメントが残っているとテストでこける)
add_devendencyでは、作成するgem自体が依存するパッケージを指定する。
add_development_dependencyでは、gemの開発に必要なパッケージを指定する。

% vi hoge.gemspec

gem.description = %q{hoge is a fuga.}
gem.summary = %q{hoge.}
gem.homepage = "https://github.com/[user-name]/hoge"

gem.add_dependency "nokogiri", "~>1.5"
gem.add_development_dependency "rspec"


3.README.mdの編集
GitHub用にREADMEファイルを準備する。

% vi README.md


4.実装

lib配下にGemを実装する。

% vi lib/hoge.rb


5.テスト

rspecを利用してみた。Rakefileを編集して'rake spec'でテストが実行できるようにしておく。

% mkdir spec
% vi spec/spec_helper.rb

# encoding: utf-8
require 'rubygems'
require 'hoge'

% vi spec/hoge_spec.rb

# coding: utf-8
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

describe hoge do
    ...
end

% vi Rakefile

require "bundler/gem_tasks"

Bundler.setup
require 'rspec/core/rake_task'

desc "run spec"
RSpec::Core::RakeTask.new(:spec) do |t|
  t.rspec_opts = ["-c", "-fs"]
end

% rake spec


6.バージョンの変更

バージョンを変更する。

% vi lib/hoge/version.rb

VERSION = "0.0.2"


7.コミット

% git add.
% git commit -m "v0.0.2"


8.ローカルでのビルド、インストール、動作確認

# ビルド
% rake build

# インストール
% rake install

% bundle exec irb
> require 'hoge'

# サンプルコード実行
bundle exec ruby sample/sample.rb


9.GitHubへの登録

GitHubでリポジトリを作成し、リポジトリへPushする。

% git remote add origin git@github.com:[user-name]/hoge.git
% git push -u origin master


10.RubyGemsAPIキーの取り込み

RubyGemsのアカウントを作成し、アカウントページに書いてある方法でAPIキーを取り込む。

% curl -u [user-name] https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials


11.リリース

問題がなければリリースする。(GitHubのリポジトリでタグが切られ、RubyGemsに登録される)

% rake release


12.(おまけ)Travis-ciの設定

.travis-ci.ymlに設定を書いてリポジトリに格納し、Travis-ciのサイトで設定を有効にするとGitHubへPushした時にビルドを自動で実行してくれる。
メールで結果を通知させたり、README.mdにビルドステータスを表示させたりすることもできる。

% vi .travis-ci.yml

language:  ruby
rvm:
  -  "1.9.2"
  -  "1.9.3"
script: rake spec
notifications:
  email:  [user-name]@gmail.com

% vi .README.md

# hoge [![Build Status](https://travis-ci.org/[user-name]/hoge.png?branch=master)](https://travis-ci.org/[user-name]/hoge)