概要
Ruby on Railsのコードリーディング作業を記録する。
準備
rails new RailsCodeReadingで新規プロジェクトを作成する。- Gemfileに以下を追加
gem 'pg'
gem 'pry-rails'
gem 'pry-doc'
gem 'pry-byebug'
gem 'byebug'
bundle config set path '.bundle'を実行してから、bundle installを実行する。rails generate controller Example- コントローラーにindexメソッドを実装
def index
binding.pry
render json: { message: 'Hello World!' }
end
- ルーティングを設定
get "example" => "example#index"
コードリーディング
Railsがリクエストを処理する流れを追う。
http://127.0.0.1:3000/exampleにアクセスして、コンソールでpry-backtraceをすると、スタックトレースを見ることができる。
大量に出力されるため、すべてを追いきれないので端折ってみていく。
- pumaがリクエストを受け付けて、Railsアプリケーションを呼び出す
- puma/puma - lib/puma/request.rb#L99
- railties/lib/rails/engine.rb#L536
- Rack APIの定義
- rack/rack - lib/rack/sendfile.rb#L113
- Rackアプリケーションが実行される
- リクエストの情報を元に、ルーティングを解決する
- rails/rails - actionpack/lib/action_dispatch/journey/router.rb#L126
- rails/rails - actionpack/lib/action_dispatch/routing/route_set.rb#L66
- ルーティングでマッチしたcontrollerの処理を呼び出す
- コントローラーのindexを呼び出す
想像していたよりも複雑で、Rubyに慣れていないのもあり、雰囲気程度しか読み切れなかった。。。