#author("2018-12-11T21:33:54+09:00","default:wikiwriter","wikiwriter") #author("2020-11-16T08:06:25+00:00","default:src128","src128") [[Bundler]] &tag(Bundler/gemパッケージ作成); *目次 [#c31f33a4] #contents *関連ページ [#e82e6308] *参考情報 [#s8cce1e1] *gemパッケージの作り方 [#gfba42a0] **注意: Windowsの場合 [#pe78e1b3] -msysgitにパスを通してないとbundle gemがエラーになる。 **ひな形の生成 [#i19d63fd] ***ファイルの生成 [#v665d5d9] -bundle gemコマンドでつくることができる。 bundle gem demo -オプションで-bを指定すれば実行ファイルを、-tを指定すればテストファイルを作ってくれる(rspec)。 bundle gem demo -b -t -もしくはminitestもサポートしている bundle gem dbtools -b --test=minitest -後からspecサポートを追加したい場合、次のリンクが参考になる。[[Ruby - bundlerを使ってRSpecを書きつつGemを開発する - Qiita [キータ]:http://qiita.com/kakkunpakkun/items/4271973425e151afbd1a]] --gemspecにrspecを追加して、bundle install実行。specフォルダとspec_helperをつくるぐらいかな。 ***gemspecファイルの編集[#p370c6f9] -demo.gemspecファイルを編集する。 #pre{{ # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'demo/version' Gem::Specification.new do |spec| spec.name = "demo" spec.version = Demo::VERSION spec.authors = ["src"] spec.email = ["tanaka@test.net"] 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" end }} -gitと連携することが考えられていて、authors、email、filesなどはgitから情報をもってきている。 -descriptionに、TODOやFIXMEが含まれているとビルドできない。 -依存関係の設定は、runtime_dependencyとdevelopment_dependencyが存在。runtimeはgemを動かすのに必要なもの。developmentは開発時に必要なもの(例:RSpec)。 -開発ディレクトリでbundle installすると、runtime/development両方の依存関係にあるライブラリがインストールsれる。 -開発後gemファイルをgem installやbundle installでインストールした場合、runtime dependencyにあるラウぶらりだけがインストールされる。 ***gemのインストール [#g5e00519] -pathを指定する。開発時はruntime_dependency/development_dependencyry方法がインストールされる。リリース後はruntime_dependencyだけインストールされる。 bundle install --path vendor/bundle **パッケージ作成 [#y5b00e61] -lib/demo.rbに実装を書く。 #pre{{ require "demo/version" module Demo def self.hello_world p "hello world!!" end end }} **パッケージ実行 [#o31f0c74] -bundle 経由で実行する bundle exec bin/demo.rb **パッケージビルド [#jb2bc76f] -パッケージをビルドする。rakeコマンドを使用 rake build bundle exec rake build -パッケージをインストールする。 gem install pkg/demo-0.0.1.gem -またはrake installで一発。 -動作確認(irbででも)。 #pre{{ require 'demo' puts Demo.hello_world }} **パッケージリリース(PENDING) [#gc6b5755] -rake release *パッケージのテスト [#p839cd2e] **MiniTest実行 [#gdd15c8d] ***直接実行 [#l221d749] -以下のコマンドで実行。 bundle exec ruby test/hoge_test.rb -test_helperのロードに失敗した場合、hoge_test.rbを編集し以下のように修正する。 require_relative 'test_helper' ***Rakefileから実行 [#a7706101] -以下のようなRakefileを作成 #pre{{ require "bundler/gem_tasks" require "rake/testtask" Rake::TestTask.new(:test) do |t| t.libs << "test" t.test_files = FileList['test/**/*_test.rb'] end task :default => :test }} -以下のように実行する # bundle exec rake test TEST=test/hoge_test.rb bundle exec rake test $* *パッケージの構成 [#u46504aa] **コマンドラインツールの構成 [#ued2d92e] -foo gemを作成した場合、exe/fooから、lib/foo.rbを呼び出し(foo.rbではlib/foo/*.rbを呼び出す)、foo.rbの内部でコマンドラインを解析し、処理を行う。 -それよりも小規模なツールの場合、上記構成をexe/fooからlib/foo.rbをexe/barからlib/bar.rbを呼び出すといったツールを単にまとめてもよいかも。デモ: [[cmd_line_tools/bin at master · jpsember/cmd_line_tools:https://github.com/jpsember/cmd_line_tools/tree/master/bin]] *RubyGems.orgへの登録 [#of09a81d] -[[Rubygemsでライブラリを公開したので、手順をまとめてみた | Developers.IO:http://dev.classmethod.jp/server-side/language/how-to-publish-rubygems/]] -アカウントを登録。 -APIキーの設定(初回のみ) curl -u <username> https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials -公開 bundle exec rake release -更新時はversion.rbのバージョンを変更し、commit/pushした後以下のコマンドを実行。 bundle exec rake release *RubyGems.orgから削除する [#ab65e01b] -[[RubyGems.org に公開している gem を削除する方法 - present:https://tnakamura.hatenablog.com/entry/2016/10/29/gemcutter]] gem yank 名前 -v バージョン -全部のバージョンを削除したらrubygems.orgからも削除されるはず。 *トラブルシューティング [#s48e9294] **パッケージがローカル環境にインストールできない [#u62c7820] -以下のコマンドで実行しても自分のローカル環境にgemがインストールされない。 bundle exec rake install -上のコマンドを実行した場合、vendor/bundle以下にインストールされてしまう(bundle install --path vendor/bundleの場合)。従ってpkg以下におりて手動でgem installするしかない。