Gemを作成する準備
何か作って勉強しないといけないな、と思ったので gem を作成してみる。
今のところはMySQL関連の何かを作ってみようかなぁと。ActiveRecordまわりをちょっと調べたいためです。
Gem を作るためにまず
bundle gem コマンドを打って雛形を作成する。ここらへんの手順については、パーフェクトRuby の 13章 gemパッケージの作り方 が詳しい。
作業をしようとしている適当なディレクトリで、bundle gem hoge コマンドを入力する。(hoge はgem名)
% bundle gem hoge
      create  hoge/Gemfile
      create  hoge/Rakefile
      create  hoge/LICENSE.txt
      create  hoge/README.md
      create  hoge/.gitignore
      create  hoge/hoge.gemspec
      create  hoge/lib/hoge.rb
      create  hoge/lib/hoge/version.rb
Initializing git repo in /home/muryoimpl/tmp/gems/hogeもし、テストをrspecで書こうと思っているのであれば、bundle gem hoge -t とすると、spec の雛形まで作成してくる。
% bundle gem hoge -t
      create  hoge/Gemfile
      create  hoge/Rakefile
      create  hoge/LICENSE.txt
      create  hoge/README.md
      create  hoge/.gitignore
      create  hoge/hoge.gemspec
      create  hoge/lib/hoge.rb
      create  hoge/lib/hoge/version.rb
      create  hoge/.rspec
      create  hoge/spec/spec_helper.rb
      create  hoge/spec/hoge_spec.rb
      create  hoge/.travis.yml
Initializing git repo in /home/muryoimpl/tmp/gems/hogeちょっとgemspecを直す
gem を作成するためには、gemspec の内容を整える必要がある。
Gem::Specification.new do |spec|
  spec.name          = "hoge"
  spec.version       = hoge::VERSION
  spec.authors       = ["muryoimpl"]
  spec.email         = ["muryoimpl@gmail.com"]
  spec.summary       = %q{TODO: Write a short summary. Required.}
  spec.description   = %q{TODO: Write a longer description. Optional.}
  spec.homepage      = ""
  spec.license       = "MIT"
  spec.files         = `git ls-files -z`.split("\x0")
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
  spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
  spec.require_paths = ["lib"]
  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec"
endspec.name等は bundle gem コマンドを打った時に入っているはず。
author, email は git で設定しているものがすでに入っているはず。
spec.summary と spec.description にgemの説明を入れませう。
gemspec に依存関係を書く
下3行に以下のコードがありますが、このadd_development_dependencyは開発時に使うgemを書く。例えば、テストにしか使わない rspec は add_development_dependency に書く。
  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec"
end実際にgemを動かすために必要なgemは、add_dependency に記載する。
ActiveRecord と Mysql2 を使おうとすると、以下のように記述する。
  spec.add_dependency "mysql2"
  spec.add_dependency "activerecord"
  spec.add_development_dependency "bundler", "~> 1.7"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec"
endだいたいこんなところで、準備ができているはず。
もし Github とかにソースを置くなら
bunlde gem コマンドが出力するものと、Githubでリポジトリを作成したときのものは少し違うので注意。
例えば、LICENSEはGithubは選択して出力できたりするが、bundle gem は MIT LICENSE が自動で出力されていたと思う。出力されるREADME の内容も違った。
bundle gem したもので構わないのであれば force push してしまえばいいし、いいとこどりをしたいのであれば、マージしてから push する。
すげー忘れるのが、README にある URL の変更だったりするので気をつけろ
1. Fork it ( https://github.com/[my-github-username]/hoge/fork )

