Open12

【実行環境】Rubyに一から入門してみる

tf63tf63

Rubyスクリプトの実行

  • 適当なsrc/scripts/hello.rbを作成
# src/scripts/hello.rb
puts "Hello World"

スクリプトを実行

ruby src/scripts/hello.rb
tf63tf63

Gemのインストール

bundle install # npm installに相当
bundle add <gem> # npm install <package>に相当
bundle add --group="development test" <gem> # グループを指定してgemを追加
tf63tf63

Gemのインストール先

  • 今回の環境では/usr/local/bundle/gemsにgemがインストールされている
  • $GEM_HOME がインストール先っぽい
user@7d63a74dc676:/app$ echo $GEM_HOME
/usr/local/bundle
  • colorizeではこんな感じ
user@7d63a74dc676:/app$ find /usr/local/bundle/gems/colorize-1.1.0 
/usr/local/bundle/gems/colorize-1.1.0
/usr/local/bundle/gems/colorize-1.1.0/test
/usr/local/bundle/gems/colorize-1.1.0/test/test_colorize.rb
/usr/local/bundle/gems/colorize-1.1.0/test/test_colorized_string.rb
/usr/local/bundle/gems/colorize-1.1.0/colorize.gemspec
/usr/local/bundle/gems/colorize-1.1.0/CHANGELOG.md
/usr/local/bundle/gems/colorize-1.1.0/Rakefile
/usr/local/bundle/gems/colorize-1.1.0/LICENSE
/usr/local/bundle/gems/colorize-1.1.0/README.md
/usr/local/bundle/gems/colorize-1.1.0/lib
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize.rb
/usr/local/bundle/gems/colorize-1.1.0/lib/colorized_string.rb
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize/instance_methods.rb
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize/errors.rb
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize/version.rb
/usr/local/bundle/gems/colorize-1.1.0/lib/colorize/class_methods.rb
  • *.gemspecのfilesで指定されたものがインストールされるっぽい

https://github.com/fazibear/colorize/blob/master/colorize.gemspec

tf63tf63

Rubyスクリプトのインストール先

  • PATHに/usr/local/bundle/binが追加されているのでこれっぽい
user@7d63a74dc676:/app$ ls /usr/local/bundle/bin/
faker              nokogiri           rake               ri                 ruby-lsp-check     standardrb         
htmldiff           racc               rbs                rspec              ruby-lsp-launcher  thor               
irb                rackup             rdbg               rubocop            ruby-parse         
ldiff              rails              rdoc               ruby-lsp           ruby-rewrite
tf63tf63

モジュールの作成

サンプル helloを作成してみる

user@7d63a74dc676:/app$ find src/gems/hello -type f
src/gems/hello/hello.gemspec
src/gems/hello/lib/hello/hello_world.rb
src/gems/hello/lib/hello.rb

hello/hello.gemspec

  • モジュールの情報を書くやつ
Gem::Specification.new do |spec|
  spec.name = "hello"
  spec.version = "0.1.0"
  spec.summary = "hello"
  spec.authors = ["Your Name"]
  spec.files = Dir["lib/**/*.rb"]
  spec.require_paths = ["lib"]
end

hello/lib/hello.rb

  • エントリポイント的なやつ?
require_relative "hello/hello_world"

hello/lib/hello/hello_world.rb

module Hello
  def self.hello_world
    "Hello, world!"
  end
end
tf63tf63

Localモジュールのインポート

インストール

 bundle add hello --path=src/gems/hello

インポート (src/scripts/call.rb)

require "hello"

puts Hello.hello_world

実行

bundle exec ruby `src/scripts/call.rb`
tf63tf63

ruby <path/to/rb> | bundle exec ruby <path/to/rb>

  • ruby <path/to/rb>では現在インストールされているgemが考慮されない?
  • bundle exec ruby <path/to/rb>ではGemfileに基づいてgemが読み込まれる
tf63tf63

外部依存を含むLocalモジュールの作成

依存は*.gemspecに記述する

Gem::Specification.new do |spec|
  略
  spec.add_dependency "awesome_print", "~> 1.9.2"
end

Gemfileにはgemspecと書いておけば*.gemspecの内容を読み込んでくれる (もちろんdevelopmentの依存はGemfileに書く)

source "https://rubygems.org"

gemspec
tf63tf63

モジュールテスト

RSpecのsetup

モジュールのルートでRSpecの初期化コマンドを実行

  • .rspecspec/spec_helper.rbが作成される
bundler exec rspec --init

spec_helper.rbでテスト対象をインポート

  • $LOAD_PATHはモジュールを検索するパス
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "hello"

テストを作成

require "spec_helper"

RSpec.describe Hello do
  describe ".hello_world" do
    it 'returns "Hello, world!"' do
      expect(Hello.hello_world).to eq("Hello, world!")
    end
  end
end

テストを実行

user@7d63a74dc676:/app/src/gems/hello$ rspec
.

Finished in 0.00198 seconds (files took 0.04714 seconds to load)
1 example, 0 failures