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 )

