Bundler

Tag: Bundler/gemパッケージ作成

目次

関連ページ

参考情報

gemパッケージの作り方

注意: Windowsの場合

  • msysgitにパスを通してないとbundle gemがエラーになる。

ひな形の生成

ファイルの生成

  • 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 [キータ]
    • gemspecにrspecを追加して、bundle install実行。specフォルダとspec_helperをつくるぐらいかな。

gemspecファイルの編集

  • demo.gemspecファイルを編集する。
    # 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のインストール

  • pathを指定する。開発時はruntime_dependency/development_dependencyry方法がインストールされる。リリース後はruntime_dependencyだけインストールされる。
    bundle install --path vendor/bundle

パッケージ作成

  • lib/demo.rbに実装を書く。
    require "demo/version"
    
    module Demo
      def self.hello_world
        p "hello world!!"
      end
    end
    

パッケージ実行

  • bundle 経由で実行する
    bundle exec bin/demo.rb

パッケージビルド

  • パッケージをビルドする。rakeコマンドを使用
    rake build
  • パッケージをインストールする。
    gem install pkg/demo-0.0.1.gem
  • またはrake installで一発。
  • 動作確認(irbででも)。
    require 'demo'
    puts Demo.hello_world
    

パッケージリリース(PENDING)

  • rake release

パッケージのテスト

MiniTest実行

直接実行

  • 以下のコマンドで実行。
    bundle exec ruby test/hoge_test.rb
  • test_helperのロードに失敗した場合、hoge_test.rbを編集し以下のように修正する。
    require_relative 'test_helper'

Rakefileから実行

  • 以下のようなRakefileを作成
    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 $*

パッケージの構成

コマンドラインツールの構成

  • 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

RubyGems.orgへの登録

RubyGems.orgから削除する

トラブルシューティング

パッケージがローカル環境にインストールできない

  • 以下のコマンドで実行しても自分のローカル環境にgemがインストールされない。
    bundle exec rake install
  • 上のコマンドを実行した場合、vendor/bundle以下にインストールされてしまう(bundle install --path vendor/bundleの場合)。従ってpkg以下におりて手動でgem installするしかない。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-11 (火) 21:33:54 (38d)