Rails チュートリアル 1章 勉強メモ2

Rails チュートリアルの勉強メモ

railstutorial.jp

  • 前回の続き見ていきます

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 を取り出している
  • Gem::Version.correct?(str) 正しいバージョンの書き方かチェックしてるっぽい
  • Gem.respond_to?(:activate_bin_path)
    • respond_to? は引数で与えた文字列、シンボルのメソッドがあるかどうかのチェック

respond_to? (Object) - Rubyリファレンス

  • load もファイルを探して読み込む
  • activate_bin_path あるので Gem.activate_bin_path('railties', 'rails', version) を呼び出して load する path を出す
    • $HOME/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/railties-5.1.6/exe/rails
  • 今回は一旦終わりどうやら今度こそ rails 本体読むことになりそう・・・