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

作業場所

REPL
起動
irb
ctrl+d
やexit, quitで終了

Rubyスクリプトの実行
- 適当な
src/scripts/hello.rb
を作成
# src/scripts/hello.rb
puts "Hello World"
スクリプトを実行
ruby src/scripts/hello.rb

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

Gemのインポート
ターミナル出力を色付けするgem colorize
を追加してみる
gem "colorize", "~> 1.1.0"
インポート
require "colorize"
puts "This is blue".colorize(:blue)
colorizeはStringを上書きしているっぽい

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で指定されたものがインストールされるっぽい

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

モジュールの作成
サンプル 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

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`

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

外部依存を含む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

モジュールテスト
RSpecのsetup
モジュールのルートでRSpecの初期化コマンドを実行
-
.rspec
とspec/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