There's an echo in my head

日々のメモ。

bundlerでgemを作る

不完全ながらメモ。

雛形を作る

$ bundler gem hello

こうするとhelloディレクトリが作られて、その中にひな形のファイル(hello.gemspecとかlibとかが作られる)。

hello.gemspecを変更する

TODOと書かれているgem.descriptiongem.summaryは変更しないとrake buildする際にエラーが出るので必ず書き換える。

Gem::Specification.new do |gem|
  gem.name          = "hello"
  gem.version       = Hello::VERSION
  gem.authors       = ["Masato Ikeda"]
  gem.email         = ["masato.ikeda@gmail.com"]
  gem.description   = %q{テキトーに書く}
  gem.summary       = %q{テキトーに書く}
  gem.homepage      = "https://github.com/a2ikm/hello_gem"

  gem.files         = `git ls-files`.split($/)
  gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
  gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
  gem.require_paths = ["lib"]
end

gem.homepagegem-browseで使われるので、特に理由がなければGitHubのリポジトリにしておくと便利。

あと、デフォルトだとgitのリポジトリに追加されているものだけがgemのパッケージに含まれるようになっている。これを任意のものにしたければ、gem.filesの部分を書き換えて個別に列挙する。

雛形を作った時点でgitリポジトリの初期化も行われているので、この時点でコミットしておくといいかも。一般的に不要なファイルはデフォルトで生成される.gitignoreで除外されている。

$ git add .
$ git commit -am "initial commit"

実行ファイルを追加する

binディレクトリを作ってそこに追加すればOK。

$ mkdir bin
$ echo '#!/usr/bin/env ruby' >> bin/gem_name
$ echo 'puts "Hello world!"' >> bin/gem_name
$ git add bin
$ git commit -m "add executables"

実装する

ひたすら実装。

gemファイルを作る

rakeタスクのbuildでpkgディレクトリ以下にバージョン番号付きのgemファイルが作られる。バージョン番号はlib/hello/version.rbで定義されているものが使われる。pkg以下の既存のgemファイルと名前が衝突した場合には上書きされる。

$ rake build

インストール

最新のバージョンがインストールされる(たぶん)。

$ rake install

リリース

最新のバージョンがrubyegms.orgで公開される(たぶん)。

$ rake release

参考

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。