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?
は引数で与えた文字列、シンボルのメソッドがあるかどうかのチェック