それマグで!

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

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

ruby のGemパッケージを作る方法.その2

以前のエントリでnewgem を使ったgem の作り方をまとめた後,rubygemsにアップロードしようと思ったら,rubygemsのドキュメントに「おまえらjeweler使えよ」的な事が書いてあったので試してみました.

Publishing your own RubyGem / Gemcutter / Knowledge Base - RubyGems.org Support

Publishing your own RubyGem によれば

  1. Sign up for an account on Gemcutter
  2. Make sure you’re running at least RubyGems 1.3.3. gem -v
  3. Create your gem. Get started with Jeweler
  4. Install the gemcutter gem with: gem install gemcutter
  5. Build your gem with: gem build yourgem.gemspec
  6. Push it! gem push yourgem-0.0.1.gem

rubygems のページを見るとjeweler を使えと書いてありました.
newgem は使わないみたいです.

gem を jeweler で作って公開する手順

  1. Gemで必要なパッケージをインストール
  2. rubygemsにアカウントを作る
  3. gitレポジトリを作って転送する.
  4. githubに転送する。
  5. rubygemsAPIキーを設定する
  6. rake でGemを作成する
  7. gem push でサーバー転送&公開

以上になります.初期設定が終われば6,7の繰り返しになりますね.

インストール

gem install jewler
gem install gemcutter

インストールできたらレポジトリを作る

パッケージを作る.レポジトリ作成

jeweler --create-repo noda

--create-repo オプションをつければ、これだけでgithubにもレポジトリが作られるので嬉しい.もちろんgithub関連の設定は終わらせている前提,

takuya@letsnote:~/Desktop/noda/test$ jeweler --create-repo noda
        create  .gitignore
        create  Rakefile
        create  Gemfile
        create  LICENSE.txt
        create  README.rdoc
        create  .document
        create  lib
        create  lib/noda.rb
        create  test
        create  test/helper.rb
        create  test/test_noda.rb
Jeweler has prepared your gem in noda
Jeweler has pushed your repo to http://github.com/takuya/noda


ホームディレクトリ(/home/takuya/.gitconfig) にgithub のアカウント設定が必要.設定していない場合は設定を済ませておくこと

できあがりを確認する.

レポジトリ作成が終わると、直ぐに作業が出来るようになっている.必要なファイルやディレクトリはすべて用意されている.

実行後は、ディレクトリが次のようになっていました..

.
└── noda
    ├── Gemfile
    ├── lib
    │   └── noda.rb
    ├── LICENSE.txt
    ├── Rakefile
    ├── README.rdoc
    └── test
        ├── helper.rb
        └── test_noda.rb

3 directories, 7 files

Rakeタスク一覧を確認する.

rake コマンドで作業は進むのでまず,Rakeを確認しておく

rake -T

rake で行うので,rake を見ておく。

takuya@letsnote:~/Desktop/noda/test/noda$ rake -T
(in /home/takuya/Desktop/noda/test/noda)
rake build               # Build gem into pkg/
rake clobber_rcov        # Remove rcov products for rcov
rake clobber_rdoc        # Remove rdoc products
rake console[script]     # Start IRB with all runtime dependencies loaded
rake gemcutter:release   # Release gem to Gemcutter
rake gemspec             # Generate and validate gemspec
rake gemspec:debug       # Display the gemspec for debugging purposes, as jeweler knows it (not from the filesystem)
rake gemspec:generate    # Regenreate the gemspec on the filesystem
rake gemspec:release     # Regenerate and validate gemspec, and then commits and pushes to git
rake gemspec:validate    # Validates the gemspec on the filesystem
rake git:release         # Tag and push release to git.
rake install             # Build and install gem using `gem install`
rake rcov                # Analyze code coverage with tests
rake rdoc                # Build the rdoc HTML Files
rake release             # Release gem
rake rerdoc              # Force a rebuild of the RDOC files
rake test                # Run tests
rake version             # Displays the current version
rake version:bump:major  # Bump the major version by 1
rake version:bump:minor  # Bump the a minor version by 1
rake version:bump:patch  # Bump the patch version by 1
rake version:write       # Writes out an explicit version.

ちなみに、Rakeを確認時に、モジュール足りないエラーが出てきたので.このときrcov と shoulda をインストールした.

バージョンファイルを作る

rake version:write

バージョンファイルが無いと、Gemパッケージを作れないので,何よりまず0.0.0バージョンを示すファイルを作る

takuya@letsnote:~/Desktop/noda/test/noda$ rake version:write
(in /home/takuya/Desktop/noda/test/noda)
Updated version: 0.0.0

RakeFile と gemspec を編集する

次に,TODO書かれている箇所を編集します.TODOと書かれた場所を編集しないとGemを作れません.


TODOと書かれた部分を編集しておく

gem を作る

gem build FOOOBAAR.gemspec

いよいよgemを作ります.バージョン0.0.0で中身の空っぽのgemを作る.

takuya@letsnote:~/Desktop/noda/test/noda$ gem build noda.gemspec
  Successfully built RubyGem
  Name: noda
  Version: 0.0.0
  File: noda-0.0.0.gem
---

gemをrubygems に転送する

できあがったら,始めの第一歩として空Gemをrubygemsサーバーで公開します.

rubygemsにログインして・・・

ダッシュボードの下の方にある.・・・

Reset Password
Need a new password? No problem. Request a new one here.
API Access

を確認してAPIアクセスキーをコピーしてきます。

APIキーを ~/.gem/credentialsに書き加える

発行されたAPIキーをホームディレクトリに設定します.

~/.gem/credentials
:rubygems_api_key: 933585a101XXXXXXXXX

gemをサーバに転送する

設定出来たらgem をサーバーに転送できます.
転送はgemコマンドで送ります.

gem push noda-0.0.0.gem


以上でできあがり.

ファイルの作成.lib にファイルを追加後の処理

lib にファイルを作ったら、そのファイルをgemspec に登録する。このへんはrake タスクで全部出来る

自作ライブラリを作ったら、RubyGems公開したパッケージを更新します.
バージョンを一つあげて,Gemを作って,転送します.

VERSION=0.0.1
echo $VERSION> VERSION     #version あげる
rake gemspec
gem build noda.gemspec
gem push noda-$VERSION.gem

日常作業

一度できてしまえば後はらく

cd path/to/my/gem
rake version:bump:patch
rake test
git commit -a
rake release

使って見て.感じたこと

別にGemが作れれば何でもイイと思うんです.僕はconsole とか付いて来てRakeが使いやすいnewgemの方が気に入りました.

newgemを使った場合でも,gem push を使えるので、基本的に同じ作業になります。
違いはRakeファイルのタスクと、初期作成ディレクトリ構成にあります。