はじめてのgem作成
gem パッケージの作り方をメモ
ファイルの生成
gem_testというパッケージ名のgemを作成
-tオプションでspecファイルも作成
$ bundle gem gem_test -t create gem_test/Gemfile create gem_test/Rakefile create gem_test/LICENSE.txt create gem_test/README.md create gem_test/.gitignore create gem_test/gem_test.gemspec create gem_test/lib/gem_test.rb create gem_test/lib/gem_test/version.rb create gem_test/.rspec create gem_test/spec/spec_helper.rb create gem_test/spec/gem_test_spec.rb create gem_test/.travis.yml Initializating git repo in /home/vagrant/gem_test
gemspecファイル
<パッケージ名>.gemspecというファイルが生成されていると思います。
$ cd gem_test/ $ more gem_test.gemspec # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'gem_test/version' Gem::Specification.new do |spec| spec.name = "gem_test" spec.version = GemTest::VERSION spec.authors = ["TODO: Write your name"] spec.email = ["TODO: Write your email address"] spec.description = %q{TODO: Write a gem description} spec.summary = %q{TODO: Write a gem summary} spec.homepage = "" spec.license = "MIT" spec.files = `git ls-files`.split($/) 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.3" spec.add_development_dependency "rake" spec.add_development_dependency "rspec" end
各項目はこんな感じ
- name (gemのpackage名)
- version (gemのversion)
- authors (開発者名)
- email (連絡先)
- description (詳細説明)
- summary (1行の簡易説明)
- homepage (関連URL)
- license (gemの属するライセンス)
- files (公開ファイル一覧)
- executables (実行可能ファイル一覧)
- test_files (テスト用ファイル一覧)
- require_paths (実際のgemの処理を行うファイルのパス指定)
- add_development_dependency(開発時に必要なgemリの指定)
gemで行う処理の記述
gem のメソッド等を書いていきます。
$ vi lib/gem_test.rb require "gem_test/version" module GemTest + def self.new_method # "call new_method"という文字列を返すだけのメソッド + "call new_method" + end end
動作確認
$ bundle exec irb irb(main):001:0> require 'gem_test' => true irb(main):002:0> GemTest.new_method => "call new_method"
期待通りの動作をしてくれました。
テストを書く
テストの書き方は今後
$ vi spec/gem_test_spec.rb require 'spec_helper' describe GemTest do it 'should have a version number' do expect(GemTest::VERSION).not_to be nil end + it 'do new_method' do + expect(GemTest.new_method).to eq("call new_method") + end end $ rspec GemTest should have a version number do new_method Finished in 0.0011 seconds 2 examples, 0 failures
ビルドする
とりあえずrake taskを確認してみる
$rake -T rake build # Build gem_test-0.0.1.gem into the pkg directory rake install # Build and install gem_test-0.0.1.gem into system gems rake release # Create tag v0.0.1 and build and push gem_test-0.0.1.gem to Rubygems rake spec # Run RSpec code examples
buildを使ってみる
$ rake build rake aborted! ERROR: While executing gem ... (Gem::InvalidSpecificationException) "FIXME" or "TODO" is not an author Tasks: TOP => build (See full trace by running task with --trace)
gem_test.gemspecをちゃんと変更しろって怒られた
とりあえずTODOを消して再実行
$ rake build gem_test 0.0.1 built to pkg/gem_test-0.0.1.gem.
pkgディレクトリにgem_test-0.0.1.gemが作成されました。
installする
gem packageを指定してinstallする
$ gem install -l pkg/gem_test-0.0.1.gem Successfully installed gem_test-0.0.1 Parsing documentation for gem_test-0.0.1 Installing ri documentation for gem_test-0.0.1 1 gem installed
確認してみる
$ gem list gem_test *** LOCAL GEMS *** gem_test (0.0.1)
installできたー!
動作確認してみる
$ ruby -e "require 'gem_test'; p GemTest.new_method" "call new_method"
うごいたー!
作成したgemを公開してみる
とりあえずpush
$ git add . $ git commit -m "first commit" $ git remote add origin https://github.com/shiro16/gem_test.git $ git push -u origin master
こちらで登録を行ってください。
証明書を取得してrelease!
$ curl -u shiro16 https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials $ chmod 0600 ~/.gem/credentials $ rake release Repushing of gem versions is not allowed. Please use `gem yank` to remove bad gem releases.
同じ名前のgemを既に他の人が作っているようなので
登録出来ないって言われました。
gemのpackage名が被っていなければこちらで確認すると公開されているかと