何か作って勉強しないといけないな、と思ったので 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"
end
spec.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 )