Rails チュートリアル 1章 勉強メモ2
Rails チュートリアルの勉強メモ
- 前回の続き見ていきます
 
1章続き rails new 何やってんの?
- 前回は 
$HOME/.rbenv/shims/railsを読んだ exec "/usr/local/Cellar/rbenv/1.1.2/libexec/rbenv" exec "$program" "$@"の続きから読んでいくrbenv で色々やってるわけだが脱線して本題に入れないのでスキップ
- rbenv から rbenv-exec を呼び出している
 - rbenv-exec からついに rails を呼び出し
 $HOME/.rbenv/versions/*.*.*/bin/railsを実行
#!/usr/bin/env ruby # # This file was generated by RubyGems. # # The application 'railties' is installed as part of a gem, and # this file is here to facilitate running it. # require 'rubygems' version = ">= 0.a" str = ARGV.first if str str = str.b[/\A_(.*)_\z/, 1] if str and Gem::Version.correct?(str) version = str ARGV.shift end end if Gem.respond_to?(:activate_bin_path) load Gem.activate_bin_path('railties', 'rails', version) else gem "railties", version load Gem.bin_path("railties", "rails", version) end
- コメント見る限り自動生成されたものらしい
 本体は
railtiesにあるrequireは環境変数$:以下からファイルを探して読み込む$HOME/.rbenv/versions/2.6.2/lib/ruby/2.6.0/rubygems.rbを読んでいる- 脱線するのでスキップします
 - 実は rubygems は require を書き換えているらしい
 
RubyGemsはrequireの裏で何をやっているのか? - ブログのおんがえし
- これで gem で install したライブラリが使える
 pry で追っていると
rubygems/core_ext/kernel_require.rbの require に飛んでてすでに読んでない?って思ったが Ruby 1.9 から標準ライブラリになったらしいARGV には ["5.1.6", "new", "hello_app"]
/\A_(.*)_\z/は正規表現\Aは文頭、\zは文末[/\A_(.*)_\z/, 1]の 1 はマッチした値を取り出している- '5.1.6' を対象にとり、
5.1.6を取り出している 
- '5.1.6' を対象にとり、
 Gem::Version.correct?(str)正しいバージョンの書き方かチェックしてるっぽいGem.respond_to?(:activate_bin_path)respond_to?は引数で与えた文字列、シンボルのメソッドがあるかどうかのチェック