bundleコマンドによるジェネレーターを使うことで、プロジェクトのひな型を簡単に作ることができます。ここでは、ジェネレーターの便利さにあやかりましょう。
$ bundle gem rpn_calculator -t
以上のコマンドを実行すると、gemに必要なファイル一式がrpn_calculatorディレクトリに格納されます。ここではRSpecを用いて簡単なユニットテストも用意するので、bundleコマンドの引数に「-t」を与えています。
ジェネレーターコマンドを実行すると、以下のような出力が得られるでしょう。
$ bundle gem rpn_calculator -t create rpn_calculator/Gemfile create rpn_calculator/Rakefile create rpn_calculator/LICENSE.txt create rpn_calculator/README.md create rpn_calculator/.gitignore create rpn_calculator/rpn_calculator.gemspec create rpn_calculator/lib/rpn_calculator.rb create rpn_calculator/lib/rpn_calculator/version.rb create rpn_calculator/.rspec create rpn_calculator/spec/spec_helper.rb create rpn_calculator/spec/rpn_calculator_spec.rb create rpn_calculator/.travis.yml Initializing git repo in /Users/flost/var/repo/diy/ruby/rpn_calculator
これらのファイルの意味については、後々説明します。
もしbundleコマンドが見つからなくて使えない場合は、以下のようにしてbundlerをインストールしてください。
$ gem install bundler
gemのメタデータ(作者の情報や、依存パッケージの情報など)はgemspecファイルに記述します。今回は「rpn_calculator」という名前でひな型を用意したので、rpn_calculator.gemspecファイルにメタデータを記述します。
ひな型を作成したすぐの状態では、以下のようになっていると思います。
# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'rpn/calculator/version' Gem::Specification.new do |spec| spec.name = "rpn_calculator" spec.version = Rpn::Calculator::VERSION spec.authors = ["Moza USANE"] spec.email = ["mozamimy@quellencode.org"] 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.authorsやspec.emailは、作者の名前やメールアドレスを設定する項目です。もし作者やメールアドレスがGitで設定されていると、ひな型を作成したときにその情報で埋められるようです。
ここでは、spec.authorsとspec.email、spec.homepage辺りをあなた自身の情報に変えるだけで十分です。もし書きたければ、spec.summaryやspec.descriptionにgemの情報を書いてもよいでしょう。
ここで設定した各種情報はRubyGems.org等で公開する際に利用されるので、もしRubyGems.orgにアップロードする予定があるなら、漏れなく記述するようにしましょう。
ひな型のコードを少し編集して、取りあえずターミナルに文字列を出力するところまで作ってみましょう。
rpn_calculatorというプロジェクト名で初期化したので、ひな型としてRpnCalculatorモジュールが「/lib/rpn_calculator.rb」に用意されています。デフォルトの状態では以下のようになっているでしょう。
require "rpn_calculator/version" module RpnCalculator # Your code goes here... end
以下のように書き換えて、「RpnCalculator.run」と書くとターミナルに文字列が出力されるようにしてみましょう。
require "rpn_calculator/version" module RpnCalculator class << self def run(args) puts "my first gem" end end end
ここでは、前回紹介したクラスメソッドを定義するテクニックを使っています。モジュールの場合でも、同様にモジュールに対してメソッドを定義できます。
また、新しく「bin/rpn_calculator」ファイルを作成し、以下のように入力して保存してください。
#!/usr/bin/env ruby require "rpn_calculator" RpnCalculator.run(ARGV)
1行目は、rpn_calculatorがRubyスクリプトとして処理するために必要なshebangと呼ばれるものです。
3行目でRpnCalculatorモジュールを利用できるようにするために、rpn_calculatorをrequireしています。
5行目では、RpnCalculatorモジュールに定義されたrunメソッドを、コマンドライン引数ARGVをそのまま渡して実行しています。
また、rpn_calculatorをスクリプトとして実行できるように、以下のコマンドで実行権限を与えることも忘れないようにしましょう。
$ chmod +x bin/rpn_calculator
rpn_calculator.gemspec中の以下の内容に注目してください。
spec.add_development_dependency "bundler", "~> 1.7" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec"
これらは、作成するgemが依存しているパッケージを示しています。spec.add_development_dependencyには、開発時にのみ必要なgemを記述します。また、spec.add_dependencyを設定すると、通常使用する際にも必要なgemの依存関係も定義できます。もし別のgemを使いたい場合は、ここに追記していくようにします。
開発時にはこれらの依存パッケージが必要となるので、bundleコマンドでインストールします。
$ bundle install --path vendor/bundle
「--path vendor/bundle」オプションを付加することによって、インストールする依存ライブラリをvendor/bundleディレクトリ以下にまとめることができます。プロジェクトごとに依存ライブラリを管理しやすいので、現場では「--path vendor/bundle」を付けることが多いです。
bundle installコマンドを実行すると、以下のような出力が得られ、依存ライブラリをインストールできました。
$ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/......... Resolving dependencies... Installing rake 10.4.2 Using bundler 1.7.3 Installing diff-lcs 1.2.5 Using rpn_calculator 0.0.1 from source at . Installing rspec-support 3.1.2 Installing rspec-core 3.1.7 Installing rspec-expectations 3.1.2 Installing rspec-mocks 3.1.3 Installing rspec 3.1.0 Your bundle is complete! It was installed into ./vendor/bundle
bundlerでインストールしたライブラリを使ってスクリプトを起動するためには、起動したいスクリプトの前に、「bundle exec」を付けて起動します。ここでは、先ほど用意した「/bin/rpn_calculator」を実行したいので、以下のコマンドを実行します。
$ bundle exec bin/rpn_calculator
ここまでの作業に間違いがなければ、めでたく以下のように文字列が出力されるでしょう!
$ bundle exec bin/rpn_calculator my first gem
Copyright © ITmedia, Inc. All Rights Reserved.