&tag(Bundler); *目次 [#b0f3038c] #contents *関連ページ [#b900de7b] -[[Gemfile]] *参考情報 [#pc172cbe] -[[Bundler: The best way to manage a Ruby application's gems:http://gembundler.com/]]…公式 *概要 [#c0e87f56] -使用するgemsを管理するためのツール *使用方法 [#s6d488cd] **簡単にGemfileだけを使う方法 [#g8f67aab] -Gemfileを用意する。例えばActiveRecordを単独で使用する場合 #pre{{ source 'https://rubygems.org' gem 'activerecord' gem 'mysql2' }} -インストール。vendor/bundle以下にgemが追加される。 $ bundle install --path vendor/bundle -使用する。自分のscriptの先頭で以下のようにかいて、ruby hoge.rbのように実行すると、vendor/bundle以下のgemを使ってくれる。 #pre{{ require "rubygems" require "bundler/setup" require "active_record" }} [[ruby - Are bundle exec and require 'bundler/setup' equivalent? - Stack Overflow:http://stackoverflow.com/questions/11117112/are-bundle-exec-and-require-bundler-setup-equivalent]]に、bundle execとbundle/setupの違いの説明あり。 **アプリのひな形を作成 [#y4d67c77] -gemとしてインストール可能なアプリのひな形を作る事も出来る(-bで実行ファイルも作ってくれる。-tがつくとテストファイルも作ってくれる) bundle gem sampleapp -b -t *Gemfile [#b937dfec] **requireってなに? [#n1448ca4] -[[ruby on rails - Bundler: What is the :require => false on the gemfile means? - Stack Overflow:http://stackoverflow.com/questions/4800721/bundler-what-is-the-require-false-on-the-gemfile-means]]によると、require => falseが指定されたものは、ダウンロードはされるが自動的にrequireはされないといいうこと。 -require するときの名前をかえることもできるらしい。 *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 .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 -パッケージをインストールする。 gem install pkg/demo-0.0.1.gem -またはrake installで一発。 -動作確認(irbででも)。 #pre{{ require 'demo' puts Demo.hello_world }} **パッケージリリース(PENDING) [#gc6b5755] -rake release *Tips [#b7d0452d] **パス指定の省略 [#lb751466] -buldle install のパス指定を省略する。[[bundler - bundle install するときに vendor/bundle を省略する方法 - Qiita:http://qiita.com/toshiwo/items/4e7c82852f3e14bf5a1d]] -~/.bundle/configに以下を記述。bundle configで確認できる。 #pre{{ --- BUNDLE_PATH: ./vendor/bundle }} **パッケージの命名規則 [#y6f7c4c7] -[[Name your gem - RubyGems Guides:http://guides.rubygems.org/name-your-gem/]]が参考になる。アンダースコアは単語の区切り、ハイフン(ダッシュ)はパッケージ階層として解釈されるので使い分けたほうが良い。 -パッケージ名にハイフンを使う場合注意が必要 [#z37b810f] -[[Create a Ruby Gem. Real World, play by play. Part 1:http://minimul.com/create-a-ruby-gem-real-world-play-by-play-part-1.html]]にもあるようにパッケージ名にaaa-bbbのようにハイフンを挟むとaaa/bbbのような深いフォルダが作成されてしまう。これを避けるためには、ハイフンを使わない、アンダースコアを使う、自分でフォルダ構造を変更するなどの工夫が必要になる。 *トラブルシューティング [#a2a85f78] **Gemfileでgitリポジトリを指定したgemが更新されない [#fcc3b78b] -gemspecでバージョンが上がっていれば「bundle update」で更新できる => 利用する側に手を入れるのが一番よい(と思ったけどだめかも)。さわれない場合vendor/bundleを削除して入れなおすしかない?